aboutsummaryrefslogtreecommitdiff
path: root/lobject.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-08-07 17:21:34 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-08-07 17:21:34 -0300
commitd9e61e8ceafe8c3f6ad936979719ca7c446ce228 (patch)
tree0808ada3d7b7219022b9002503894c76c7253df6 /lobject.h
parent397905ef8694ec716a51acebc993bb625340d388 (diff)
downloadlua-d9e61e8ceafe8c3f6ad936979719ca7c446ce228.tar.gz
lua-d9e61e8ceafe8c3f6ad936979719ca7c446ce228.tar.bz2
lua-d9e61e8ceafe8c3f6ad936979719ca7c446ce228.zip
new algorithm for traversing in GC to avoid deep recursion calls
Diffstat (limited to 'lobject.h')
-rw-r--r--lobject.h24
1 files changed, 15 insertions, 9 deletions
diff --git a/lobject.h b/lobject.h
index 2185eac4..b432c84a 100644
--- a/lobject.h
+++ b/lobject.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lobject.h,v 1.69 2000/06/28 20:20:36 roberto Exp roberto $ 2** $Id: lobject.h,v 1.70 2000/06/30 14:35:17 roberto Exp roberto $
3** Type definitions for Lua objects 3** Type definitions for Lua objects
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -110,15 +110,15 @@ typedef struct TString {
110** Function Prototypes 110** Function Prototypes
111*/ 111*/
112typedef struct Proto { 112typedef struct Proto {
113 struct Proto *next;
114 int marked;
115 struct TString **kstr; /* strings used by the function */
116 int nkstr; /* size of `kstr' */
117 Number *knum; /* Number numbers used by the function */ 113 Number *knum; /* Number numbers used by the function */
118 int nknum; /* size of `knum' */ 114 int nknum; /* size of `knum' */
115 struct TString **kstr; /* strings used by the function */
116 int nkstr; /* size of `kstr' */
119 struct Proto **kproto; /* functions defined inside the function */ 117 struct Proto **kproto; /* functions defined inside the function */
120 int nkproto; /* size of `kproto' */ 118 int nkproto; /* size of `kproto' */
121 Instruction *code; /* ends with opcode ENDCODE */ 119 Instruction *code; /* ends with opcode ENDCODE */
120 struct Proto *next;
121 int marked;
122 int *lines; /* source line that generated each opcode */ 122 int *lines; /* source line that generated each opcode */
123 int lineDefined; 123 int lineDefined;
124 TString *source; 124 TString *source;
@@ -139,12 +139,12 @@ typedef struct LocVar {
139** Closures 139** Closures
140*/ 140*/
141typedef struct Closure { 141typedef struct Closure {
142 struct Closure *next;
143 int marked;
144 union { 142 union {
145 lua_CFunction c; /* C functions */ 143 lua_CFunction c; /* C functions */
146 struct Proto *l; /* Lua functions */ 144 struct Proto *l; /* Lua functions */
147 } f; 145 } f;
146 struct Closure *next;
147 struct Closure *mark; /* marked closures (point to itself when not marked) */
148 int nupvalues; 148 int nupvalues;
149 TObject upvalue[1]; 149 TObject upvalue[1];
150} Closure; 150} Closure;
@@ -157,15 +157,21 @@ typedef struct Node {
157} Node; 157} Node;
158 158
159typedef struct Hash { 159typedef struct Hash {
160 int htag;
161 Node *node; 160 Node *node;
161 int htag;
162 int size; 162 int size;
163 Node *firstfree; /* this position is free; all positions after it are full */ 163 Node *firstfree; /* this position is free; all positions after it are full */
164 struct Hash *next; 164 struct Hash *next;
165 int marked; 165 struct Hash *mark; /* marked tables (point to itself when not marked) */
166} Hash; 166} Hash;
167 167
168 168
169/* unmarked tables and closures are represented by pointing `mark' to
170** themselves
171*/
172#define ismarked(x) ((x)->mark != (x))
173
174
169/* 175/*
170** informations about a call (for debugging) 176** informations about a call (for debugging)
171*/ 177*/