Lua処理系コード読み(8) Closure, LClosure, CClosure
lobject.h
/* ** Closures */ #define ClosureHeader \ CommonHeader; lu_byte isC; lu_byte nupvalues; GCObject *gclist; \ struct Table *env typedef struct CClosure { ClosureHeader; lua_CFunction f; TValue upvalue[1]; } CClosure; typedef struct LClosure { ClosureHeader; struct Proto *p; UpVal *upvals[1]; } LClosure; typedef union Closure { CClosure c; LClosure l; } Closure;
クロージャは関数の静的なデータに環境、UpValueなど動的な情報を足したもの。LuaではCで書かれた関数クロージャ(CClosure)とLuaで書かれた関数クロージャ(LClosure)がある。