lua/lstate.h

95 lines
2.2 KiB
C
Raw Normal View History

1997-11-19 09:31:19 -08:00
/*
** $Id: lstate.h,v 1.20 1999/10/04 17:51:04 roberto Exp roberto $
1997-11-19 09:31:19 -08:00
** Global State
** See Copyright Notice in lua.h
*/
#ifndef lstate_h
#define lstate_h
1998-06-24 06:33:00 -07:00
#include <setjmp.h>
1997-11-19 09:31:19 -08:00
#include "lobject.h"
#include "lua.h"
#include "luadebug.h"
1997-11-19 09:31:19 -08:00
#define GARBAGE_BLOCK 150
typedef int StkId; /* index to stack elements */
1999-05-10 06:54:01 -07:00
/*
** "jmp_buf" may be an array, so it is better to make sure it has an
** address (and not that it *is* an address...)
*/
struct lua_longjmp {
jmp_buf b;
};
1997-11-19 09:31:19 -08:00
struct Stack {
TObject *top;
TObject *stack;
TObject *last;
1997-11-19 09:31:19 -08:00
};
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 */
};
1999-05-10 06:54:01 -07:00
typedef struct stringtable {
1997-11-19 09:31:19 -08:00
int size;
int nuse; /* number of elements (including EMPTYs) */
TaggedString **hash;
} stringtable;
1998-06-24 06:33:00 -07:00
enum Status {LOCK, HOLD, FREE, COLLECTED};
1997-11-19 09:31:19 -08:00
struct ref {
TObject o;
1998-06-24 06:33:00 -07:00
enum Status status;
1997-11-19 09:31:19 -08:00
};
struct lua_State {
1998-06-19 09:14:09 -07:00
/* thread-specific state */
1997-11-19 09:31:19 -08:00
struct Stack stack; /* Lua stack */
struct C_Lua_Stack Cstack; /* C2lua struct */
1999-05-10 06:54:01 -07:00
struct lua_longjmp *errorJmp; /* current error recover point */
char *Mbuffer; /* global buffer */
int Mbuffbase; /* current first position of Mbuffer */
int Mbuffsize; /* size of Mbuffer */
int Mbuffnext; /* next position to fill in Mbuffer */
1999-05-11 07:19:32 -07:00
struct C_Lua_Stack *Cblocks;
int numCblocks; /* number of nested Cblocks */
int debug;
lua_CHFunction callhook;
lua_LHFunction linehook;
/* global state */
TProtoFunc *rootproto; /* list of all prototypes */
Closure *rootcl; /* list of all closures */
Hash *roottable; /* list of all tables */
GlobalVar *rootglobal; /* list of global variables */
1997-11-19 09:31:19 -08:00
stringtable *string_root; /* array of hash tables for strings and udata */
struct IM *IMtable; /* table for tag methods */
int last_tag; /* last used tag in IMtable */
struct ref *refArray; /* locked objects */
int refSize; /* size of refArray */
unsigned long GCthreshold;
unsigned long nblocks; /* number of 'blocks' currently allocated */
};
1997-11-19 09:31:19 -08:00
#define L lua_state
#endif