?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  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
  83.