From 63cb4fbbb961da133c68865845eaf22d9b876700 Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 27 Sep 2020 20:31:53 +0800 Subject: *misc --- src/lua51/lparser.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/lua51/lparser.h') diff --git a/src/lua51/lparser.h b/src/lua51/lparser.h index 18836af..dbd7405 100644 --- a/src/lua51/lparser.h +++ b/src/lua51/lparser.h @@ -34,8 +34,9 @@ typedef enum { VVARARG /* info = instruction pc */ } expkind; +//c 存放表达式信息 typedef struct expdesc { - expkind k; + expkind k; // 表达式类型 union { struct { int info, aux; } s; lua_Number nval; @@ -54,27 +55,32 @@ typedef struct upvaldesc { struct BlockCnt; /* defined in lparser.c */ +//c 编译过程(词法分析、语法分析、代码生成阶段)的临时数据结构 +//c 用来辅助生成字节码 /* state needed to generate code for a given function */ typedef struct FuncState { + //c 函数字节码 Proto *f; /* current function header */ Table *h; /* table to find (and reuse) elements in `k' */ - struct FuncState *prev; /* enclosing function */ + //c 指向父函数的指针 + struct FuncState *prev; /* enclosing function */ struct LexState *ls; /* lexical state */ struct lua_State *L; /* copy of the Lua state */ struct BlockCnt *bl; /* chain of current blocks */ int pc; /* next position to code (equivalent to `ncode') */ int lasttarget; /* `pc' of last `jump target' */ int jpc; /* list of pending jumps to `pc' */ - int freereg; /* first free register */ + int freereg; /* first free register */ // 用来指示局部变量的栈位置 int nk; /* number of elements in `k' */ int np; /* number of elements in `p' */ short nlocvars; /* number of elements in `locvars' */ lu_byte nactvar; /* number of active local variables */ upvaldesc upvalues[LUAI_MAXUPVALUES]; /* upvalues */ - unsigned short actvar[LUAI_MAXVARS]; /* declared-variable stack */ + unsigned short actvar[LUAI_MAXVARS]; /* declared-variable stack */ // 在函数原型f->locvars的序号 } FuncState; +//c 编译的唯一入口,包含词法、语法、代码生成 LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name); -- cgit v1.1-26-g67d0