2812
+ − 1
/*
+ − 2
** $Id: lparser.h,v 1.57.1.1 2007/12/27 13:02:25 roberto Exp $
+ − 3
** Lua Parser
+ − 4
** See Copyright Notice in lua.h
+ − 5
*/
+ − 6
+ − 7
#ifndef lparser_h
+ − 8
#define lparser_h
+ − 9
+ − 10
#include "llimits.h"
+ − 11
#include "lobject.h"
+ − 12
#include "lzio.h"
+ − 13
+ − 14
+ − 15
/*
+ − 16
** Expression descriptor
+ − 17
*/
+ − 18
+ − 19
typedef enum {
+ − 20
VVOID, /* no value */
+ − 21
VNIL,
+ − 22
VTRUE,
+ − 23
VFALSE,
+ − 24
VK, /* info = index of constant in `k' */
+ − 25
VKNUM, /* nval = numerical value */
+ − 26
VLOCAL, /* info = local register */
+ − 27
VUPVAL, /* info = index of upvalue in `upvalues' */
+ − 28
VGLOBAL, /* info = index of table; aux = index of global name in `k' */
+ − 29
VINDEXED, /* info = table register; aux = index register (or `k') */
+ − 30
VJMP, /* info = instruction pc */
+ − 31
VRELOCABLE, /* info = instruction pc */
+ − 32
VNONRELOC, /* info = result register */
+ − 33
VCALL, /* info = instruction pc */
+ − 34
VVARARG /* info = instruction pc */
+ − 35
} expkind;
+ − 36
+ − 37
typedef struct expdesc {
+ − 38
expkind k;
+ − 39
union {
+ − 40
struct { int info, aux; } s;
+ − 41
lua_Number nval;
+ − 42
} u;
+ − 43
int t; /* patch list of `exit when true' */
+ − 44
int f; /* patch list of `exit when false' */
+ − 45
} expdesc;
+ − 46
+ − 47
+ − 48
typedef struct upvaldesc {
+ − 49
lu_byte k;
+ − 50
lu_byte info;
+ − 51
} upvaldesc;
+ − 52
+ − 53
+ − 54
struct BlockCnt; /* defined in lparser.c */
+ − 55
+ − 56
+ − 57
/* state needed to generate code for a given function */
+ − 58
typedef struct FuncState {
+ − 59
Proto *f; /* current function header */
+ − 60
Table *h; /* table to find (and reuse) elements in `k' */
+ − 61
struct FuncState *prev; /* enclosing function */
+ − 62
struct LexState *ls; /* lexical state */
+ − 63
struct lua_State *L; /* copy of the Lua state */
+ − 64
struct BlockCnt *bl; /* chain of current blocks */
+ − 65
int pc; /* next position to code (equivalent to `ncode') */
+ − 66
int lasttarget; /* `pc' of last `jump target' */
+ − 67
int jpc; /* list of pending jumps to `pc' */
+ − 68
int freereg; /* first free register */
+ − 69
int nk; /* number of elements in `k' */
+ − 70
int np; /* number of elements in `p' */
+ − 71
short nlocvars; /* number of elements in `locvars' */
+ − 72
lu_byte nactvar; /* number of active local variables */
+ − 73
upvaldesc upvalues[LUAI_MAXUPVALUES]; /* upvalues */
+ − 74
unsigned short actvar[LUAI_MAXVARS]; /* declared-variable stack */
+ − 75
} FuncState;
+ − 76
+ − 77
+ − 78
LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff,
+ − 79
const char *name);
+ − 80
+ − 81
+ − 82
#endif