我正在编写一些可以读取 string.dump() 函数产生的字节码的 Lua 代码。我假设(因为它允许一些优化和更少的编码)所有 OP_JMP 指令在用于 if 语句时都会增加指令指针。从技术上讲,他们可以向后跳,因为他们使用 sBx 值(可以是负数)。我只对标准 Lua 5.1 实现中的 if 语句的字节码感兴趣。
我使用chunkspy(btw 很棒的工具)来查看一些样本的字节码。
这是一个基本的 if 语句:
a, b = 1, 2
if a == b then
print '='
elseif a < b then
print '<'
else
print '>'
end
它产生四个跳跃,没有一个是负面的:
[08] jmp 4; to [13]
[12] jmp 11; to [24]
[16] jmp 4; to [21]
[20] jmp 3; to [24]
我尝试在Lua 源代码中寻找答案,但结果令人困惑(如果我花时间掌握它,我相信它是超级优雅的代码)。
有谁知道 'if' 语句的情况,其中 lua 的 OP_JMP 指令对 sBx 有负值,或者知道它们是否总是正值?