All pastes #798113 Raw Edit

Miscellany

public lua v1 · immutable
#798113 ·published 2007-11-26 16:22 UTC
rendered paste body
-- 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"endprint(#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.000000PC[2](1) LOADK(2,1) -- R(2) := 2.000000PC[3](1) LOADK(3,2) -- R(3) := 3.000000PC[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 27PC[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 24PC[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 15PC[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 13PC[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 29PC[28](15) JMP(-20) -- GOTO 9PC[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 tlocal _for_generator_local _for_state_local _for_control_local klocal vlocal reg_6local reg_7local reg_8t = {} -- array size = 3 , hashes size = 0_for_generator_ = 1.000000_for_state_ = 2.000000_for_control_ = 3.000000t[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_)-- gotofor 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