1997-11-20 01:31:19 +08:00
|
|
|
/*
|
2000-02-09 00:39:42 +08:00
|
|
|
** $Id: lstate.h,v 1.28 2000/01/19 12:00:45 roberto Exp roberto $
|
1997-11-20 01:31:19 +08:00
|
|
|
** Global State
|
|
|
|
** See Copyright Notice in lua.h
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef lstate_h
|
|
|
|
#define lstate_h
|
|
|
|
|
1998-06-24 21:33:00 +08:00
|
|
|
#include <setjmp.h>
|
|
|
|
|
1997-11-20 01:31:19 +08:00
|
|
|
#include "lobject.h"
|
1998-06-03 04:37:04 +08:00
|
|
|
#include "lua.h"
|
1999-02-05 01:47:59 +08:00
|
|
|
#include "luadebug.h"
|
1997-11-20 01:31:19 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
1999-12-02 03:50:08 +08:00
|
|
|
typedef TObject *StkId; /* index to stack elements */
|
1997-11-20 01:31:19 +08:00
|
|
|
|
1999-05-10 21:54:01 +08:00
|
|
|
|
|
|
|
/*
|
1999-12-28 01:33:22 +08:00
|
|
|
** `jmp_buf' may be an array, so it is better to make sure it has an
|
1999-05-10 21:54:01 +08:00
|
|
|
** address (and not that it *is* an address...)
|
|
|
|
*/
|
|
|
|
struct lua_longjmp {
|
|
|
|
jmp_buf b;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
1999-12-02 03:50:08 +08:00
|
|
|
/*
|
|
|
|
** stack layout for C point of view:
|
|
|
|
** [lua2C, lua2C+num) - `array' lua2C
|
2000-02-09 00:39:42 +08:00
|
|
|
** [lua2C+num, base) - space for extra lua_Objects (limbo)
|
1999-12-02 03:50:08 +08:00
|
|
|
** [base, L->top) - `stack' C2Lua
|
|
|
|
*/
|
1997-11-20 01:31:19 +08:00
|
|
|
struct C_Lua_Stack {
|
1999-12-02 03:50:08 +08:00
|
|
|
StkId base;
|
|
|
|
StkId lua2C;
|
|
|
|
int num;
|
1997-11-20 01:31:19 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
1999-05-10 21:54:01 +08:00
|
|
|
typedef struct stringtable {
|
1997-11-20 01:31:19 +08:00
|
|
|
int size;
|
|
|
|
int nuse; /* number of elements (including EMPTYs) */
|
|
|
|
TaggedString **hash;
|
|
|
|
} stringtable;
|
|
|
|
|
|
|
|
|
|
|
|
|
1998-06-03 04:37:04 +08:00
|
|
|
struct lua_State {
|
1998-06-20 00:14:09 +08:00
|
|
|
/* thread-specific state */
|
1999-12-02 03:50:08 +08:00
|
|
|
StkId top; /* first free slot in the stack */
|
|
|
|
StkId stack; /* stack base */
|
|
|
|
StkId stack_last; /* last free slot in the stack */
|
1999-12-06 19:41:28 +08:00
|
|
|
int stacksize;
|
1997-11-20 01:31:19 +08:00
|
|
|
struct C_Lua_Stack Cstack; /* C2lua struct */
|
1999-05-10 21:54:01 +08:00
|
|
|
struct lua_longjmp *errorJmp; /* current error recover point */
|
1998-06-03 04:37:04 +08:00
|
|
|
char *Mbuffer; /* global buffer */
|
1999-02-25 23:17:01 +08:00
|
|
|
int Mbuffbase; /* current first position of Mbuffer */
|
1998-06-03 04:37:04 +08:00
|
|
|
int Mbuffsize; /* size of Mbuffer */
|
|
|
|
int Mbuffnext; /* next position to fill in Mbuffer */
|
1999-05-11 22:19:32 +08:00
|
|
|
struct C_Lua_Stack *Cblocks;
|
1998-06-03 04:37:04 +08:00
|
|
|
int numCblocks; /* number of nested Cblocks */
|
|
|
|
/* global state */
|
1999-10-05 01:51:04 +08:00
|
|
|
TProtoFunc *rootproto; /* list of all prototypes */
|
|
|
|
Closure *rootcl; /* list of all closures */
|
|
|
|
Hash *roottable; /* list of all tables */
|
1999-11-05 01:23:12 +08:00
|
|
|
GlobalVar *rootglobal; /* list of global variables */
|
1997-11-20 01: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 */
|
2000-02-09 00:39:42 +08:00
|
|
|
struct Ref *refArray; /* locked objects */
|
1997-11-20 01:31:19 +08:00
|
|
|
int refSize; /* size of refArray */
|
1999-11-10 23:39:35 +08:00
|
|
|
int refFree; /* list of free positions in refArray */
|
1997-11-20 01:31:19 +08:00
|
|
|
unsigned long GCthreshold;
|
1999-12-28 01:33:22 +08:00
|
|
|
unsigned long nblocks; /* number of `blocks' currently allocated */
|
1999-12-22 02:04:41 +08:00
|
|
|
int debug;
|
2000-01-19 20:00:45 +08:00
|
|
|
lua_Dbghook callhook;
|
|
|
|
lua_Dbghook linehook;
|
1999-12-22 02:04:41 +08:00
|
|
|
int allowhooks;
|
1998-06-03 04:37:04 +08:00
|
|
|
};
|
1997-11-20 01:31:19 +08:00
|
|
|
|
|
|
|
|
1999-11-22 21:12:07 +08:00
|
|
|
|
1997-11-20 01:31:19 +08:00
|
|
|
|
|
|
|
|
|
|
|
#endif
|
1999-02-05 01:47:59 +08:00
|
|
|
|