?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2. ** $Id: lstate.h,v 2.24.1.2 2008/01/03 15:20:39 roberto Exp $
  3. ** Global State
  4. ** See Copyright Notice in lua.h
  5. */
  6.  
  7. #ifndef lstate_h
  8. #define lstate_h
  9.  
  10. #include "lua.h"
  11.  
  12. #include "lobject.h"
  13. #include "ltm.h"
  14. #include "lzio.h"
  15.  
  16.  
  17.  
  18. struct lua_longjmp;  /* defined in ldo.c */
  19.  
  20.  
  21. /* table of globals */
  22. #define gt(L)   (&L->l_gt)
  23.  
  24. /* registry */
  25. #define registry(L)     (&G(L)->l_registry)
  26.  
  27.  
  28. /* extra stack space to handle TM calls and some other extras */
  29. #define EXTRA_STACK   5
  30.  
  31.  
  32. #define BASIC_CI_SIZE           8
  33.  
  34. #define BASIC_STACK_SIZE        (2*LUA_MINSTACK)
  35.  
  36.  
  37.  
  38. typedef struct stringtable {
  39.   GCObject **hash;
  40.   lu_int32 nuse;  /* number of elements */
  41.   int size;
  42. } stringtable;
  43.  
  44.  
  45. /*
  46. ** informations about a call
  47. */
  48. typedef struct CallInfo {
  49.   StkId base;  /* base for this function */
  50.   StkId func;  /* function index in the stack */
  51.   StkId top;  /* top for this function */
  52.   const Instruction *savedpc;
  53.   int nresults;  /* expected number of results from this function */
  54.   int tailcalls;  /* number of tail calls lost under this entry */
  55. } CallInfo;
  56.  
  57.  
  58.  
  59. #define curr_func(L)    (clvalue(L->ci->func))
  60. #define ci_func(ci)     (clvalue((ci)->func))
  61. #define f_isLua(ci)     (!ci_func(ci)->c.isC)
  62. #define isLua(ci)       (ttisfunction((ci)->func) && f_isLua(ci))
  63.  
  64.  
  65. /*
  66. ** `global state', shared by all threads of this state
  67. */
  68. typedef struct global_State {
  69.   stringtable strt;  /* hash table for strings */
  70.   lua_Alloc frealloc;  /* function to reallocate memory */
  71.   void *ud;         /* auxiliary data to `frealloc' */
  72.   lu_byte currentwhite;
  73.   lu_byte gcstate;  /* state of garbage collector */
  74.   int sweepstrgc;  /* position of sweep in `strt' */
  75.   GCObject *rootgc;  /* list of all collectable objects */
  76.   GCObject **sweepgc;  /* position of sweep in `rootgc' */
  77.   GCObject *gray;  /* list of gray objects */
  78.   GCObject *grayagain;  /* list of objects to be traversed atomically */
  79.   GCObject *weak;  /* list of weak tables (to be cleared) */
  80.   GCObject *tmudata;  /* last element of list of userdata to be GC */
  81.   Mbuffer buff;  /* temporary buffer for string concatentation */
  82.   lu_mem GCthreshold;
  83.   lu_mem totalbytes;  /* number of bytes currently allocated */
  84.   lu_mem estimate;  /* an estimate of number of bytes actually in use */
  85.   lu_mem gcdept;  /* how much GC is `behind schedule' */
  86.   int gcpause;  /* size of pause between successive GCs */
  87.   int gcstepmul;  /* GC `granularity' */
  88.   lua_CFunction panic;  /* to be called in unprotected errors */
  89.   TValue l_registry;
  90.   struct lua_State *mainthread;
  91.   UpVal uvhead;  /* head of double-linked list of all open upvalues */
  92.   struct Table *mt[NUM_TAGS];  /* metatables for basic types */
  93.   TString *tmname[TM_N];  /* array with tag-method names */
  94. } global_State;
  95.  
  96.  
  97. /*
  98. ** `per thread' state
  99. */
  100. struct lua_State {
  101.   CommonHeader;
  102.   lu_byte status;
  103.   StkId top;  /* first free slot in the stack */
  104.   StkId base;  /* base of current function */
  105.   global_State *l_G;
  106.   CallInfo *ci;  /* call info for current function */
  107.   const Instruction *savedpc;  /* `savedpc' of current function */
  108.   StkId stack_last;  /* last free slot in the stack */
  109.   StkId stack;  /* stack base */
  110.   CallInfo *end_ci;  /* points after end of ci array*/
  111.   CallInfo *base_ci;  /* array of CallInfo's */
  112.   int stacksize;
  113.   int size_ci;  /* size of array `base_ci' */
  114.   unsigned short nCcalls;  /* number of nested C calls */
  115.   unsigned short baseCcalls;  /* nested C calls when resuming coroutine */
  116.   lu_byte hookmask;
  117.   lu_byte allowhook;
  118.   int basehookcount;
  119.   int hookcount;
  120.   lua_Hook hook;
  121.   TValue l_gt;  /* table of globals */
  122.   TValue env;  /* temporary place for environments */
  123.   GCObject *openupval;  /* list of open upvalues in this stack */
  124.   GCObject *gclist;
  125.   struct lua_longjmp *errorJmp;  /* current error recover point */
  126.   ptrdiff_t errfunc;  /* current error handling function (stack index) */
  127. };
  128.  
  129.  
  130. #define G(L)    (L->l_G)
  131.  
  132.  
  133. /*
  134. ** Union of all collectable objects
  135. */
  136. union GCObject {
  137.   GCheader gch;
  138.   union TString ts;
  139.   union Udata u;
  140.   union Closure cl;
  141.   struct Table h;
  142.   struct Proto p;
  143.   struct UpVal uv;
  144.   struct lua_State th;  /* thread */
  145. };
  146.  
  147.  
  148. /* macros to convert a GCObject into a specific value */
  149. #define rawgco2ts(o)    check_exp((o)->gch.tt == LUA_TSTRING, &((o)->ts))
  150. #define gco2ts(o)       (&rawgco2ts(o)->tsv)
  151. #define rawgco2u(o)     check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u))
  152. #define gco2u(o)        (&rawgco2u(o)->uv)
  153. #define gco2cl(o)       check_exp((o)->gch.tt == LUA_TFUNCTION, &((o)->cl))
  154. #define gco2h(o)        check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h))
  155. #define gco2p(o)        check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p))
  156. #define gco2uv(o)       check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv))
  157. #define ngcotouv(o) \
  158.         check_exp((o) == NULL || (o)->gch.tt == LUA_TUPVAL, &((o)->uv))
  159. #define gco2th(o)       check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th))
  160.  
  161. /* macro to convert any Lua object into a GCObject */
  162. #define obj2gco(v)      (cast(GCObject *, (v)))
  163.  
  164.  
  165. LUAI_FUNC lua_State *luaE_newthread (lua_State *L);
  166. LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1);
  167.  
  168. #endif
  169.  
  170.