From b79ffdc4cef96ababe0cc068a6c11afdc71782eb Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 19 Nov 1997 15:31:19 -0200 Subject: global state for Lua interpreter --- lstate.h | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 lstate.h (limited to 'lstate.h') diff --git a/lstate.h b/lstate.h new file mode 100644 index 00000000..45897d5b --- /dev/null +++ b/lstate.h @@ -0,0 +1,82 @@ +/* +** $Id: $ +** Global State +** See Copyright Notice in lua.h +*/ + +#ifndef lstate_h +#define lstate_h + +#include "lobject.h" + + +#define MAX_C_BLOCKS 10 + +#define GARBAGE_BLOCK 150 + + +typedef int StkId; /* index to stack elements */ + +struct Stack { + TObject *last; + TObject *stack; + TObject *top; +}; + +struct C_Lua_Stack { + StkId base; /* when Lua calls C or C calls Lua, points to */ + /* the first slot after the last parameter. */ + StkId lua2C; /* points to first element of "array" lua2C */ + int num; /* size of "array" lua2C */ +}; + + +typedef struct { + int size; + int nuse; /* number of elements (including EMPTYs) */ + TaggedString **hash; +} stringtable; + + +struct ref { + TObject o; + enum {LOCK, HOLD, FREE, COLLECTED} status; +}; + + +typedef struct LState { + struct C_Lua_Stack Cblocks[MAX_C_BLOCKS]; + int numCblocks; /* number of nested Cblocks */ + TObject *functofind; /* auxiliar */ + struct Stack stack; /* Lua stack */ + struct C_Lua_Stack Cstack; /* C2lua struct */ + int stacklimit; /* limit for stack overflow */ + void *errorJmp; /* current error recover point */ + TObject errorim; /* error tag method */ + GCnode rootproto; /* list of all prototypes */ + GCnode rootcl; /* list of all closures */ + GCnode roottable; /* list of all tables */ + GCnode rootglobal; /* list of strings with global values */ + stringtable *string_root; /* array of hash tables for strings and udata */ + struct IM *IMtable; /* table for tag methods */ + int IMtable_size; /* size of IMtable */ + int last_tag; /* last used tag in IMtable */ + struct FuncState *mainState, *currState; /* point to local structs in yacc */ + struct LexState *lexstate; /* point to local struct in yacc */ + struct ref *refArray; /* locked objects */ + int refSize; /* size of refArray */ + unsigned long GCthreshold; + unsigned long nblocks; /* number of 'blocks' currently allocated */ + TObject globalbag; /* table for generic use by C */ + char *Mbuffer; /* global buffer, used by luaM_buffer */ + unsigned long Mbuffsize; /* size of Mbuffer */ +} LState; + + +extern LState *lua_state; + + +#define L lua_state + + +#endif -- cgit v1.2.3-55-g6feb