diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-19 15:29:23 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-19 15:29:23 -0200 |
| commit | 592a3f289b428e3ee5cc595a266607ad7f5d94ff (patch) | |
| tree | 19a371157be240f7e0f579117d04d466e911afcd /lapi.c | |
| parent | 9cdeb275e7c93007b2ece6f81aaeafe530076805 (diff) | |
| download | lua-592a3f289b428e3ee5cc595a266607ad7f5d94ff.tar.gz lua-592a3f289b428e3ee5cc595a266607ad7f5d94ff.tar.bz2 lua-592a3f289b428e3ee5cc595a266607ad7f5d94ff.zip | |
first implementation of centralized global state.
Diffstat (limited to 'lapi.c')
| -rw-r--r-- | lapi.c | 179 |
1 files changed, 82 insertions, 97 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 1.3 1997/10/24 17:17:24 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 1.4 1997/11/04 15:27:53 roberto Exp roberto $ |
| 3 | ** Lua API | 3 | ** Lua API |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -10,13 +10,12 @@ | |||
| 10 | 10 | ||
| 11 | #include "lapi.h" | 11 | #include "lapi.h" |
| 12 | #include "lauxlib.h" | 12 | #include "lauxlib.h" |
| 13 | #include "lbuiltin.h" | ||
| 14 | #include "ldo.h" | 13 | #include "ldo.h" |
| 15 | #include "lfunc.h" | 14 | #include "lfunc.h" |
| 16 | #include "lgc.h" | 15 | #include "lgc.h" |
| 17 | #include "llex.h" | ||
| 18 | #include "lmem.h" | 16 | #include "lmem.h" |
| 19 | #include "lobject.h" | 17 | #include "lobject.h" |
| 18 | #include "lstate.h" | ||
| 20 | #include "lstring.h" | 19 | #include "lstring.h" |
| 21 | #include "ltable.h" | 20 | #include "ltable.h" |
| 22 | #include "ltm.h" | 21 | #include "ltm.h" |
| @@ -38,41 +37,41 @@ TObject *luaA_Address (lua_Object o) | |||
| 38 | 37 | ||
| 39 | void luaA_packresults (void) | 38 | void luaA_packresults (void) |
| 40 | { | 39 | { |
| 41 | luaV_pack(luaD_Cstack.lua2C, luaD_Cstack.num, luaD_stack.top); | 40 | luaV_pack(L->Cstack.lua2C, L->Cstack.num, L->stack.top); |
| 42 | incr_top; | 41 | incr_top; |
| 43 | } | 42 | } |
| 44 | 43 | ||
| 45 | 44 | ||
| 46 | int luaA_passresults (void) | 45 | int luaA_passresults (void) |
| 47 | { | 46 | { |
| 48 | luaD_checkstack(luaD_Cstack.num); | 47 | luaD_checkstack(L->Cstack.num); |
| 49 | memcpy(luaD_stack.top, luaD_Cstack.lua2C+luaD_stack.stack, | 48 | memcpy(L->stack.top, L->Cstack.lua2C+L->stack.stack, |
| 50 | luaD_Cstack.num*sizeof(TObject)); | 49 | L->Cstack.num*sizeof(TObject)); |
| 51 | luaD_stack.top += luaD_Cstack.num; | 50 | L->stack.top += L->Cstack.num; |
| 52 | return luaD_Cstack.num; | 51 | return L->Cstack.num; |
| 53 | } | 52 | } |
| 54 | 53 | ||
| 55 | 54 | ||
| 56 | static void checkCparams (int nParams) | 55 | static void checkCparams (int nParams) |
| 57 | { | 56 | { |
| 58 | if (luaD_stack.top-luaD_stack.stack < luaD_Cstack.base+nParams) | 57 | if (L->stack.top-L->stack.stack < L->Cstack.base+nParams) |
| 59 | lua_error("API error - wrong number of arguments in C2lua stack"); | 58 | lua_error("API error - wrong number of arguments in C2lua stack"); |
| 60 | } | 59 | } |
| 61 | 60 | ||
| 62 | 61 | ||
| 63 | static lua_Object put_luaObject (TObject *o) | 62 | static lua_Object put_luaObject (TObject *o) |
| 64 | { | 63 | { |
| 65 | luaD_openstack((luaD_stack.top-luaD_stack.stack)-luaD_Cstack.base); | 64 | luaD_openstack((L->stack.top-L->stack.stack)-L->Cstack.base); |
| 66 | luaD_stack.stack[luaD_Cstack.base++] = *o; | 65 | L->stack.stack[L->Cstack.base++] = *o; |
| 67 | return luaD_Cstack.base; /* this is +1 real position (see Ref) */ | 66 | return L->Cstack.base; /* this is +1 real position (see Ref) */ |
| 68 | } | 67 | } |
| 69 | 68 | ||
| 70 | 69 | ||
| 71 | static lua_Object put_luaObjectonTop (void) | 70 | static lua_Object put_luaObjectonTop (void) |
| 72 | { | 71 | { |
| 73 | luaD_openstack((luaD_stack.top-luaD_stack.stack)-luaD_Cstack.base); | 72 | luaD_openstack((L->stack.top-L->stack.stack)-L->Cstack.base); |
| 74 | luaD_stack.stack[luaD_Cstack.base++] = *(--luaD_stack.top); | 73 | L->stack.stack[L->Cstack.base++] = *(--L->stack.top); |
| 75 | return luaD_Cstack.base; /* this is +1 real position (see Ref) */ | 74 | return L->Cstack.base; /* this is +1 real position (see Ref) */ |
| 76 | } | 75 | } |
| 77 | 76 | ||
| 78 | 77 | ||
| @@ -89,20 +88,20 @@ lua_Object lua_pop (void) | |||
| 89 | */ | 88 | */ |
| 90 | lua_Object lua_lua2C (int number) | 89 | lua_Object lua_lua2C (int number) |
| 91 | { | 90 | { |
| 92 | if (number <= 0 || number > luaD_Cstack.num) return LUA_NOOBJECT; | 91 | if (number <= 0 || number > L->Cstack.num) return LUA_NOOBJECT; |
| 93 | /* Ref(luaD_stack.stack+(luaD_Cstack.lua2C+number-1)) == | 92 | /* Ref(L->stack.stack+(L->Cstack.lua2C+number-1)) == |
| 94 | luaD_stack.stack+(luaD_Cstack.lua2C+number-1)-luaD_stack.stack+1 == */ | 93 | L->stack.stack+(L->Cstack.lua2C+number-1)-L->stack.stack+1 == */ |
| 95 | return luaD_Cstack.lua2C+number; | 94 | return L->Cstack.lua2C+number; |
| 96 | } | 95 | } |
| 97 | 96 | ||
| 98 | 97 | ||
| 99 | lua_Object lua_upvalue (int n) | 98 | lua_Object lua_upvalue (int n) |
| 100 | { | 99 | { |
| 101 | TObject *f = luaD_stack.stack+luaD_Cstack.lua2C-1; | 100 | TObject *f = L->stack.stack+L->Cstack.lua2C-1; |
| 102 | if (ttype(f) != LUA_T_MARK || n <= 0 || n > clvalue(f)->nelems) | 101 | if (ttype(f) != LUA_T_MARK || n <= 0 || n > clvalue(f)->nelems) |
| 103 | return LUA_NOOBJECT; | 102 | return LUA_NOOBJECT; |
| 104 | if (ttype(protovalue(f)) != LUA_T_CPROTO) lua_error("BAD!!"); | 103 | if (ttype(protovalue(f)) != LUA_T_CPROTO) lua_error("BAD!!"); |
| 105 | *luaD_stack.top = clvalue(f)->consts[n]; | 104 | *L->stack.top = clvalue(f)->consts[n]; |
| 106 | incr_top; | 105 | incr_top; |
| 107 | return put_luaObjectonTop(); | 106 | return put_luaObjectonTop(); |
| 108 | } | 107 | } |
| @@ -113,8 +112,8 @@ int lua_callfunction (lua_Object function) | |||
| 113 | if (function == LUA_NOOBJECT) | 112 | if (function == LUA_NOOBJECT) |
| 114 | return 1; | 113 | return 1; |
| 115 | else { | 114 | else { |
| 116 | luaD_openstack((luaD_stack.top-luaD_stack.stack)-luaD_Cstack.base); | 115 | luaD_openstack((L->stack.top-L->stack.stack)-L->Cstack.base); |
| 117 | luaD_stack.stack[luaD_Cstack.base] = *Address(function); | 116 | L->stack.stack[L->Cstack.base] = *Address(function); |
| 118 | return luaD_protectedrun(MULT_RET); | 117 | return luaD_protectedrun(MULT_RET); |
| 119 | } | 118 | } |
| 120 | } | 119 | } |
| @@ -129,16 +128,16 @@ lua_Object lua_gettagmethod (int tag, char *event) | |||
| 129 | lua_Object lua_settagmethod (int tag, char *event) | 128 | lua_Object lua_settagmethod (int tag, char *event) |
| 130 | { | 129 | { |
| 131 | checkCparams(1); | 130 | checkCparams(1); |
| 132 | luaT_settagmethod(tag, event, luaD_stack.top-1); | 131 | luaT_settagmethod(tag, event, L->stack.top-1); |
| 133 | return put_luaObjectonTop(); | 132 | return put_luaObjectonTop(); |
| 134 | } | 133 | } |
| 135 | 134 | ||
| 136 | 135 | ||
| 137 | lua_Object lua_seterrormethod (void) | 136 | lua_Object lua_seterrormethod (void) |
| 138 | { | 137 | { |
| 139 | TObject temp = luaD_errorim; | 138 | TObject temp = L->errorim; |
| 140 | checkCparams(1); | 139 | checkCparams(1); |
| 141 | luaD_errorim = *(--luaD_stack.top); | 140 | L->errorim = *(--L->stack.top); |
| 142 | return put_luaObject(&temp); | 141 | return put_luaObject(&temp); |
| 143 | } | 142 | } |
| 144 | 143 | ||
| @@ -154,15 +153,15 @@ lua_Object lua_gettable (void) | |||
| 154 | lua_Object lua_rawgettable (void) | 153 | lua_Object lua_rawgettable (void) |
| 155 | { | 154 | { |
| 156 | checkCparams(2); | 155 | checkCparams(2); |
| 157 | if (ttype(luaD_stack.top-2) != LUA_T_ARRAY) | 156 | if (ttype(L->stack.top-2) != LUA_T_ARRAY) |
| 158 | lua_error("indexed expression not a table in raw gettable"); | 157 | lua_error("indexed expression not a table in raw gettable"); |
| 159 | else { | 158 | else { |
| 160 | TObject *h = luaH_get(avalue(luaD_stack.top-2), luaD_stack.top-1); | 159 | TObject *h = luaH_get(avalue(L->stack.top-2), L->stack.top-1); |
| 161 | --luaD_stack.top; | 160 | --L->stack.top; |
| 162 | if (h != NULL) | 161 | if (h != NULL) |
| 163 | *(luaD_stack.top-1) = *h; | 162 | *(L->stack.top-1) = *h; |
| 164 | else | 163 | else |
| 165 | ttype(luaD_stack.top-1) = LUA_T_NIL; | 164 | ttype(L->stack.top-1) = LUA_T_NIL; |
| 166 | } | 165 | } |
| 167 | return put_luaObjectonTop(); | 166 | return put_luaObjectonTop(); |
| 168 | } | 167 | } |
| @@ -171,14 +170,14 @@ lua_Object lua_rawgettable (void) | |||
| 171 | void lua_settable (void) | 170 | void lua_settable (void) |
| 172 | { | 171 | { |
| 173 | checkCparams(3); | 172 | checkCparams(3); |
| 174 | luaV_settable(luaD_stack.top-3, 1); | 173 | luaV_settable(L->stack.top-3, 1); |
| 175 | } | 174 | } |
| 176 | 175 | ||
| 177 | 176 | ||
| 178 | void lua_rawsettable (void) | 177 | void lua_rawsettable (void) |
| 179 | { | 178 | { |
| 180 | checkCparams(3); | 179 | checkCparams(3); |
| 181 | luaV_settable(luaD_stack.top-3, 0); | 180 | luaV_settable(L->stack.top-3, 0); |
| 182 | } | 181 | } |
| 183 | 182 | ||
| 184 | 183 | ||
| @@ -192,6 +191,12 @@ lua_Object lua_createtable (void) | |||
| 192 | } | 191 | } |
| 193 | 192 | ||
| 194 | 193 | ||
| 194 | lua_Object lua_globalbag (void) | ||
| 195 | { | ||
| 196 | return put_luaObject(&L->globalbag); | ||
| 197 | } | ||
| 198 | |||
| 199 | |||
| 195 | lua_Object lua_getglobal (char *name) | 200 | lua_Object lua_getglobal (char *name) |
| 196 | { | 201 | { |
| 197 | luaD_checkstack(2); /* may need that to call T.M. */ | 202 | luaD_checkstack(2); /* may need that to call T.M. */ |
| @@ -219,7 +224,7 @@ void lua_rawsetglobal (char *name) | |||
| 219 | { | 224 | { |
| 220 | TaggedString *ts = luaS_new(name); | 225 | TaggedString *ts = luaS_new(name); |
| 221 | checkCparams(1); | 226 | checkCparams(1); |
| 222 | luaS_rawsetglobal(ts, --luaD_stack.top); | 227 | luaS_rawsetglobal(ts, --L->stack.top); |
| 223 | } | 228 | } |
| 224 | 229 | ||
| 225 | 230 | ||
| @@ -293,24 +298,24 @@ lua_CFunction lua_getcfunction (lua_Object object) | |||
| 293 | 298 | ||
| 294 | void lua_pushnil (void) | 299 | void lua_pushnil (void) |
| 295 | { | 300 | { |
| 296 | ttype(luaD_stack.top) = LUA_T_NIL; | 301 | ttype(L->stack.top) = LUA_T_NIL; |
| 297 | incr_top; | 302 | incr_top; |
| 298 | } | 303 | } |
| 299 | 304 | ||
| 300 | void lua_pushnumber (real n) | 305 | void lua_pushnumber (real n) |
| 301 | { | 306 | { |
| 302 | ttype(luaD_stack.top) = LUA_T_NUMBER; | 307 | ttype(L->stack.top) = LUA_T_NUMBER; |
| 303 | nvalue(luaD_stack.top) = n; | 308 | nvalue(L->stack.top) = n; |
| 304 | incr_top; | 309 | incr_top; |
| 305 | } | 310 | } |
| 306 | 311 | ||
| 307 | void lua_pushstring (char *s) | 312 | void lua_pushstring (char *s) |
| 308 | { | 313 | { |
| 309 | if (s == NULL) | 314 | if (s == NULL) |
| 310 | ttype(luaD_stack.top) = LUA_T_NIL; | 315 | ttype(L->stack.top) = LUA_T_NIL; |
| 311 | else { | 316 | else { |
| 312 | tsvalue(luaD_stack.top) = luaS_new(s); | 317 | tsvalue(L->stack.top) = luaS_new(s); |
| 313 | ttype(luaD_stack.top) = LUA_T_STRING; | 318 | ttype(L->stack.top) = LUA_T_STRING; |
| 314 | } | 319 | } |
| 315 | incr_top; | 320 | incr_top; |
| 316 | luaC_checkGC(); | 321 | luaC_checkGC(); |
| @@ -319,13 +324,13 @@ void lua_pushstring (char *s) | |||
| 319 | void lua_pushCclosure (lua_CFunction fn, int n) | 324 | void lua_pushCclosure (lua_CFunction fn, int n) |
| 320 | { | 325 | { |
| 321 | if (fn == NULL) { | 326 | if (fn == NULL) { |
| 322 | ttype(luaD_stack.top) = LUA_T_NIL; | 327 | ttype(L->stack.top) = LUA_T_NIL; |
| 323 | incr_top; | 328 | incr_top; |
| 324 | } | 329 | } |
| 325 | else { | 330 | else { |
| 326 | checkCparams(n); | 331 | checkCparams(n); |
| 327 | ttype(luaD_stack.top) = LUA_T_CPROTO; | 332 | ttype(L->stack.top) = LUA_T_CPROTO; |
| 328 | fvalue(luaD_stack.top) = fn; | 333 | fvalue(L->stack.top) = fn; |
| 329 | incr_top; | 334 | incr_top; |
| 330 | luaV_closure(n); | 335 | luaV_closure(n); |
| 331 | } | 336 | } |
| @@ -335,15 +340,15 @@ void lua_pushusertag (void *u, int tag) | |||
| 335 | { | 340 | { |
| 336 | if (tag < 0 && tag != LUA_ANYTAG) | 341 | if (tag < 0 && tag != LUA_ANYTAG) |
| 337 | luaT_realtag(tag); /* error if tag is not valid */ | 342 | luaT_realtag(tag); /* error if tag is not valid */ |
| 338 | tsvalue(luaD_stack.top) = luaS_createudata(u, tag); | 343 | tsvalue(L->stack.top) = luaS_createudata(u, tag); |
| 339 | ttype(luaD_stack.top) = LUA_T_USERDATA; | 344 | ttype(L->stack.top) = LUA_T_USERDATA; |
| 340 | incr_top; | 345 | incr_top; |
| 341 | luaC_checkGC(); | 346 | luaC_checkGC(); |
| 342 | } | 347 | } |
| 343 | 348 | ||
| 344 | void luaA_pushobject (TObject *o) | 349 | void luaA_pushobject (TObject *o) |
| 345 | { | 350 | { |
| 346 | *luaD_stack.top = *o; | 351 | *L->stack.top = *o; |
| 347 | incr_top; | 352 | incr_top; |
| 348 | } | 353 | } |
| 349 | 354 | ||
| @@ -351,9 +356,9 @@ void lua_pushobject (lua_Object o) | |||
| 351 | { | 356 | { |
| 352 | if (o == LUA_NOOBJECT) | 357 | if (o == LUA_NOOBJECT) |
| 353 | lua_error("API error - attempt to push a NOOBJECT"); | 358 | lua_error("API error - attempt to push a NOOBJECT"); |
| 354 | *luaD_stack.top = *Address(o); | 359 | *L->stack.top = *Address(o); |
| 355 | if (ttype(luaD_stack.top) == LUA_T_MARK) | 360 | if (ttype(L->stack.top) == LUA_T_MARK) |
| 356 | ttype(luaD_stack.top) = LUA_T_FUNCTION; | 361 | ttype(L->stack.top) = LUA_T_FUNCTION; |
| 357 | incr_top; | 362 | incr_top; |
| 358 | } | 363 | } |
| 359 | 364 | ||
| @@ -376,18 +381,18 @@ void lua_settag (int tag) | |||
| 376 | { | 381 | { |
| 377 | checkCparams(1); | 382 | checkCparams(1); |
| 378 | luaT_realtag(tag); | 383 | luaT_realtag(tag); |
| 379 | switch (ttype(luaD_stack.top-1)) { | 384 | switch (ttype(L->stack.top-1)) { |
| 380 | case LUA_T_ARRAY: | 385 | case LUA_T_ARRAY: |
| 381 | (luaD_stack.top-1)->value.a->htag = tag; | 386 | (L->stack.top-1)->value.a->htag = tag; |
| 382 | break; | 387 | break; |
| 383 | case LUA_T_USERDATA: | 388 | case LUA_T_USERDATA: |
| 384 | (luaD_stack.top-1)->value.ts->u.d.tag = tag; | 389 | (L->stack.top-1)->value.ts->u.d.tag = tag; |
| 385 | break; | 390 | break; |
| 386 | default: | 391 | default: |
| 387 | luaL_verror("cannot change the tag of a %s", | 392 | luaL_verror("cannot change the tag of a %s", |
| 388 | luaO_typenames[-ttype((luaD_stack.top-1))]); | 393 | luaO_typenames[-ttype((L->stack.top-1))]); |
| 389 | } | 394 | } |
| 390 | luaD_stack.top--; | 395 | L->stack.top--; |
| 391 | } | 396 | } |
| 392 | 397 | ||
| 393 | 398 | ||
| @@ -406,10 +411,10 @@ lua_LHFunction lua_linehook = NULL; | |||
| 406 | lua_Function lua_stackedfunction (int level) | 411 | lua_Function lua_stackedfunction (int level) |
| 407 | { | 412 | { |
| 408 | StkId i; | 413 | StkId i; |
| 409 | for (i = (luaD_stack.top-1)-luaD_stack.stack; i>=0; i--) | 414 | for (i = (L->stack.top-1)-L->stack.stack; i>=0; i--) |
| 410 | if (luaD_stack.stack[i].ttype == LUA_T_MARK) | 415 | if (L->stack.stack[i].ttype == LUA_T_MARK) |
| 411 | if (level-- == 0) | 416 | if (level-- == 0) |
| 412 | return Ref(luaD_stack.stack+i); | 417 | return Ref(L->stack.stack+i); |
| 413 | return LUA_NOOBJECT; | 418 | return LUA_NOOBJECT; |
| 414 | } | 419 | } |
| 415 | 420 | ||
| @@ -417,7 +422,7 @@ lua_Function lua_stackedfunction (int level) | |||
| 417 | int lua_currentline (lua_Function func) | 422 | int lua_currentline (lua_Function func) |
| 418 | { | 423 | { |
| 419 | TObject *f = Address(func); | 424 | TObject *f = Address(func); |
| 420 | return (f+1 < luaD_stack.top && (f+1)->ttype == LUA_T_LINE) ? (f+1)->value.i : -1; | 425 | return (f+1 < L->stack.top && (f+1)->ttype == LUA_T_LINE) ? (f+1)->value.i : -1; |
| 421 | } | 426 | } |
| 422 | 427 | ||
| 423 | 428 | ||
| @@ -447,11 +452,11 @@ int lua_setlocal (lua_Function func, int local_number) | |||
| 447 | TProtoFunc *fp = protovalue(f)->value.tf; | 452 | TProtoFunc *fp = protovalue(f)->value.tf; |
| 448 | char *name = luaF_getlocalname(fp, local_number, lua_currentline(func)); | 453 | char *name = luaF_getlocalname(fp, local_number, lua_currentline(func)); |
| 449 | checkCparams(1); | 454 | checkCparams(1); |
| 450 | --luaD_stack.top; | 455 | --L->stack.top; |
| 451 | if (name) { | 456 | if (name) { |
| 452 | /* if "name", there must be a LUA_T_LINE */ | 457 | /* if "name", there must be a LUA_T_LINE */ |
| 453 | /* therefore, f+2 points to function base */ | 458 | /* therefore, f+2 points to function base */ |
| 454 | *((f+2)+(local_number-1)) = *luaD_stack.top; | 459 | *((f+2)+(local_number-1)) = *L->stack.top; |
| 455 | return 1; | 460 | return 1; |
| 456 | } | 461 | } |
| 457 | else | 462 | else |
| @@ -478,19 +483,18 @@ void lua_funcinfo (lua_Object func, char **filename, int *linedefined) | |||
| 478 | } | 483 | } |
| 479 | 484 | ||
| 480 | 485 | ||
| 481 | static TObject *functofind; | ||
| 482 | static int checkfunc (TObject *o) | 486 | static int checkfunc (TObject *o) |
| 483 | { | 487 | { |
| 484 | return (o->ttype == LUA_T_FUNCTION) && | 488 | return (o->ttype == LUA_T_FUNCTION) && |
| 485 | ((functofind->ttype == LUA_T_FUNCTION) || | 489 | ((L->functofind->ttype == LUA_T_FUNCTION) || |
| 486 | (functofind->ttype == LUA_T_MARK)) && | 490 | (L->functofind->ttype == LUA_T_MARK)) && |
| 487 | (functofind->value.cl == o->value.cl); | 491 | (L->functofind->value.cl == o->value.cl); |
| 488 | } | 492 | } |
| 489 | 493 | ||
| 490 | 494 | ||
| 491 | char *lua_getobjname (lua_Object o, char **name) | 495 | char *lua_getobjname (lua_Object o, char **name) |
| 492 | { /* try to find a name for given function */ | 496 | { /* try to find a name for given function */ |
| 493 | functofind = Address(o); | 497 | L->functofind = Address(o); |
| 494 | if ((*name = luaT_travtagmethods(checkfunc)) != NULL) | 498 | if ((*name = luaT_travtagmethods(checkfunc)) != NULL) |
| 495 | return "tag-method"; | 499 | return "tag-method"; |
| 496 | else if ((*name = luaS_travsymbol(checkfunc)) != NULL) | 500 | else if ((*name = luaS_travsymbol(checkfunc)) != NULL) |
| @@ -504,36 +508,30 @@ char *lua_getobjname (lua_Object o, char **name) | |||
| 504 | ** ======================================================= | 508 | ** ======================================================= |
| 505 | */ | 509 | */ |
| 506 | 510 | ||
| 507 | #define MAX_C_BLOCKS 10 | ||
| 508 | |||
| 509 | static int numCblocks = 0; | ||
| 510 | static struct C_Lua_Stack Cblocks[MAX_C_BLOCKS]; | ||
| 511 | 511 | ||
| 512 | void lua_beginblock (void) | 512 | void lua_beginblock (void) |
| 513 | { | 513 | { |
| 514 | if (numCblocks >= MAX_C_BLOCKS) | 514 | if (L->numCblocks >= MAX_C_BLOCKS) |
| 515 | lua_error("`lua_beginblock': too many nested blocks"); | 515 | lua_error("`lua_beginblock': too many nested blocks"); |
| 516 | Cblocks[numCblocks] = luaD_Cstack; | 516 | L->Cblocks[L->numCblocks] = L->Cstack; |
| 517 | numCblocks++; | 517 | L->numCblocks++; |
| 518 | } | 518 | } |
| 519 | 519 | ||
| 520 | void lua_endblock (void) | 520 | void lua_endblock (void) |
| 521 | { | 521 | { |
| 522 | --numCblocks; | 522 | --L->numCblocks; |
| 523 | luaD_Cstack = Cblocks[numCblocks]; | 523 | L->Cstack = L->Cblocks[L->numCblocks]; |
| 524 | luaD_adjusttop(luaD_Cstack.base); | 524 | luaD_adjusttop(L->Cstack.base); |
| 525 | } | 525 | } |
| 526 | 526 | ||
| 527 | 527 | ||
| 528 | 528 | ||
| 529 | |||
| 530 | |||
| 531 | int lua_ref (int lock) | 529 | int lua_ref (int lock) |
| 532 | { | 530 | { |
| 533 | int ref; | 531 | int ref; |
| 534 | checkCparams(1); | 532 | checkCparams(1); |
| 535 | ref = luaC_ref(luaD_stack.top-1, lock); | 533 | ref = luaC_ref(L->stack.top-1, lock); |
| 536 | luaD_stack.top--; | 534 | L->stack.top--; |
| 537 | return ref; | 535 | return ref; |
| 538 | } | 536 | } |
| 539 | 537 | ||
| @@ -546,19 +544,6 @@ lua_Object lua_getref (int ref) | |||
| 546 | } | 544 | } |
| 547 | 545 | ||
| 548 | 546 | ||
| 549 | void lua_open (void) | ||
| 550 | { | ||
| 551 | static int firsttime = 1; | ||
| 552 | if (!firsttime) return; | ||
| 553 | firsttime = 0; | ||
| 554 | luaS_init(); | ||
| 555 | luaX_init(); | ||
| 556 | luaT_init(); | ||
| 557 | luaD_init(); | ||
| 558 | luaB_predefine(); | ||
| 559 | } | ||
| 560 | |||
| 561 | |||
| 562 | 547 | ||
| 563 | #if LUA_COMPAT2_5 | 548 | #if LUA_COMPAT2_5 |
| 564 | /* | 549 | /* |
| @@ -567,11 +552,11 @@ void lua_open (void) | |||
| 567 | 552 | ||
| 568 | static void do_unprotectedrun (lua_CFunction f, int nParams, int nResults) | 553 | static void do_unprotectedrun (lua_CFunction f, int nParams, int nResults) |
| 569 | { | 554 | { |
| 570 | StkId base = (luaD_stack.top-luaD_stack.stack)-nParams; | 555 | StkId base = (L->stack.top-L->stack.stack)-nParams; |
| 571 | luaD_openstack(nParams); | 556 | luaD_openstack(nParams); |
| 572 | luaD_stack.stack[base].ttype = LUA_T_CPROTO; | 557 | L->stack.stack[base].ttype = LUA_T_CPROTO; |
| 573 | luaD_stack.stack[base].value.f = f; | 558 | L->stack.stack[base].value.f = f; |
| 574 | luaF_simpleclosure(luaD_stack.stack+base); | 559 | luaF_simpleclosure(L->stack.stack+base); |
| 575 | luaD_call(base+1, nResults); | 560 | luaD_call(base+1, nResults); |
| 576 | } | 561 | } |
| 577 | 562 | ||
