ひとり勉強会

ひとり楽しく勉強会

VM命令:まとめ

Lua 5.1 の VM の全命令を分類すると、こうなります。

変数/定数コピー
MOVE, LOADK, LOADNIL
グローバル
GETGLOBAL, SETGLOBAL
関数呼び出し
CALL, TAILCALL, RETURN
演算子
ADD, SUB, MUL, DIV, MOD, POW, UNM, NOT, LEN, CONCAT, GETTABLE, SETTABLE
ジャンプ
JMP, LOADBOOL, TEST, TESTSET, EQ, LE, LT
forループ
FORPREP, FORLOOP, TFORLOOP
クロージャ
GETUPVAL, SETUPVAL, CLOSURE, CLOSE
テーブル
NEWTABLE, SELF, SETLIST
可変長引数
VARARG

今回直接触れなかった命令は・・・TAILCALLは、末尾関数呼び出しですね。CALLとRETURNをくっつけたような処理をするだけです。NEWTABLE は空テーブル {} を作るだけ、SELF は obj:method(...) 形式の式の最適化のために、テーブルアクセスと変数コピーを同時に行う命令です。SETLIST は {1,2,3} のように配列形式でテーブルに要素を設定するための命令です。かなり巨大なテーブルも書けるように工夫した命令フォーマットになっていましたが、いい加減長くなってきたので詳細は略です。

てなわけで、命令セットは見終わったので、次回はモジュールとコルーチンの辺りを見ていこうと思います。