viruscamp / luadec

Lua Decompiler for lua 5.1 , 5.2 and 5.3
1.14k stars 343 forks source link

local function of using the same local as upvalue #43

Open viruscamp opened 8 years ago

viruscamp commented 8 years ago
do
    local z=function() return 1 end
end

do
    local function z() return 1 end
end

do
    local z=function() return z end
end

do
    local function z() return z end
end

local z=function() return z end

>local z=function() return z end
; function [0] definition (level 1) 0
; 0 upvalues, 0 params, is_vararg = 2, 2 stacks
.function  0 0 2 2
.local  "z"  ; 0
[1] closure    0   0        ; R0 := closure(function[0]) 0 upvalues
[2] return     0   1        ; return

; function [0] definition (level 2) 0_0
; 0 upvalues, 0 params, is_vararg = 0, 2 stacks
.function  0 0 0 2
.const  "z"  ; 0
[1] getglobal  0   0        ; R0 := z
[2] return     0   2        ; return R0
[3] return     0   1        ; return

local function z() return z end

>local function z() return z end
; function [0] definition (level 1) 0
; 0 upvalues, 0 params, is_vararg = 2, 2 stacks
.function  0 0 2 2
.local  "z"  ; 0
[1] closure    0   0        ; R0 := closure(function[0]) 1 upvalues
[2] move       0   0        ; R0 := R0
[3] return     0   1        ; return

; function [0] definition (level 2) 0_0
; 1 upvalues, 0 params, is_vararg = 0, 2 stacks
.function  1 0 0 2
.upvalue  "z"  ; 0
[1] getupval   0   0        ; R0 := U0 , z
[2] return     0   2        ; return R0
[3] return     0   1        ; return

local z=function() return 1 end local function z() return 1 end

>local function z() return 1 end
; function [0] definition (level 1) 0
; 0 upvalues, 0 params, is_vararg = 2, 2 stacks
.function  0 0 2 2
.local  "z"  ; 0
[1] closure    0   0        ; R0 := closure(function[0]) 0 upvalues
[2] return     0   1        ; return

; function [0] definition (level 2) 0_0
; 0 upvalues, 0 params, is_vararg = 0, 2 stacks
.function  0 0 0 2
.const  1  ; 0
[1] loadk      0   0        ; R0 := 1
[2] return     0   2        ; return R0
[3] return     0   1        ; return