Estoy escribiendo un código Lua que puede leer el bytecode producido por la función string.dump(). Asumo (debido a que permite algunas optimizaciones y menos codificación) que todas las instrucciones OP_JMP aumentan el puntero de instrucción hacia adelante cuando se usan para sentencias if. Técnicamente podrían saltar hacia atrás porque usan el valor sBx (que puede ser negativo). Solo me interesa el bytecode de las declaraciones if de la implementación estándar de Lua 5.1.¿El bytecode de Can Lua para las declaraciones 'if' salta hacia atrás?
Utilicé chunkspy (herramienta asombrosa por cierto), para mirar el bytecode para algunas muestras.
Aquí es un básico sentencia if:
a, b = 1, 2
if a == b then
print '='
elseif a < b then
print '<'
else
print '>'
end
Produce cuatro saltos, ninguno de los cuales son negativos:
[08] jmp 4; to [13]
[12] jmp 11; to [24]
[16] jmp 4; to [21]
[20] jmp 3; to [24]
he intentado buscar respuestas en el Lua source code, pero simplemente terminó ser confuso (estoy seguro de que es un código súper elegante si me tomo el tiempo de entenderlo).
¿Alguien sabe de un caso para declaraciones 'if' donde la instrucción OP_JMP de lua tiene un valor negativo para sBx o saber si son siempre valores positivos?
'luac -p -l' también le proporciona una lista de códigos de bytes. – lhf