lua_State
線程相關腳本上下文
主要包括當前腳本環境的運行狀態信息,還會有gc相關的信息。
global_State 全局信息
// global_State 的主要字段
typedef struct global_State {
stringtable strt; // hash table for strings 全局字符串的哈希表
TValue l_registry; // 對應LUA_REGISTRYINDEX的全局table
Tstring *tmname[TM_N]; // 元方法的名稱字符串
Table *mt[NUM_TAGS]; // 基本類型的元表
} global_State;
lua_State
#typedef TValue *StkId;
struct lua_State {
CommonHeader;
lu_byte status; // 線程腳本的狀態
StkId top; // 指向當前線程棧的棧頂指針
StkId base; // 指向當前函數運行的相對基位置
global_State *l_G; // 指向global_State
CallInfo *ci; // 當前線程運行的函數調用信息
const Instruction * savedpc; // 函數調用前,記錄上一個函數的pc位置
StkId stack_last; // 棧的實際最后一個位置
StkId stack; // 棧底
CallInfo *end_ci; // 指向函數調用棧的棧頂
CallInfo *base_ci; // 指向函數調用棧的棧底
int stacksize; // 棧的大小
int size_ci; // 函數調用棧的大小
unsigned short nCcalls; // 當前C函數的調用的深度
unsigned short baseCcalls; // 用於記錄每個線程狀態的C函數調用深度的輔助成員
lu_byte hookmask; // 支持那些hook能力
lu_byte allowhook; // 是否運行hook
int basehookcount; // 用戶設置的執行指令數(在hookmask=LUA_MASK_COUNT生效)
int hookcount; // 運行時,跑了多少條指令
lua_Hook hook; // 用戶注冊的hook回調函數
TValue l_gt; // 當前線程的全局環境表
TValue env; // 當前運行的環境表
GCObject *openupval; // 用於gc
GCObject *gclist; // 用於gc
struct lua_longjmp *errorJmp; // 發生錯誤的長跳轉位置
ptrdiff_t errfunc; // 發生錯誤的回調函數
}