Garry's Mod Wiki

debug.getupvalue

  string, any debug.getupvalue( function func, number index )

Description

We advise against using this. It may be changed or removed in a future update.

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

Arguments

1 function func
Function to get the upvalue indexed from.
2 number index
The index in the upvalue array. The max number of entries can be found in debug.getinfo's "nups" key.

Returns

1 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.
2 any
Value of the upvalue.

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 <page>string</page> 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