ひとり勉強会

ひとり楽しく勉強会

luaV_execute

VMの構成はわかったのであとは各命令の実装を見るのみ!!!メインループのluaV_execute関数は、細かいところを除くと非常に素直なループです。例によって、ANSI C 互換にするためにスレッデッドコードのような最適化はしていません、とのことでした。

void luaV_execute (lua_State *L, int nexeccalls) {
  ...
  for (;;) {
    const Instruction i = *pc++;
    ...
    switch (GET_OPCODE(i)) {
      case OP_MOVE: {
        setobjs2s(L, ra, RB(i));
        continue;
      }
      ... 各命令の実装が並ぶ ...
    }
  }

各命令の実装は、例えば上の OP_MOVE をごらんになってわかるように、ほとんどのものが非常にストレートに実装されてます。とりあえず今日は簡単そうなところだけ眺めつつ実装してみるということで・・・