The '''tcl::unsupported::disassemble''' command disassembles bytecode generated from [proc]s, [lambda]s and general scripts. : '''tcl::unsupported::disassemble''' '''proc'''|'''lambda'''|'''script''' ''thingToDisassemble'' Only present from [Tcl 8.5]. Does not disassemble things created by [tbcload]. Not present in [safe] interpreters. This command was developed during the [Fourteenth Annual Tcl/Tk Conference (2007)]. '''Example Output''' ====== % proc foo {x} { for {set y 0} {$y < $x} {incr y} { puts $x,$y } } % tcl::unsupported::disassemble proc foo ByteCode 0x0x9a2ec58, refCt 1, epoch 1, interp 0x0x9a377d8 (epoch 1) Source "\n for {set y 0} {$y < $x} {incr y} {\n puts $x,$y" Cmds 4, src 61, inst 43, litObjs 4, aux 0, stkDepth 4, code/src 0.00 Proc 0x0x9a48f70, refCt 1, args 1, compiled locals 2 slot 0, scalar, arg, "x" slot 1, scalar, "y" Exception ranges 2, depth 1: 0: level 0, loop, pc 7-18, continue 20, break 40 1: level 0, loop, pc 20-31, continue -1, break 40 Commands 4: 1: pc 0-41, src 4-59 2: pc 0-3, src 9-15 3: pc 7-18, src 45-54 4: pc 20-31, src 29-34 Command 1: "for {set y 0} {$y < $x} {incr y} {\n puts $x,$y\n " Command 2: "set y 0" (0) push1 0 # "0" (2) storeScalar1 %v1 # var "y" (4) pop (5) jump1 +28 # pc 33 Command 3: "puts $x,$y" (7) push1 1 # "puts" (9) loadScalar1 %v0 # var "x" (11) push1 2 # "," (13) loadScalar1 %v1 # var "y" (15) concat1 3 (17) invokeStk1 2 (19) pop Command 4: "incr y" (20) startCommand +12 1 # next cmd at pc 32 (29) incrScalar1Imm %v1 +1 # var "y" (32) pop (33) loadScalar1 %v1 # var "y" (35) loadScalar1 %v0 # var "x" (37) lt (38) jumpTrue1 -31 # pc 7 (40) push1 3 # "" (42) done ====== ---- !!!!!! %| [Category Internals] |% !!!!!!