मैं कुछ लुआ कोड लिख रहा हूं जो bytecode को string.dump() फ़ंक्शन द्वारा उत्पन्न कर सकता है। मैं मान रहा हूं (क्योंकि यह कुछ अनुकूलन और कम कोडिंग के लिए अनुमति देता है) कि सभी OP_JMP निर्देश अगर कथन के लिए उपयोग किए जाने पर निर्देश सूचक को आगे बढ़ाते हैं। वे तकनीकी रूप से पीछे की तरफ कूद सकते हैं क्योंकि वे एसबीएक्स मूल्य का उपयोग करते हैं (जो नकारात्मक हो सकता है)। मुझे मानक लुआ 5.1 कार्यान्वयन से बयान के बाइटकोड में दिलचस्पी है।'if' statments के लिए लुआ बाइटकोड पीछे की तरफ कूद सकता है?
मैंने कुछ नमूने के लिए बाइटकोड देखने के लिए chunkspy (भयानक टूल बीटीडब्ल्यू) का उपयोग किया था।
यहाँ एक बुनियादी है अगर बयान:
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 source code में जवाब की तलाश में करने की कोशिश की, लेकिन यह सिर्फ समाप्त हो गया भ्रमित होने (मुझे यकीन है कि यह सुपर सुरुचिपूर्ण कोड है अगर मैंने समय के साथ पकड़ने में समय बिताया)।
क्या किसी को 'if' कथन के मामले के बारे में पता है जहां लुआ के OP_JMP निर्देश के पास एसबीएक्स के लिए ऋणात्मक मूल्य है या पता है कि वे हमेशा सकारात्मक मूल्य हैं या नहीं?
'luac -p -l' आपको एक बाइटकोड सूची भी देता है। – lhf