Mercurial > vba-clojure
view src/lua/lstate.h @ 52:ee70875e0d3e
working on the API
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Wed, 07 Mar 2012 02:12:59 -0600 |
parents | 27763b933818 |
children |
line wrap: on
line source
1 /*2 ** $Id: lstate.h,v 2.24.1.2 2008/01/03 15:20:39 roberto Exp $3 ** Global State4 ** See Copyright Notice in lua.h5 */7 #ifndef lstate_h8 #define lstate_h10 #include "lua.h"12 #include "lobject.h"13 #include "ltm.h"14 #include "lzio.h"18 struct lua_longjmp; /* defined in ldo.c */21 /* table of globals */22 #define gt(L) (&L->l_gt)24 /* registry */25 #define registry(L) (&G(L)->l_registry)28 /* extra stack space to handle TM calls and some other extras */29 #define EXTRA_STACK 532 #define BASIC_CI_SIZE 834 #define BASIC_STACK_SIZE (2*LUA_MINSTACK)38 typedef struct stringtable {39 GCObject **hash;40 lu_int32 nuse; /* number of elements */41 int size;42 } stringtable;45 /*46 ** informations about a call47 */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;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))65 /*66 ** `global state', shared by all threads of this state67 */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;97 /*98 ** `per thread' state99 */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 };130 #define G(L) (L->l_G)133 /*134 ** Union of all collectable objects135 */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 };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))161 /* macro to convert any Lua object into a GCObject */162 #define obj2gco(v) (cast(GCObject *, (v)))165 LUAI_FUNC lua_State *luaE_newthread (lua_State *L);166 LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1);168 #endif