aboutsummaryrefslogtreecommitdiff
path: root/lstate.h
blob: 9388b444e180824acc00eeb58136f1a36e86febb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
** $Id: lstate.h,v 1.4 1997/11/27 15:59:25 roberto Exp roberto $
** 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 *top;
  TObject *stack;
  TObject *last;
};

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 Stack stack;  /* Lua stack */
  struct C_Lua_Stack Cstack;  /* C2lua struct */
  void *errorJmp;  /* current error recover point */
  TObject errorim;  /* error tag method */
  struct C_Lua_Stack Cblocks[MAX_C_BLOCKS];
  int numCblocks;  /* number of nested Cblocks */
  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 */
  char *Mbuffer;  /* global buffer, used by luaM_buffer */
  unsigned long Mbuffsize;  /* size of Mbuffer */
} LState;


extern LState *lua_state;


#define L	lua_state


#endif