The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/module/lua/lparser.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2 ** $Id: lparser.h,v 1.70.1.1 2013/04/12 18:48:47 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   VNONRELOC,    /* info = result register */
   27   VLOCAL,       /* info = local register */
   28   VUPVAL,       /* info = index of upvalue in 'upvalues' */
   29   VINDEXED,     /* t = table register/upvalue; idx = index R/K */
   30   VJMP,         /* info = instruction pc */
   31   VRELOCABLE,   /* info = instruction pc */
   32   VCALL,        /* info = instruction pc */
   33   VVARARG       /* info = instruction pc */
   34 } expkind;
   35 
   36 
   37 #define vkisvar(k)      (VLOCAL <= (k) && (k) <= VINDEXED)
   38 #define vkisinreg(k)    ((k) == VNONRELOC || (k) == VLOCAL)
   39 
   40 typedef struct expdesc {
   41   expkind k;
   42   union {
   43     struct {  /* for indexed variables (VINDEXED) */
   44       short idx;  /* index (R/K) */
   45       lu_byte t;  /* table (register or upvalue) */
   46       lu_byte vt;  /* whether 't' is register (VLOCAL) or upvalue (VUPVAL) */
   47     } ind;
   48     int info;  /* for generic use */
   49     lua_Number nval;  /* for VKNUM */
   50   } u;
   51   int t;  /* patch list of `exit when true' */
   52   int f;  /* patch list of `exit when false' */
   53 } expdesc;
   54 
   55 
   56 /* description of active local variable */
   57 typedef struct Vardesc {
   58   short idx;  /* variable index in stack */
   59 } Vardesc;
   60 
   61 
   62 /* description of pending goto statements and label statements */
   63 typedef struct Labeldesc {
   64   TString *name;  /* label identifier */
   65   int pc;  /* position in code */
   66   int line;  /* line where it appeared */
   67   lu_byte nactvar;  /* local level where it appears in current block */
   68 } Labeldesc;
   69 
   70 
   71 /* list of labels or gotos */
   72 typedef struct Labellist {
   73   Labeldesc *arr;  /* array */
   74   int n;  /* number of entries in use */
   75   int size;  /* array size */
   76 } Labellist;
   77 
   78 
   79 /* dynamic structures used by the parser */
   80 typedef struct Dyndata {
   81   struct {  /* list of active local variables */
   82     Vardesc *arr;
   83     int n;
   84     int size;
   85   } actvar;
   86   Labellist gt;  /* list of pending gotos */
   87   Labellist label;   /* list of active labels */
   88 } Dyndata;
   89 
   90 
   91 /* control of blocks */
   92 struct BlockCnt;  /* defined in lparser.c */
   93 
   94 
   95 /* state needed to generate code for a given function */
   96 typedef struct FuncState {
   97   Proto *f;  /* current function header */
   98   Table *h;  /* table to find (and reuse) elements in `k' */
   99   struct FuncState *prev;  /* enclosing function */
  100   struct LexState *ls;  /* lexical state */
  101   struct BlockCnt *bl;  /* chain of current blocks */
  102   int pc;  /* next position to code (equivalent to `ncode') */
  103   int lasttarget;   /* 'label' of last 'jump label' */
  104   int jpc;  /* list of pending jumps to `pc' */
  105   int nk;  /* number of elements in `k' */
  106   int np;  /* number of elements in `p' */
  107   int firstlocal;  /* index of first local var (in Dyndata array) */
  108   short nlocvars;  /* number of elements in 'f->locvars' */
  109   lu_byte nactvar;  /* number of active local variables */
  110   lu_byte nups;  /* number of upvalues */
  111   lu_byte freereg;  /* first free register */
  112 } FuncState;
  113 
  114 
  115 LUAI_FUNC Closure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff,
  116                                 Dyndata *dyd, const char *name, int firstchar);
  117 
  118 
  119 #endif

Cache object: a3983b55ec8a0fec61f3ee2116e263a1


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.