我正在查看tcl 8.6.3的源代码,并希望了解字节代码的工作原理。但我找不到编译命令if
的位置。
我查看了tclCompCmds.c
,它有一堆命令,例如break
,continue
等,但我看不到命令if
。
你能指出我命令if
的编译例程在哪里吗?
答案 0 :(得分:0)
位于generic/tclCompCmdsGR.c
(函数TclCompileIfCmd()
)。
/*
* tclCompCmds.c --
*
* This file contains compilation procedures that compile various Tcl
* commands into a sequence of instructions ("bytecodes").
*
*/
/*
* tclCompCmdsGR.c --
*
* This file contains compilation procedures that compile various Tcl
* commands (beginning with the letters 'g' through 'r') into a sequence
* of instructions ("bytecodes").
*
*/
/*
* tclCompCmdsSZ.c --
*
* This file contains compilation procedures that compile various Tcl
* commands (beginning with the letters 's' through 'z', except for
* [upvar] and [variable]) into a sequence of instructions ("bytecodes").
* Also includes the operator command compilers.
*
*/
tclCompCmds.c 并未声明它仅包含部分命令实现,但其他两个文件表明它应包含名称以“a”到“f”开头的命令。 但是,作为例外,它还包括 lmap
命令的实现。
tclCompCmdsGR.c 声明它包含以'g'到'r'开头的命令的实现。 然而 upvar
和 variable
也属于 tclCompCmdsGR.c ,但那是在上一个文件 tclCompCmdsSZ.c 中明确说明,除了该异常之外,它还包含以's'到'z',以及 {{1}开头的命令} 命令。