-- LUA 5.1 Decompilation Experimental Application -- Original code: local t = {1,2,3} for k,v in pairs(t) do print(k,v) while k do repeat print "v" until not v print "k" end print "e" end print(#t) -- Disassembled code: --[[ Begin Chunk Header LUA Version 5.1 (official build) Following types are little endian: int - 4 bytes, size_t - 4 bytes, Instruction - 4 bytes lua_Number - 8 byte floating point End Chunk Header ]] --[[ Begin Function_358A88 Header Main chunk of @test.lua 0 formal parameters, is vararg 0 upvalues initial stack size of 9: #0 't' (for PC 5 to 32) #1 '(for generator)' (for PC 8 to 29) #2 '(for state)' (for PC 8 to 29) #3 '(for control)' (for PC 8 to 29) #4 'k' (for PC 9 to 27) #5 'v' (for PC 9 to 27) 8 constants: #0 1.000000 #1 2.000000 #2 3.000000 #3 "pairs" #4 "print" #5 "v" #6 "k" #7 "e" 0 closures End Function_358A88 Header ]] PC[0](1) NEWTABLE(0,3,0) -- R(0) := { arrays = 3 , hashes = 0 } PC[1](1) LOADK(1,0) -- R(1) := 1.000000 PC[2](1) LOADK(2,1) -- R(2) := 2.000000 PC[3](1) LOADK(3,2) -- R(3) := 3.000000 PC[4](1) SETLIST(0,3,1) -- R(0)[1] = R(1) ... R(0)[3] = R(3) PC[5](2) GETGLOBAL(1,3) -- R(1) := GLOBAL("pairs") PC[6](2) MOVE(2,0) -- R(2) := R(0) PC[7](2) CALL(1,2,4) -- R(1), R(2), R(3) := R(1)(R(2)) PC[8](2) JMP(18) -- GOTO 27 PC[9](3) GETGLOBAL(6,4) -- R(6) := GLOBAL("print") PC[10](3) MOVE(7,4) -- R(7) := R(4) PC[11](3) MOVE(8,5) -- R(8) := R(5) PC[12](3) CALL(6,3,1) -- R(6)(R(7), R(8)) PC[13](4) TEST(4,0) -- GOTO 15 IF R(4) PC[14](4) JMP(9) -- GOTO 24 PC[15](6) GETGLOBAL(6,4) -- R(6) := GLOBAL("print") PC[16](6) LOADK(7,5) -- R(7) := "v" PC[17](6) CALL(6,2,1) -- R(6)(R(7)) PC[18](7) TEST(5,1) -- GOTO 20 IF not R(5) PC[19](7) JMP(-5) -- GOTO 15 PC[20](8) GETGLOBAL(6,4) -- R(6) := GLOBAL("print") PC[21](8) LOADK(7,6) -- R(7) := "k" PC[22](8) CALL(6,2,1) -- R(6)(R(7)) PC[23](8) JMP(-11) -- GOTO 13 PC[24](15) GETGLOBAL(6,4) -- R(6) := GLOBAL("print") PC[25](15) LOADK(7,7) -- R(7) := "e" PC[26](15) CALL(6,2,1) -- R(6)(R(7)) PC[27](2) TFORLOOP(1,2) -- R(4), R(5) := R(1)(R(2),R(3)) -- R(3) := R(4) IF R(4) ELSE GOTO 29 PC[28](15) JMP(-20) -- GOTO 9 PC[29](17) GETGLOBAL(1,4) -- R(1) := GLOBAL("print") PC[30](17) LEN(2,0) -- R(2) := length of R(0) PC[31](17) CALL(1,2,1) -- R(1)(R(2)) PC[32](17) RETURN(0,1) -- RETURN -- Decompiled code: local t local _for_generator_ local _for_state_ local _for_control_ local k local v local reg_6 local reg_7 local reg_8 t = {} -- array size = 3 , hashes size = 0 _for_generator_ = 1.000000 _for_state_ = 2.000000 _for_control_ = 3.000000 t[1] = _for_generator_ t[2] = _for_state_ t[3] = _for_control_ _for_generator_ = pairs _for_state_ = t _for_generator_, _for_state_, _for_control_ = _for_generator_(_for_state_) -- goto for k, v in _for_generator_, _for_state_, _for_control_ reg_6 = print reg_7 = k reg_8 = v reg_6(reg_7, reg_8) while k do -- goto repeat reg_6 = print reg_7 = "v" reg_6(reg_7) until not v -- goto reg_6 = print reg_7 = "k" reg_6(reg_7) -- goto end reg_6 = print reg_7 = "e" reg_6(reg_7) end -- goto _for_generator_ = print _for_state_ = #t _for_generator_(_for_state_) return