12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /*
- ** $Id: lparser.h,v 1.64 2010/07/02 20:42:40 roberto Exp roberto $
- ** Lua Parser
- ** See Copyright Notice in lua.h
- */
- #ifndef lparser_h
- #define lparser_h
- #include "llimits.h"
- #include "lobject.h"
- #include "lzio.h"
- /*
- ** Expression descriptor
- */
- typedef enum {
- VVOID, /* no value */
- VNIL,
- VTRUE,
- VFALSE,
- VK, /* info = index of constant in `k' */
- VKNUM, /* nval = numerical value */
- VNONRELOC, /* info = result register */
- VLOCAL, /* info = local register */
- VUPVAL, /* info = index of upvalue in 'upvalues' */
- VINDEXED, /* t = table register/upvalue; idx = index R/K */
- VJMP, /* info = instruction pc */
- VRELOCABLE, /* info = instruction pc */
- VCALL, /* info = instruction pc */
- VVARARG /* info = instruction pc */
- } expkind;
- #define vkisvar(k) (VLOCAL <= (k) && (k) <= VINDEXED)
- #define vkisinreg(k) ((k) == VNONRELOC || (k) == VLOCAL)
- typedef struct expdesc {
- expkind k;
- union {
- struct { /* for indexed variables (VINDEXED) */
- short idx; /* index (R/K) */
- lu_byte t; /* table (register or upvalue) */
- lu_byte vt; /* whether 't' is register (VLOCAL) or upvalue (VUPVAL) */
- } ind;
- int info; /* for generic use */
- lua_Number nval; /* for VKNUM */
- } u;
- int t; /* patch list of `exit when true' */
- int f; /* patch list of `exit when false' */
- } expdesc;
- typedef struct vardesc {
- unsigned short idx;
- } vardesc;
- /* list of all active local variables */
- typedef struct Varlist {
- vardesc *actvar;
- int nactvar;
- int actvarsize;
- } Varlist;
- struct BlockCnt; /* defined in lparser.c */
- /* state needed to generate code for a given function */
- typedef struct FuncState {
- Proto *f; /* current function header */
- Table *h; /* table to find (and reuse) elements in `k' */
- 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 nk; /* number of elements in `k' */
- int np; /* number of elements in `p' */
- int firstlocal; /* index of first local var of this function */
- short nlocvars; /* number of elements in `locvars' */
- lu_byte nactvar; /* number of active local variables */
- lu_byte nups; /* number of upvalues */
- } FuncState;
- LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff,
- Varlist *varl, const char *name);
- #endif
|