mirror of https://github.com/lua/lua.git
Roberto Ierusalimschy
27 years ago
2 changed files with 134 additions and 0 deletions
@ -0,0 +1,52 @@ |
|||||
|
/*
|
||||
|
** $Id: $ |
||||
|
** Global State |
||||
|
** See Copyright Notice in lua.h |
||||
|
*/ |
||||
|
|
||||
|
|
||||
|
#include "lbuiltin.h" |
||||
|
#include "ldo.h" |
||||
|
#include "llex.h" |
||||
|
#include "lmem.h" |
||||
|
#include "lstate.h" |
||||
|
#include "lstring.h" |
||||
|
#include "ltable.h" |
||||
|
#include "ltm.h" |
||||
|
|
||||
|
|
||||
|
LState *lua_state = NULL; |
||||
|
|
||||
|
|
||||
|
void lua_open (void) |
||||
|
{ |
||||
|
if (lua_state) return; |
||||
|
lua_state = luaM_new(LState); |
||||
|
L->numCblocks = 0; |
||||
|
L->Cstack.base = 0; |
||||
|
L->Cstack.lua2C = 0; |
||||
|
L->Cstack.num = 0; |
||||
|
L->errorJmp = NULL; |
||||
|
L->rootproto.next = NULL; |
||||
|
L->rootproto.marked = 0; |
||||
|
L->rootcl.next = NULL; |
||||
|
L->rootcl.marked = 0; |
||||
|
L->rootglobal.next = NULL; |
||||
|
L->rootglobal.marked = 0; |
||||
|
L->roottable.next = NULL; |
||||
|
L->roottable.marked = 0; |
||||
|
L->refArray = NULL; |
||||
|
L->refSize = 0; |
||||
|
L->Mbuffsize = 0; |
||||
|
L->Mbuffer = NULL; |
||||
|
L->GCthreshold = GARBAGE_BLOCK; |
||||
|
L->nblocks = 0; |
||||
|
luaD_init(); |
||||
|
luaS_init(); |
||||
|
luaX_init(); |
||||
|
luaT_init(); |
||||
|
L->globalbag.ttype = LUA_T_ARRAY; |
||||
|
L->globalbag.value.a = luaH_new(0); |
||||
|
luaB_predefine(); |
||||
|
} |
||||
|
|
@ -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 |
Loading…
Reference in new issue