Ben string.dump() işlevi tarafından üretilen bytecode okuyabilen bazı Lua kodu yazıyorum. Varsayalım ki (birkaç optimizasyon ve daha az kodlamaya izin verdiği için) tüm OP_JMP komutları, eğer ifadeler için kullanıldığında talimat işaretçisini ileriye doğru yükseltir. Teknik olarak geriye doğru atlayabilirler çünkü sBx değerini kullanırlar (negatif olabilirler). Ben sadece standart Lua 5.1 uygulamasının ifadeleri ile ilgili bayt kodu ile ilgileniyorum.'Luo' ifadeleri için Lua bayt kodu geriye doğru atlayabilir mi?
Birkaç örnek için bytecode'a bakmak için chunkspy (harika araç btw) kullanılır.
a, b = 1, 2
if a == b then
print '='
elseif a < b then
print '<'
else
print '>'
end
Bu negatif hiçbiri dört atlayışları, üretir:
[08] jmp 4; to [13]
[12] jmp 11; to [24]
[16] jmp 4; to [21]
[20] jmp 3; to [24]
ben Lua source code Cevapları aradık ancak bu sadece sona erdi deyimi varsa burada
bir temel kafa karıştırıcı olmak (Eminim ki zamanla uğraşmak için harcadığım zaman süper zarif koddur).lua'nın OP_JMP komutunun sBx için negatif bir değere sahip olduğu veya her zaman pozitif değerler olup olmadığını bilen 'if' ifadeleri için bir vaka bilen var mı?
'luac -p -l' ayrıca bir bayt kodu listesi verir. – lhf