私は、バイトコードを読むことができるLuaコードをstring.dump()関数で作成しています。私は、いくつかの最適化とより少ないコーディングを可能にするため、すべてのOP_JMP命令がif文のために使用されたときに命令ポインタを転送することを前提としています。技術的には、sBx値(負でもよい)を使用するため、後方にジャンプすることができます。私は標準のLua 5.1実装のif文のバイトコードにのみ興味があります。'if'文が後方にジャンプするLuaバイトコードはありますか?
私はchunkspy(awesome tool btw)を使用して、いくつかのサンプルのバイトコードを調べました。ここで
があれば、基本的な文です:私はLua source codeで答えを探してみましたが、それだけで終わった
[08] jmp 4; to [13]
[12] jmp 11; to [24]
[16] jmp 4; to [21]
[20] jmp 3; to [24]
:
a, b = 1, 2
if a == b then
print '='
elseif a < b then
print '<'
else
print '>'
end
それは否定されているいずれも4つのジャンプを生成します混乱している(私はそれをつかむ時間を費やしていたなら、私はそれがスーパーエレガントなコードだと確信している)。
luaのOP_JMP命令がsBxに対して負の値を持つ「if」ステートメントのケースを知っているか、または常に正の値であるかを知っていますか?
'luac -p -l'はバイトコードのリストを提供します。 – lhf