mini python VM

トップレベル環境うぜーーーーーーーーーーーーー。

forループうぜーーーーーーーーーーーーーーーー。

まあそれがおもしろいんだけどね。mini pythonのforループは、シーケンスを順になめていくようなループさえ実装すればよいのだけど、ループで使った変数はループブロックローカルなわけでもなく、シーケンスに途中で破壊的変更を行うと、それがちゃんと影響されたり、いろいろ複雑。

それを再現するようにがんばっている最中。現時点のコンパイル結果。2行だけなのにwww

for i in [1,2,3]:
  print i
  
   0: VM_PUSH()
   1: VM_PUSH()
   2: VM_PUSH()
   3: VM_IMMVAL_NUM( 0 )
   4: VM_LSET( 0 )
   5: VM_PUSHI_NUM( 1 )
   6: VM_PUSHI_NUM( 2 )
   7: VM_PUSHI_NUM( 3 )
   8: VM_MKLIST( 3 )
   9: VM_LSET( 2 )
  10: VM_LEN()
  11: VM_LSET( 1 )
  12: VM_GOTO( 17 )
  13: VM_LREF_PUSH( 0 )
  14: VM_IMMVAL_NUM( 1 )
  15: VM_ADD2_NUM()
  16: VM_LSET( 0 )
  17: VM_LREF_PUSH( 0 )
  18: VM_LREF( 1 )
  19: VM_NUMLT2()
  20: VM_GOTOIFNOT( 29 )
  21: VM_LREF_PUSH( 2 )
  22: VM_LREF( 0 )
  23: VM_GETITEM()
  24: VM_GSET( i )
  25: VM_PUSH_ENV()
  26: VM_GREF_PUSH( i )
  27: VM_GREF_CALL( print_: native function )
  28: VM_GOTO( 13 )
  29: VM_POP()
  30: VM_POP()
  31: VM_POP()