元表布局
本文档规定 ZLua 在 Lua 侧暴露的类型表、静态元表(SMT)与实例元表(IMT)的结构。所有键名与 LuaConsts.h 一致;Lua 脚本通过成员访问、typeof、构造等 API 间接依赖这些布局,但不应依赖 native 实现细节(如 Dispatch 闭包、三表 upvalue 布局等——见 impl/metatable/)。
成员索引(`__index` / `__newindex`)
本文档规定 Lua 通过 __index / __newindex 访问 C# 静态成员(类型表 T + 静态元表 SMT)与 实例成员(userdata + 实例元表 IMT)的分派规则。规范描述的是 Lua 可见语义;Mono 以 Lua closure + 三表 upvalue 实现,Il2Cpp 以 native indexer 实现,二者(以及任何未来 VM 快路径)必须表现一致。
成员绑定(注册期规则)
本文档规定 EnsureBinding 阶段如何将 C# 类型成员扫描、分类并写入静态/实例三表(methodTable、fieldGetterTable、fieldSetterTable)。绑定完成后,运行时索引行为完全由 02-INDEX.md 定义;本文不涉及 native 如何生成 bridge closure(见 impl/metatable/、impl/codegen/)。
特殊类型的元表行为
本文档汇总 enum、Nullable\、struct、数组、委托(delegate) 在元表布局与成员索引上的特例。值如何 Push/Pop、ByVal/ByObj payload 布局等编组细节见 ../marshal/ 各分册;本文只描述 Lua 脚本可见 的表结构、元方法与索引入口。
元表规范(`spec/metatable/`)
本目录规定 ZLua 在 Lua 侧可见的 类型表、静态元表(SMT)、实例元表(IMT) 布局,以及 __index / __newindex 成员分派语义。内容为 规范性 描述:Mono 与 Il2Cpp 运行时须表现一致;具体实现(Mono 三表 Lua indexer、Il2Cpp native Dispatch* 等)见 impl/metatable/。