Posted to tcl by dogeen at Tue Aug 31 21:47:31 GMT 2010view raw

  1. % proc fe args { foreach {i j} {1 2 3 4 5 6} { puts $i\,$j} }
  2. % tcl::unsupported::disassemble proc fe
  3. ByteCode 0x0x1003a3718, refCt 1, epoch 4, interp 0x0x10083e838 (epoch 4)
  4. Source " foreach {i j} {1 2 3 4 5 6} { puts $i\,$j} "
  5. Cmds 2, src 44, inst 35, litObjs 4, aux 1, stkDepth 4, code/src 6.73
  6. Code 296 = header 168+inst 35+litObj 32+exc 28+aux 16+cmdMap 8
  7. Proc 0x0x10041da08, refCt 1, args 1, compiled locals 5
  8. slot 0, scalar, arg, "args"
  9. slot 1, scalar, temp
  10. slot 2, scalar, temp
  11. slot 3, scalar, "i"
  12. slot 4, scalar, "j"
  13. Exception ranges 1, depth 1:
  14. 0: level 0, loop, pc 17-28, continue 10, break 32
  15. Commands 2:
  16. 1: pc 0-33, src 1-43 2: pc 17-28, src 31-41
  17. Command 1: "foreach {i j} {1 2 3 4 5 6} { puts $i\,$j} "
  18. (0) push1 0 # "1 2 3 4 5 6"
  19. (2) storeScalar1 %v1 # temp var 1
  20. (4) pop
  21. (5) foreach_start4 0
  22. [data=[%v1], loop=%v2
  23. it%v1 [%v3, %v4]]
  24. (10) foreach_step4 0
  25. [data=[%v1], loop=%v2
  26. it%v1 [%v3, %v4]]
  27. (15) jumpFalse1 +17 # pc 32
  28. Command 2: "puts $i\,$j"
  29. (17) push1 1 # "puts"
  30. (19) loadScalar1 %v3 # var "i"
  31. (21) push1 2 # ","
  32. (23) loadScalar1 %v4 # var "j"
  33. (25) concat1 3
  34. (27) invokeStk1 2
  35. (29) pop
  36. (30) jump1 -20 # pc 10
  37. (32) push1 3 # ""
  38. (34) done