debug.getupvalue

From Garry's Mod
Jump to: navigation, search
 debug.getupvalue( )

Contents

Description

Used for getting variable values in an index from the passed function. This does nothing for C functions.

Arguments

function func

Function to get the upvalue indexed from.

Arguments

number index

The index in the upvalue array. The max number of entries can be found in debug.getinfo's "nups" key.

Returns

string

Name of the upvalue. Will be nil if the index was out of range (< 1 or > debug.getinfo.nups), or the function was defined in C.

Returns

any

Value of the upvalue.

Examples

Example

Prints the upvalues of some local functions.

local foo = 5
local bar = "hello"
local test = { "table", true, "variable" }

local function DoSomethingWithFoo()
	-- This code won't be run but the function
	-- has to reference the variable for
	-- it to be counted as an upvalue
	foo = foo + 1
end

local function DoSomethingWithFooAndBar()
	foo = foo / 2
	bar = bar .. " world"
end

local function DoSomethingWithBarAndTest()
	test[1] = bar .. "reader!"
end


-- level = stack level to get local variables of
-- returns a table with [[:Category:string|string]] keys representing the variable name
local function GetUpvalues( func )
	local info = debug.getinfo( func, "uS" )
	local variables = {}

	-- Upvalues can't be retrieved from C functions
	if ( info != nil && info.what == "Lua" ) then
		local upvalues = info.nups

		for i = 1, upvalues do
			local key, value = debug.getupvalue( func, i )
			variables[ key ] = value
		end
	end

	return variables
end

print( "DoSomethingWithFoo:" )
PrintTable( GetUpvalues( DoSomethingWithFoo ) )

print( "\nDoSomethingWithFooAndBar:" )
PrintTable( GetUpvalues( DoSomethingWithFooAndBar ) )

print( "\nDoSomethingWithBarAndTest:" )
PrintTable( GetUpvalues( DoSomethingWithBarAndTest ) )

Output:

DoSomethingWithFoo:
foo	=	5

DoSomethingWithFooAndBar:
bar	=	hello
foo	=	5

DoSomethingWithBarAndTest:
bar	=	hello
test:
		1	=	table
		2	=	true
		3	=	variable
Personal tools
Navigation