命令在哪里编译?

时间:2016-07-12 03:20:31

标签: tcl

我正在查看tcl 8.6.3的源代码,并希望了解字节代码的工作原理。但我找不到编译命令if的位置。

我查看了tclCompCmds.c,它有一堆命令,例如breakcontinue等,但我看不到命令​​if

你能指出我命令if的编译例程在哪里吗?

1 个答案:

答案 0 :(得分:0)

位于generic/tclCompCmdsGR.c(函数TclCompileIfCmd())。

BTW,在寻找所请求的函数时,我注意到不同源文件的命令实现划分并不严格遵循其中两个开头声明的方案。

/*
 * 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}开头的命令} 命令