mirror of
https://github.com/UberGames/rpgxEF.git
synced 2024-11-10 15:21:34 +00:00
a39565b783
... not quite content with where the project files lie but it is ok for now. ... compiling works fine so far (only tested mingw32 right now)
97 lines
2.6 KiB
C
97 lines
2.6 KiB
C
/*
|
|
** $Id: lparser.h,v 1.65 2010/07/07 16:27:29 roberto Exp $
|
|
** 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
|