Posted to tcl by dgp at Thu Jul 25 05:15:51 GMT 2013view pretty
% tcl::unsupported::disassemble script $script ByteCode 0x0x101012810, refCt 1, epoch 15, interp 0x0x10084a410 (epoch 15) Source "\nset f 1e-200\nfor {set ct $argv} {$ct > 0} {incr ct -1}" Cmds 6, src 94, inst 41, litObjs 7, aux 0, stkDepth 3, code/src 0.00 Exception ranges 2, depth 1: 0: level 0, loop, pc 15-23, continue 25, break 38 1: level 0, loop, pc 25-28, continue -1, break 38 Commands 6: 1: pc 0-5, src 1-12 2: pc 6-39, src 14-92 3: pc 6-11, src 19-30 4: pc 15-23, src 62-90 5: pc 17-22, src 69-89 6: pc 25-28, src 44-53 Command 1: "set f 1e-200" (0) push1 0 # "f" (2) push1 1 # "1e-200" (4) storeStk (5) pop Command 2: "for {set ct $argv} {$ct > 0} {incr ct -1} {\n set f [" Command 3: "set ct $argv" (6) push1 2 # "ct" (8) push1 3 # "argv" (10) loadStk (11) storeStk (12) pop (13) jump1 +17 # pc 30 Command 4: "set f [expr {$f * 1.0000017}]" (15) push1 0 # "f" Command 5: "expr {$f * 1.0000017}" (17) push1 0 # "f" (19) loadStk (20) push1 4 # "1.0000017" (22) mult (23) storeStk (24) pop Command 6: "incr ct -1" (25) push1 2 # "ct" (27) incrStkImm -1 (29) pop (30) push1 2 # "ct" (32) loadStk (33) push1 5 # "0" (35) gt (36) jumpTrue1 -21 # pc 15 (38) push1 6 # "" (40) done % tcl::unsupported::disassemble proc demo ByteCode 0x0x101012610, refCt 1, epoch 15, interp 0x0x10084a410 (epoch 15) Source "\nset f 1e-200\nfor {set ct $argv} {$ct > 0} {incr ct -1}" Cmds 6, src 94, inst 34, litObjs 4, aux 0, stkDepth 2, code/src 0.00 Proc 0x0x10181b510, refCt 1, args 1, compiled locals 3 slot 0, scalar, arg, "argv" slot 1, scalar, "f" slot 2, scalar, "ct" Exception ranges 2, depth 1: 0: level 0, loop, pc 12-18, continue 20, break 31 1: level 0, loop, pc 20-22, continue -1, break 31 Commands 6: 1: pc 0-4, src 1-12 2: pc 5-32, src 14-92 3: pc 5-8, src 19-30 4: pc 12-18, src 62-90 5: pc 12-16, src 69-89 6: pc 20-22, src 44-53 Command 1: "set f 1e-200" (0) push1 0 # "1e-200" (2) storeScalar1 %v1 # var "f" (4) pop Command 2: "for {set ct $argv} {$ct > 0} {incr ct -1} {\n set f [" Command 3: "set ct $argv" (5) loadScalar1 %v0 # var "argv" (7) storeScalar1 %v2 # var "ct" (9) pop (10) jump1 +14 # pc 24 Command 4: "set f [expr {$f * 1.0000017}]" Command 5: "expr {$f * 1.0000017}" (12) loadScalar1 %v1 # var "f" (14) push1 1 # "1.0000017" (16) mult (17) storeScalar1 %v1 # var "f" (19) pop Command 6: "incr ct -1" (20) incrScalar1Imm %v2 -1 # var "ct" (23) pop (24) loadScalar1 %v2 # var "ct" (26) push1 2 # "0" (28) gt (29) jumpTrue1 -17 # pc 12 (31) push1 3 # "" (33) done