lua-users home
lua-l archive

Re: [ Lua C API ] lua_upvalueid - index > # upvalues?

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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.

AltStyle によって変換されたページ (->オリジナル) /