lua/lstate.h

89 lines
2.0 KiB
C
Raw Normal View History

1997-11-19 20:31:19 +03:00
/*
2000-08-28 21:57:04 +04:00
** $Id: lstate.h,v 1.36 2000/08/08 20:42:07 roberto Exp roberto $
1997-11-19 20:31:19 +03:00
** Global State
** See Copyright Notice in lua.h
*/
#ifndef lstate_h
#define lstate_h
1998-06-24 17:33:00 +04:00
#include <setjmp.h>
1997-11-19 20:31:19 +03:00
#include "lobject.h"
#include "lua.h"
#include "luadebug.h"
1997-11-19 20:31:19 +03:00
1999-12-01 22:50:08 +03:00
typedef TObject *StkId; /* index to stack elements */
1997-11-19 20:31:19 +03:00
1999-05-10 17:54:01 +04:00
/*
2000-08-28 21:57:04 +04:00
** marks for Reference array
1999-05-10 17:54:01 +04:00
*/
2000-08-28 21:57:04 +04:00
#define NONEXT -1 /* to end the free list */
#define HOLD -2
#define COLLECTED -3
#define LOCK -4
struct Ref {
TObject o;
int st; /* can be LOCK, HOLD, COLLECTED, or next (for free list) */
1999-05-10 17:54:01 +04:00
};
1999-12-01 22:50:08 +03:00
/*
2000-08-28 21:57:04 +04:00
** chain list of long jumps
1999-12-01 22:50:08 +03:00
*/
2000-08-28 21:57:04 +04:00
struct lua_longjmp {
jmp_buf b;
struct lua_longjmp *previous;
volatile int status; /* error code */
1999-12-01 22:50:08 +03:00
StkId base;
1997-11-19 20:31:19 +03:00
};
1999-05-10 17:54:01 +04:00
typedef struct stringtable {
1997-11-19 20:31:19 +03:00
int size;
2000-05-24 17:54:49 +04:00
lint32 nuse; /* number of elements */
2000-03-10 21:37:44 +03:00
TString **hash;
1997-11-19 20:31:19 +03:00
} stringtable;
struct lua_State {
1998-06-19 20:14:09 +04:00
/* thread-specific state */
1999-12-01 22:50:08 +03:00
StkId top; /* first free slot in the stack */
StkId stack; /* stack base */
StkId stack_last; /* last free slot in the stack */
int stacksize;
2000-08-28 21:57:04 +04:00
StkId Cbase; /* base for current C function */
1999-05-10 17:54:01 +04:00
struct lua_longjmp *errorJmp; /* current error recover point */
char *Mbuffer; /* global buffer */
2000-05-24 17:54:49 +04:00
size_t Mbuffbase; /* current first position of Mbuffer */
size_t Mbuffsize; /* size of Mbuffer */
size_t Mbuffnext; /* next position to fill in Mbuffer */
/* global state */
2000-03-10 21:37:44 +03:00
Proto *rootproto; /* list of all prototypes */
Closure *rootcl; /* list of all closures */
Hash *roottable; /* list of all tables */
2000-05-10 20:33:20 +04:00
stringtable strt; /* hash table for strings */
stringtable udt; /* hash table for udata */
Hash *gt; /* table for globals */
1997-11-19 20:31:19 +03:00
struct IM *IMtable; /* table for tag methods */
int last_tag; /* last used tag in IMtable */
2000-02-08 19:39:42 +03:00
struct Ref *refArray; /* locked objects */
1997-11-19 20:31:19 +03:00
int refSize; /* size of refArray */
int refFree; /* list of free positions in refArray */
1997-11-19 20:31:19 +03:00
unsigned long GCthreshold;
1999-12-27 20:33:22 +03:00
unsigned long nblocks; /* number of `blocks' currently allocated */
2000-03-30 21:19:48 +04:00
lua_Hook callhook;
lua_Hook linehook;
int allowhooks;
};
1997-11-19 20:31:19 +03:00
#endif