root/lib/lua/lparser.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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

/* [<][>][^][v][top][bottom][index][help] */