diff options
Diffstat (limited to 'src/lua/lstate.h')
-rw-r--r-- | src/lua/lstate.h | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/src/lua/lstate.h b/src/lua/lstate.h index 38a6c9b..c1283bb 100644 --- a/src/lua/lstate.h +++ b/src/lua/lstate.h | |||
@@ -156,6 +156,18 @@ typedef struct stringtable { | |||
156 | 156 | ||
157 | /* | 157 | /* |
158 | ** Information about a call. | 158 | ** Information about a call. |
159 | ** About union 'u': | ||
160 | ** - field 'l' is used only for Lua functions; | ||
161 | ** - field 'c' is used only for C functions. | ||
162 | ** About union 'u2': | ||
163 | ** - field 'funcidx' is used only by C functions while doing a | ||
164 | ** protected call; | ||
165 | ** - field 'nyield' is used only while a function is "doing" an | ||
166 | ** yield (from the yield until the next resume); | ||
167 | ** - field 'nres' is used only while closing tbc variables when | ||
168 | ** returning from a C function; | ||
169 | ** - field 'transferinfo' is used only during call/returnhooks, | ||
170 | ** before the function starts or after it ends. | ||
159 | */ | 171 | */ |
160 | typedef struct CallInfo { | 172 | typedef struct CallInfo { |
161 | StkId func; /* function index in the stack */ | 173 | StkId func; /* function index in the stack */ |
@@ -176,6 +188,7 @@ typedef struct CallInfo { | |||
176 | union { | 188 | union { |
177 | int funcidx; /* called-function index */ | 189 | int funcidx; /* called-function index */ |
178 | int nyield; /* number of values yielded */ | 190 | int nyield; /* number of values yielded */ |
191 | int nres; /* number of values returned */ | ||
179 | struct { /* info about transferred values (for call/return hooks) */ | 192 | struct { /* info about transferred values (for call/return hooks) */ |
180 | unsigned short ftransfer; /* offset of first value transferred */ | 193 | unsigned short ftransfer; /* offset of first value transferred */ |
181 | unsigned short ntransfer; /* number of values transferred */ | 194 | unsigned short ntransfer; /* number of values transferred */ |
@@ -191,17 +204,34 @@ typedef struct CallInfo { | |||
191 | */ | 204 | */ |
192 | #define CIST_OAH (1<<0) /* original value of 'allowhook' */ | 205 | #define CIST_OAH (1<<0) /* original value of 'allowhook' */ |
193 | #define CIST_C (1<<1) /* call is running a C function */ | 206 | #define CIST_C (1<<1) /* call is running a C function */ |
194 | #define CIST_FRESH (1<<2) /* call is on a fresh "luaV_execute" frame */ | 207 | #define CIST_FRESH (1<<2) /* call is on a fresh "luaV_execute" frame */ |
195 | #define CIST_HOOKED (1<<3) /* call is running a debug hook */ | 208 | #define CIST_HOOKED (1<<3) /* call is running a debug hook */ |
196 | #define CIST_YPCALL (1<<4) /* call is a yieldable protected call */ | 209 | #define CIST_YPCALL (1<<4) /* doing a yieldable protected call */ |
197 | #define CIST_TAIL (1<<5) /* call was tail called */ | 210 | #define CIST_TAIL (1<<5) /* call was tail called */ |
198 | #define CIST_HOOKYIELD (1<<6) /* last hook called yielded */ | 211 | #define CIST_HOOKYIELD (1<<6) /* last hook called yielded */ |
199 | #define CIST_FIN (1<<7) /* call is running a finalizer */ | 212 | #define CIST_FIN (1<<7) /* call is running a finalizer */ |
200 | #define CIST_TRAN (1<<8) /* 'ci' has transfer information */ | 213 | #define CIST_TRAN (1<<8) /* 'ci' has transfer information */ |
214 | #define CIST_CLSRET (1<<9) /* function is closing tbc variables */ | ||
215 | /* Bits 10-12 are used for CIST_RECST (see below) */ | ||
216 | #define CIST_RECST 10 | ||
201 | #if defined(LUA_COMPAT_LT_LE) | 217 | #if defined(LUA_COMPAT_LT_LE) |
202 | #define CIST_LEQ (1<<9) /* using __lt for __le */ | 218 | #define CIST_LEQ (1<<13) /* using __lt for __le */ |
203 | #endif | 219 | #endif |
204 | 220 | ||
221 | |||
222 | /* | ||
223 | ** Field CIST_RECST stores the "recover status", used to keep the error | ||
224 | ** status while closing to-be-closed variables in coroutines, so that | ||
225 | ** Lua can correctly resume after an yield from a __close method called | ||
226 | ** because of an error. (Three bits are enough for error status.) | ||
227 | */ | ||
228 | #define getcistrecst(ci) (((ci)->callstatus >> CIST_RECST) & 7) | ||
229 | #define setcistrecst(ci,st) \ | ||
230 | check_exp(((st) & 7) == (st), /* status must fit in three bits */ \ | ||
231 | ((ci)->callstatus = ((ci)->callstatus & ~(7 << CIST_RECST)) \ | ||
232 | | ((st) << CIST_RECST))) | ||
233 | |||
234 | |||
205 | /* active function is a Lua function */ | 235 | /* active function is a Lua function */ |
206 | #define isLua(ci) (!((ci)->callstatus & CIST_C)) | 236 | #define isLua(ci) (!((ci)->callstatus & CIST_C)) |
207 | 237 | ||
@@ -230,6 +260,7 @@ typedef struct global_State { | |||
230 | lu_byte currentwhite; | 260 | lu_byte currentwhite; |
231 | lu_byte gcstate; /* state of garbage collector */ | 261 | lu_byte gcstate; /* state of garbage collector */ |
232 | lu_byte gckind; /* kind of GC running */ | 262 | lu_byte gckind; /* kind of GC running */ |
263 | lu_byte gcstopem; /* stops emergency collections */ | ||
233 | lu_byte genminormul; /* control for minor generational collections */ | 264 | lu_byte genminormul; /* control for minor generational collections */ |
234 | lu_byte genmajormul; /* control for major generational collections */ | 265 | lu_byte genmajormul; /* control for major generational collections */ |
235 | lu_byte gcrunning; /* true if GC is running */ | 266 | lu_byte gcrunning; /* true if GC is running */ |
@@ -281,6 +312,7 @@ struct lua_State { | |||
281 | StkId stack_last; /* end of stack (last element + 1) */ | 312 | StkId stack_last; /* end of stack (last element + 1) */ |
282 | StkId stack; /* stack base */ | 313 | StkId stack; /* stack base */ |
283 | UpVal *openupval; /* list of open upvalues in this stack */ | 314 | UpVal *openupval; /* list of open upvalues in this stack */ |
315 | StkId tbclist; /* list of to-be-closed variables */ | ||
284 | GCObject *gclist; | 316 | GCObject *gclist; |
285 | struct lua_State *twups; /* list of threads with open upvalues */ | 317 | struct lua_State *twups; /* list of threads with open upvalues */ |
286 | struct lua_longjmp *errorJmp; /* current error recover point */ | 318 | struct lua_longjmp *errorJmp; /* current error recover point */ |
@@ -297,6 +329,12 @@ struct lua_State { | |||
297 | 329 | ||
298 | #define G(L) (L->l_G) | 330 | #define G(L) (L->l_G) |
299 | 331 | ||
332 | /* | ||
333 | ** 'g->nilvalue' being a nil value flags that the state was completely | ||
334 | ** build. | ||
335 | */ | ||
336 | #define completestate(g) ttisnil(&g->nilvalue) | ||
337 | |||
300 | 338 | ||
301 | /* | 339 | /* |
302 | ** Union of all collectable objects (only for conversions) | 340 | ** Union of all collectable objects (only for conversions) |