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()