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