[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [ Lua C API ] lua_upvalueid - index > # upvalues?
- From: Viacheslav Usov <via.usov@...>
- Date: Sat, 26 Sep 2020 15:48:46 +0200
On Sat, Sep 26, 2020 at 3:23 PM JeanHeyd Meneide
<phdofthehouse@gmail.com> wrote:
> So... what happens if you do?
Here is what the code does:
LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) {
StkId fi = index2addr(L, fidx);
switch (ttype(fi)) {
case LUA_TLCL: { /* lua closure */
return *getupvalref(L, fidx, n, NULL);
}
case LUA_TCCL: { /* C closure */
CClosure *f = clCvalue(fi);
api_check(L, 1 <= n && n <= f->nupvalues, "invalid upvalue index");
return &f->upvalue[n - 1];
}
default: {
api_check(L, 0, "closure expected");
return NULL;
}
}
}
And here is another bit:
typedef struct CClosure {
ClosureHeader;
lua_CFunction f;
TValue upvalue[1]; /* list of upvalues */
} CClosure;
If the implications are not obvious, you should just follow the manual :)
Cheers,
V.