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 | ||