When a C function is created,
it is possible to associate some values with it,
thus creating a C closure;
these values are called upvalues and are
accessible to the function whenever it is called
Whenever a C function is called,
its upvalues are located at specific pseudo-indices.
These pseudo-indices are produced by the macro
The first value associated with a function is at position
lua_upvalueindex(1), and so on.
Any access to lua_upvalueindex(n),
where n is greater than the number of upvalues of the
current function (but not greater than 256),
produces an acceptable (but invalid) index.