lua/lparser.h

94 lines
2.1 KiB
C
Raw Normal View History

1997-09-16 23:33:21 +04:00
/*
** $Id: lparser.h,v 1.8 2000/03/03 14:58:26 roberto Exp roberto $
1999-02-26 00:07:26 +03:00
** LL(1) Parser and code generator for Lua
1997-09-16 23:33:21 +04:00
** See Copyright Notice in lua.h
*/
#ifndef lparser_h
#define lparser_h
#include "lobject.h"
#include "lzio.h"
2000-02-22 16:31:43 +03:00
/* maximum number of local variables */
#ifndef MAXLOCALS
2000-03-03 17:58:26 +03:00
#define MAXLOCALS 200 /* arbitrary limit (<=MAXARG_B) */
2000-02-22 16:31:43 +03:00
#endif
/* maximum number of upvalues */
#ifndef MAXUPVALUES
2000-03-03 17:58:26 +03:00
#define MAXUPVALUES 32 /* arbitrary limit (<=MAXARG_B) */
2000-02-22 16:31:43 +03:00
#endif
/* maximum number of variables in the left side of an assignment */
#ifndef MAXVARSLH
2000-03-03 17:58:26 +03:00
#define MAXVARSLH 100 /* arbitrary limit (<=MAXARG_B) */
2000-02-22 16:31:43 +03:00
#endif
/* maximum number of parameters in a function */
#ifndef MAXPARAMS
2000-03-03 17:58:26 +03:00
#define MAXPARAMS 100 /* arbitrary limit (<=MAXLOCALS) */
2000-02-22 16:31:43 +03:00
#endif
/* maximum stack size in a function */
#ifndef MAXSTACK
2000-03-03 17:58:26 +03:00
#define MAXSTACK 256 /* arbitrary limit (<=MAXARG_A) */
2000-02-22 16:31:43 +03:00
#endif
/*
** Expression descriptor
2000-02-22 16:31:43 +03:00
*/
#define NOJUMPS 0
2000-02-22 16:31:43 +03:00
typedef enum {
VGLOBAL, /* info is constant index of global name */
VLOCAL, /* info is stack index */
VINDEXED, /* info is info of the index expression */
VEXP /* info is NOJUMPS if exp has no internal jumps */
} expkind;
2000-02-22 16:31:43 +03:00
typedef struct expdesc {
expkind k;
2000-02-22 16:31:43 +03:00
int info;
} expdesc;
2000-02-22 16:31:43 +03:00
/*
** Expression List descriptor:
** tells number of expressions in the list,
** and gives the `info' of last expression.
*/
typedef struct listdesc {
int n;
int info; /* 0 if last expression has no internal jumps */
} listdesc;
2000-02-22 16:31:43 +03:00
/* state needed to generate code for a given function */
typedef struct FuncState {
TProtoFunc *f; /* current function header */
struct FuncState *prev; /* enclosing function */
int pc; /* next position to code */
int stacksize; /* number of values on activation register */
int nlocalvar; /* number of active local variables */
int nupvalues; /* number of upvalues */
int nvars; /* number of entries in f->locvars (-1 if no debug information) */
int lastsetline; /* line where last SETLINE was issued */
expdesc upvalues[MAXUPVALUES]; /* upvalues */
2000-02-22 16:31:43 +03:00
TaggedString *localvar[MAXLOCALS]; /* store local variable names */
} FuncState;
TProtoFunc *luaY_parser (lua_State *L, ZIO *z);
1997-09-16 23:33:21 +04:00
#endif