Posted to tcl by dgp at Thu Jul 25 05:15:51 GMT 2013view raw

  1. % tcl::unsupported::disassemble script $script
  2. ByteCode 0x0x101012810, refCt 1, epoch 15, interp 0x0x10084a410 (epoch 15)
  3. Source "\nset f 1e-200\nfor {set ct $argv} {$ct > 0} {incr ct -1}"
  4. Cmds 6, src 94, inst 41, litObjs 7, aux 0, stkDepth 3, code/src 0.00
  5. Exception ranges 2, depth 1:
  6. 0: level 0, loop, pc 15-23, continue 25, break 38
  7. 1: level 0, loop, pc 25-28, continue -1, break 38
  8. Commands 6:
  9. 1: pc 0-5, src 1-12 2: pc 6-39, src 14-92
  10. 3: pc 6-11, src 19-30 4: pc 15-23, src 62-90
  11. 5: pc 17-22, src 69-89 6: pc 25-28, src 44-53
  12. Command 1: "set f 1e-200"
  13. (0) push1 0 # "f"
  14. (2) push1 1 # "1e-200"
  15. (4) storeStk
  16. (5) pop
  17. Command 2: "for {set ct $argv} {$ct > 0} {incr ct -1} {\n set f ["
  18. Command 3: "set ct $argv"
  19. (6) push1 2 # "ct"
  20. (8) push1 3 # "argv"
  21. (10) loadStk
  22. (11) storeStk
  23. (12) pop
  24. (13) jump1 +17 # pc 30
  25. Command 4: "set f [expr {$f * 1.0000017}]"
  26. (15) push1 0 # "f"
  27. Command 5: "expr {$f * 1.0000017}"
  28. (17) push1 0 # "f"
  29. (19) loadStk
  30. (20) push1 4 # "1.0000017"
  31. (22) mult
  32. (23) storeStk
  33. (24) pop
  34. Command 6: "incr ct -1"
  35. (25) push1 2 # "ct"
  36. (27) incrStkImm -1
  37. (29) pop
  38. (30) push1 2 # "ct"
  39. (32) loadStk
  40. (33) push1 5 # "0"
  41. (35) gt
  42. (36) jumpTrue1 -21 # pc 15
  43. (38) push1 6 # ""
  44. (40) done
  45.  
  46. % tcl::unsupported::disassemble proc demo
  47. ByteCode 0x0x101012610, refCt 1, epoch 15, interp 0x0x10084a410 (epoch 15)
  48. Source "\nset f 1e-200\nfor {set ct $argv} {$ct > 0} {incr ct -1}"
  49. Cmds 6, src 94, inst 34, litObjs 4, aux 0, stkDepth 2, code/src 0.00
  50. Proc 0x0x10181b510, refCt 1, args 1, compiled locals 3
  51. slot 0, scalar, arg, "argv"
  52. slot 1, scalar, "f"
  53. slot 2, scalar, "ct"
  54. Exception ranges 2, depth 1:
  55. 0: level 0, loop, pc 12-18, continue 20, break 31
  56. 1: level 0, loop, pc 20-22, continue -1, break 31
  57. Commands 6:
  58. 1: pc 0-4, src 1-12 2: pc 5-32, src 14-92
  59. 3: pc 5-8, src 19-30 4: pc 12-18, src 62-90
  60. 5: pc 12-16, src 69-89 6: pc 20-22, src 44-53
  61. Command 1: "set f 1e-200"
  62. (0) push1 0 # "1e-200"
  63. (2) storeScalar1 %v1 # var "f"
  64. (4) pop
  65. Command 2: "for {set ct $argv} {$ct > 0} {incr ct -1} {\n set f ["
  66. Command 3: "set ct $argv"
  67. (5) loadScalar1 %v0 # var "argv"
  68. (7) storeScalar1 %v2 # var "ct"
  69. (9) pop
  70. (10) jump1 +14 # pc 24
  71. Command 4: "set f [expr {$f * 1.0000017}]"
  72. Command 5: "expr {$f * 1.0000017}"
  73. (12) loadScalar1 %v1 # var "f"
  74. (14) push1 1 # "1.0000017"
  75. (16) mult
  76. (17) storeScalar1 %v1 # var "f"
  77. (19) pop
  78. Command 6: "incr ct -1"
  79. (20) incrScalar1Imm %v2 -1 # var "ct"
  80. (23) pop
  81. (24) loadScalar1 %v2 # var "ct"
  82. (26) push1 2 # "0"
  83. (28) gt
  84. (29) jumpTrue1 -17 # pc 12
  85. (31) push1 3 # ""
  86. (33) done
  87.