diff options
| -rw-r--r-- | lapi.c | 26 | ||||
| -rw-r--r-- | ltests.c | 9 | ||||
| -rw-r--r-- | lvm.c | 138 | ||||
| -rw-r--r-- | lvm.h | 10 |
4 files changed, 95 insertions, 88 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 1.122 2001/01/29 17:16:58 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 1.123 2001/02/01 13:56:49 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 | */ |
| @@ -353,23 +353,18 @@ LUA_API void lua_pushusertag (lua_State *L, void *u, int tag) { | |||
| 353 | 353 | ||
| 354 | 354 | ||
| 355 | LUA_API void lua_getglobal (lua_State *L, const char *name) { | 355 | LUA_API void lua_getglobal (lua_State *L, const char *name) { |
| 356 | StkId top; | ||
| 357 | LUA_LOCK; | 356 | LUA_LOCK; |
| 358 | top = L->top; | 357 | luaV_getglobal(L, luaS_new(L, name), L->top); |
| 359 | setobj(top, luaV_getglobal(L, luaS_new(L, name))); | ||
| 360 | L->top = top; | ||
| 361 | api_incr_top(L); | 358 | api_incr_top(L); |
| 362 | LUA_UNLOCK; | 359 | LUA_UNLOCK; |
| 363 | } | 360 | } |
| 364 | 361 | ||
| 365 | 362 | ||
| 366 | LUA_API void lua_gettable (lua_State *L, int index) { | 363 | LUA_API void lua_gettable (lua_State *L, int index) { |
| 367 | StkId t, top; | 364 | StkId t; |
| 368 | LUA_LOCK; | 365 | LUA_LOCK; |
| 369 | t = Index(L, index); | 366 | t = Index(L, index); |
| 370 | top = L->top; | 367 | luaV_gettable(L, t, L->top, L->top-1); |
| 371 | setobj(top-1, luaV_gettable(L, t)); | ||
| 372 | L->top = top; /* tag method may change top */ | ||
| 373 | LUA_UNLOCK; | 368 | LUA_UNLOCK; |
| 374 | } | 369 | } |
| 375 | 370 | ||
| @@ -437,22 +432,19 @@ LUA_API void lua_newtable (lua_State *L) { | |||
| 437 | 432 | ||
| 438 | 433 | ||
| 439 | LUA_API void lua_setglobal (lua_State *L, const char *name) { | 434 | LUA_API void lua_setglobal (lua_State *L, const char *name) { |
| 440 | StkId top; | ||
| 441 | LUA_LOCK; | 435 | LUA_LOCK; |
| 442 | top = L->top; | 436 | luaV_setglobal(L, luaS_new(L, name), L->top); |
| 443 | luaV_setglobal(L, luaS_new(L, name)); | 437 | L->top--; /* remove element from the top */ |
| 444 | L->top = top-1; /* remove element from the top */ | ||
| 445 | LUA_UNLOCK; | 438 | LUA_UNLOCK; |
| 446 | } | 439 | } |
| 447 | 440 | ||
| 448 | 441 | ||
| 449 | LUA_API void lua_settable (lua_State *L, int index) { | 442 | LUA_API void lua_settable (lua_State *L, int index) { |
| 450 | StkId t, top; | 443 | StkId t; |
| 451 | LUA_LOCK; | 444 | LUA_LOCK; |
| 452 | t = Index(L, index); | 445 | t = Index(L, index); |
| 453 | top = L->top; | 446 | luaV_settable(L, t, L->top - 2, L->top); |
| 454 | luaV_settable(L, t, top-2); | 447 | L->top -= 2; /* pop index and value */ |
| 455 | L->top = top-2; /* pop index and value */ | ||
| 456 | LUA_UNLOCK; | 448 | LUA_UNLOCK; |
| 457 | } | 449 | } |
| 458 | 450 | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ltests.c,v 1.59 2001/01/22 18:01:38 roberto Exp roberto $ | 2 | ** $Id: ltests.c,v 1.60 2001/01/29 17:16:58 roberto Exp roberto $ |
| 3 | ** Internal Module for Debugging of the Lua Implementation | 3 | ** Internal Module for Debugging of the Lua Implementation |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -484,6 +484,13 @@ static int testC (lua_State *L) { | |||
| 484 | else if EQ("concat") { | 484 | else if EQ("concat") { |
| 485 | lua_concat(L, getnum); | 485 | lua_concat(L, getnum); |
| 486 | } | 486 | } |
| 487 | else if EQ("lessthan") { | ||
| 488 | int a = getnum; | ||
| 489 | if (lua_lessthan(L, a, getnum)) | ||
| 490 | lua_pushnumber(L, 1); | ||
| 491 | else | ||
| 492 | lua_pushnil(L); | ||
| 493 | } | ||
| 487 | else if EQ("rawcall") { | 494 | else if EQ("rawcall") { |
| 488 | int narg = getnum; | 495 | int narg = getnum; |
| 489 | int nres = getnum; | 496 | int nres = getnum; |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lvm.c,v 1.160 2001/01/29 15:26:40 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.161 2001/01/29 17:16:58 roberto Exp roberto $ |
| 3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -111,36 +111,38 @@ void luaV_Lclosure (lua_State *L, Proto *l, int nelems) { | |||
| 111 | 111 | ||
| 112 | /* | 112 | /* |
| 113 | ** Function to index a table. | 113 | ** Function to index a table. |
| 114 | ** Receives the table at `t' and the key at top. | 114 | ** Receives the table at `t' and the key at the top (`top'-1), |
| 115 | ** leaves the result at `res'. | ||
| 115 | */ | 116 | */ |
| 116 | const TObject *luaV_gettable (lua_State *L, StkId t) { | 117 | void luaV_gettable (lua_State *L, StkId t, StkId top, StkId res) { |
| 117 | Closure *tm; | 118 | Closure *tm; |
| 118 | int tg; | 119 | int tg; |
| 119 | if (ttype(t) == LUA_TTABLE && /* `t' is a table? */ | 120 | if (ttype(t) == LUA_TTABLE && /* `t' is a table? */ |
| 120 | ((tg = hvalue(t)->htag) == LUA_TTABLE || /* with default tag? */ | 121 | ((tg = hvalue(t)->htag) == LUA_TTABLE || /* with default tag? */ |
| 121 | luaT_gettm(G(L), tg, TM_GETTABLE) == NULL)) { /* or no TM? */ | 122 | luaT_gettm(G(L), tg, TM_GETTABLE) == NULL)) { /* or no TM? */ |
| 122 | /* do a primitive get */ | 123 | /* do a primitive get */ |
| 123 | const TObject *h = luaH_get(hvalue(t), L->top-1); | 124 | const TObject *h = luaH_get(hvalue(t), top-1); |
| 124 | /* result is no nil or there is no `index' tag method? */ | 125 | /* result is no nil or there is no `index' tag method? */ |
| 125 | if (ttype(h) != LUA_TNIL || ((tm=luaT_gettm(G(L), tg, TM_INDEX)) == NULL)) | 126 | if (ttype(h) != LUA_TNIL || ((tm=luaT_gettm(G(L), tg, TM_INDEX)) == NULL)) { |
| 126 | return h; /* return result */ | 127 | setobj(res, h); |
| 128 | return; | ||
| 129 | } | ||
| 127 | /* else call `index' tag method */ | 130 | /* else call `index' tag method */ |
| 128 | } | 131 | } |
| 129 | else { /* try a `gettable' tag method */ | 132 | else { /* try a `gettable' tag method */ |
| 130 | tm = luaT_gettmbyObj(G(L), t, TM_GETTABLE); | 133 | tm = luaT_gettmbyObj(G(L), t, TM_GETTABLE); |
| 131 | } | 134 | } |
| 132 | if (tm != NULL) { /* is there a tag method? */ | 135 | L->top = top; |
| 133 | luaD_checkstack(L, 2); | 136 | if (tm == NULL) /* no tag method? */ |
| 134 | setobj(L->top+1, L->top-1); /* key */ | ||
| 135 | setobj(L->top, t); /* table */ | ||
| 136 | setclvalue(L->top-1, tm); /* tag method */ | ||
| 137 | L->top += 2; | ||
| 138 | luaD_call(L, L->top - 3, 1); | ||
| 139 | return L->top - 1; /* call result */ | ||
| 140 | } | ||
| 141 | else { /* no tag method */ | ||
| 142 | luaG_typeerror(L, t, "index"); | 137 | luaG_typeerror(L, t, "index"); |
| 143 | return NULL; /* to avoid warnings */ | 138 | else { /* call tag method */ |
| 139 | luaD_checkstack(L, 2); | ||
| 140 | setobj(res+2, top-1); /* key */ | ||
| 141 | setobj(res+1, t); /* table */ | ||
| 142 | setclvalue(res, tm); /* tag method */ | ||
| 143 | L->top = res+3; | ||
| 144 | luaD_call(L, res, 1); | ||
| 145 | L->top = top; /* will be decremented by the callee */ | ||
| 144 | } | 146 | } |
| 145 | } | 147 | } |
| 146 | 148 | ||
| @@ -148,63 +150,72 @@ const TObject *luaV_gettable (lua_State *L, StkId t) { | |||
| 148 | /* | 150 | /* |
| 149 | ** Receives table at `t', key at `key' and value at top. | 151 | ** Receives table at `t', key at `key' and value at top. |
| 150 | */ | 152 | */ |
| 151 | void luaV_settable (lua_State *L, StkId t, StkId key) { | 153 | void luaV_settable (lua_State *L, StkId t, StkId key, StkId top) { |
| 152 | int tg; | 154 | int tg; |
| 153 | if (ttype(t) == LUA_TTABLE && /* `t' is a table? */ | 155 | if (ttype(t) == LUA_TTABLE && /* `t' is a table? */ |
| 154 | ((tg = hvalue(t)->htag) == LUA_TTABLE || /* with default tag? */ | 156 | ((tg = hvalue(t)->htag) == LUA_TTABLE || /* with default tag? */ |
| 155 | luaT_gettm(G(L), tg, TM_SETTABLE) == NULL)) { /* or no TM? */ | 157 | luaT_gettm(G(L), tg, TM_SETTABLE) == NULL)) { /* or no TM? */ |
| 156 | setobj(luaH_set(L, hvalue(t), key), L->top-1); /* do a primitive set */ | 158 | setobj(luaH_set(L, hvalue(t), key), top-1); /* do a primitive set */ |
| 157 | } | 159 | } |
| 158 | else { /* try a `settable' tag method */ | 160 | else { /* try a `settable' tag method */ |
| 159 | Closure *tm = luaT_gettmbyObj(G(L), t, TM_SETTABLE); | 161 | Closure *tm = luaT_gettmbyObj(G(L), t, TM_SETTABLE); |
| 160 | if (tm != NULL) { | 162 | L->top = top; |
| 163 | if (tm == NULL) /* no tag method? */ | ||
| 164 | luaG_typeerror(L, t, "index"); | ||
| 165 | else { | ||
| 161 | luaD_checkstack(L, 3); | 166 | luaD_checkstack(L, 3); |
| 162 | setobj(L->top+2, L->top-1); | 167 | setobj(top+2, top-1); |
| 163 | setobj(L->top+1, key); | 168 | setobj(top+1, key); |
| 164 | setobj(L->top, t); | 169 | setobj(top, t); |
| 165 | setclvalue(L->top-1, tm); | 170 | setclvalue(top-1, tm); |
| 166 | L->top += 3; | 171 | L->top = top+3; |
| 167 | luaD_call(L, L->top - 4, 0); /* call `settable' tag method */ | 172 | luaD_call(L, top-1, 0); /* call `settable' tag method */ |
| 173 | lua_assert(L->top == top-1); | ||
| 174 | L->top = top; /* will be decremented by the callee */ | ||
| 168 | } | 175 | } |
| 169 | else /* no tag method... */ | ||
| 170 | luaG_typeerror(L, t, "index"); | ||
| 171 | } | 176 | } |
| 172 | } | 177 | } |
| 173 | 178 | ||
| 174 | 179 | ||
| 175 | const TObject *luaV_getglobal (lua_State *L, TString *s) { | 180 | void luaV_getglobal (lua_State *L, TString *s, StkId top) { |
| 176 | const TObject *value = luaH_getstr(L->gt, s); | 181 | const TObject *value = luaH_getstr(L->gt, s); |
| 177 | Closure *tm; | 182 | Closure *tm; |
| 178 | if (!HAS_TM_GETGLOBAL(L, ttype(value)) || /* is there a tag method? */ | 183 | if (!HAS_TM_GETGLOBAL(L, ttype(value)) || /* is there a tag method? */ |
| 179 | (tm = luaT_gettmbyObj(G(L), value, TM_GETGLOBAL)) == NULL) | 184 | (tm = luaT_gettmbyObj(G(L), value, TM_GETGLOBAL)) == NULL) { |
| 180 | return value; /* default behavior */ | 185 | setobj(top, value); /* default behavior */ |
| 181 | else { /* tag method */ | 186 | } |
| 187 | else { /* call tag method */ | ||
| 188 | L->top = top; | ||
| 182 | luaD_checkstack(L, 3); | 189 | luaD_checkstack(L, 3); |
| 183 | setclvalue(L->top, tm); | 190 | setclvalue(top, tm); |
| 184 | setsvalue(L->top+1, s); /* global name */ | 191 | setsvalue(top+1, s); /* global name */ |
| 185 | setobj(L->top+2, value); | 192 | setobj(top+2, value); |
| 186 | L->top += 3; | 193 | L->top = top+3; |
| 187 | luaD_call(L, L->top - 3, 1); | 194 | luaD_call(L, top, 1); |
| 188 | return L->top - 1; | 195 | lua_assert(L->top == top+1); |
| 196 | L->top = top; /* will be incremented by the callee */ | ||
| 189 | } | 197 | } |
| 190 | } | 198 | } |
| 191 | 199 | ||
| 192 | 200 | ||
| 193 | void luaV_setglobal (lua_State *L, TString *s) { | 201 | void luaV_setglobal (lua_State *L, TString *s, StkId top) { |
| 194 | TObject *oldvalue = luaH_setstr(L, L->gt, s); | 202 | TObject *oldvalue = luaH_setstr(L, L->gt, s); |
| 195 | Closure *tm; | 203 | Closure *tm; |
| 196 | if (!HAS_TM_SETGLOBAL(L, ttype(oldvalue)) || /* no tag methods? */ | 204 | if (!HAS_TM_SETGLOBAL(L, ttype(oldvalue)) || /* no tag methods? */ |
| 197 | (tm = luaT_gettmbyObj(G(L), oldvalue, TM_SETGLOBAL)) == NULL) { | 205 | (tm = luaT_gettmbyObj(G(L), oldvalue, TM_SETGLOBAL)) == NULL) { |
| 198 | setobj(oldvalue, L->top - 1); /* raw set */ | 206 | setobj(oldvalue, top-1); /* raw set */ |
| 199 | } | 207 | } |
| 200 | else { /* call tag method */ | 208 | else { /* call tag method */ |
| 209 | L->top = top; | ||
| 201 | luaD_checkstack(L, 3); | 210 | luaD_checkstack(L, 3); |
| 202 | setobj(L->top+2, L->top-1); /* new value */ | 211 | setobj(top+2, top-1); /* new value */ |
| 203 | setobj(L->top+1, oldvalue); /* old value */ | 212 | setobj(top+1, oldvalue); /* old value */ |
| 204 | setsvalue(L->top, s); /* var name */ | 213 | setsvalue(top, s); /* var name */ |
| 205 | setclvalue(L->top-1, tm); /* tag method */ | 214 | setclvalue(top-1, tm); /* tag method */ |
| 206 | L->top += 3; | 215 | L->top = top+3; |
| 207 | luaD_call(L, L->top - 4, 0); | 216 | luaD_call(L, top-1, 0); |
| 217 | lua_assert(L->top == top-1); | ||
| 218 | L->top = top; /* will be decremented by the callee */ | ||
| 208 | } | 219 | } |
| 209 | } | 220 | } |
| 210 | 221 | ||
| @@ -262,11 +273,12 @@ int luaV_lessthan (lua_State *L, const TObject *l, const TObject *r, StkId top) | |||
| 262 | else if (ttype(l) == LUA_TSTRING && ttype(r) == LUA_TSTRING) | 273 | else if (ttype(l) == LUA_TSTRING && ttype(r) == LUA_TSTRING) |
| 263 | return luaV_strlessthan(tsvalue(l), tsvalue(r)); | 274 | return luaV_strlessthan(tsvalue(l), tsvalue(r)); |
| 264 | else { /* call TM */ | 275 | else { /* call TM */ |
| 276 | L->top = top; | ||
| 265 | luaD_checkstack(L, 2); | 277 | luaD_checkstack(L, 2); |
| 266 | setobj(top++, l); | 278 | setobj(top++, l); |
| 267 | setobj(top++, r); | 279 | setobj(top++, r); |
| 268 | if (!call_binTM(L, top, TM_LT)) | 280 | if (!call_binTM(L, top, TM_LT)) |
| 269 | luaG_ordererror(L, top-2); | 281 | luaG_ordererror(L, top); |
| 270 | L->top--; | 282 | L->top--; |
| 271 | return (ttype(L->top) != LUA_TNIL); | 283 | return (ttype(L->top) != LUA_TNIL); |
| 272 | } | 284 | } |
| @@ -413,34 +425,31 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 413 | break; | 425 | break; |
| 414 | } | 426 | } |
| 415 | case OP_GETGLOBAL: { | 427 | case OP_GETGLOBAL: { |
| 416 | L->top = top; | 428 | luaV_getglobal(L, kstr[GETARG_U(i)], top); |
| 417 | setobj(top++, luaV_getglobal(L, kstr[GETARG_U(i)])); | 429 | top++; |
| 418 | break; | 430 | break; |
| 419 | } | 431 | } |
| 420 | case OP_GETTABLE: { | 432 | case OP_GETTABLE: { |
| 421 | L->top = top; | 433 | luaV_gettable(L, top-2, top, top-2); |
| 422 | top--; | 434 | top--; |
| 423 | setobj(top-1, luaV_gettable(L, top-1)); | ||
| 424 | break; | 435 | break; |
| 425 | } | 436 | } |
| 426 | case OP_GETDOTTED: { | 437 | case OP_GETDOTTED: { |
| 427 | setsvalue(top, kstr[GETARG_U(i)]); | 438 | setsvalue(top, kstr[GETARG_U(i)]); |
| 428 | L->top = top+1; | 439 | luaV_gettable(L, top-1, top+1, top-1); |
| 429 | setobj(top-1, luaV_gettable(L, top-1)); | ||
| 430 | break; | 440 | break; |
| 431 | } | 441 | } |
| 432 | case OP_GETINDEXED: { | 442 | case OP_GETINDEXED: { |
| 433 | setobj(top, base+GETARG_U(i)); | 443 | setobj(top, base+GETARG_U(i)); |
| 434 | L->top = top+1; | 444 | luaV_gettable(L, top-1, top+1, top-1); |
| 435 | setobj(top-1, luaV_gettable(L, top-1)); | ||
| 436 | break; | 445 | break; |
| 437 | } | 446 | } |
| 438 | case OP_PUSHSELF: { | 447 | case OP_PUSHSELF: { |
| 439 | TObject receiver; | 448 | TObject receiver; |
| 440 | setobj(&receiver, top-1); | 449 | setobj(&receiver, top-1); |
| 441 | setsvalue(top, kstr[GETARG_U(i)]); | 450 | setsvalue(top, kstr[GETARG_U(i)]); |
| 442 | L->top = ++top; | 451 | top++; |
| 443 | setobj(top-2, luaV_gettable(L, top-2)); | 452 | luaV_gettable(L, top-2, top, top-2); |
| 444 | setobj(top-1, &receiver); | 453 | setobj(top-1, &receiver); |
| 445 | break; | 454 | break; |
| 446 | } | 455 | } |
| @@ -456,14 +465,13 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 456 | break; | 465 | break; |
| 457 | } | 466 | } |
| 458 | case OP_SETGLOBAL: { | 467 | case OP_SETGLOBAL: { |
| 459 | L->top = top--; | 468 | luaV_setglobal(L, kstr[GETARG_U(i)], top); |
| 460 | luaV_setglobal(L, kstr[GETARG_U(i)]); | 469 | top--; |
| 461 | break; | 470 | break; |
| 462 | } | 471 | } |
| 463 | case OP_SETTABLE: { | 472 | case OP_SETTABLE: { |
| 464 | StkId t = top-GETARG_A(i); | 473 | StkId t = top-GETARG_A(i); |
| 465 | L->top = top; | 474 | luaV_settable(L, t, t+1, top); |
| 466 | luaV_settable(L, t, t+1); | ||
| 467 | top -= GETARG_B(i); /* pop values */ | 475 | top -= GETARG_B(i); /* pop values */ |
| 468 | break; | 476 | break; |
| 469 | } | 477 | } |
| @@ -471,7 +479,6 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 471 | int aux = GETARG_A(i) * LFIELDS_PER_FLUSH; | 479 | int aux = GETARG_A(i) * LFIELDS_PER_FLUSH; |
| 472 | int n = GETARG_B(i); | 480 | int n = GETARG_B(i); |
| 473 | Hash *arr = hvalue(top-n-1); | 481 | Hash *arr = hvalue(top-n-1); |
| 474 | L->top = top-n; /* final value of `top' (in case of errors) */ | ||
| 475 | for (; n; n--) | 482 | for (; n; n--) |
| 476 | setobj(luaH_setnum(L, arr, n+aux), --top); | 483 | setobj(luaH_setnum(L, arr, n+aux), --top); |
| 477 | break; | 484 | break; |
| @@ -480,7 +487,6 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 480 | int n = GETARG_U(i); | 487 | int n = GETARG_U(i); |
| 481 | StkId finaltop = top-2*n; | 488 | StkId finaltop = top-2*n; |
| 482 | Hash *arr = hvalue(finaltop-1); | 489 | Hash *arr = hvalue(finaltop-1); |
| 483 | L->top = finaltop; /* final value of `top' (in case of errors) */ | ||
| 484 | for (; n; n--) { | 490 | for (; n; n--) { |
| 485 | top-=2; | 491 | top-=2; |
| 486 | setobj(luaH_set(L, arr, top), top+1); | 492 | setobj(luaH_set(L, arr, top), top+1); |
| @@ -669,9 +675,11 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 669 | break; | 675 | break; |
| 670 | } | 676 | } |
| 671 | case OP_CLOSURE: { | 677 | case OP_CLOSURE: { |
| 678 | int nup = GETARG_B(i); | ||
| 672 | L->top = top; | 679 | L->top = top; |
| 673 | luaV_Lclosure(L, tf->kproto[GETARG_A(i)], GETARG_B(i)); | 680 | luaV_Lclosure(L, tf->kproto[GETARG_A(i)], nup); |
| 674 | top = L->top; | 681 | top -= (nup-1); |
| 682 | lua_assert(top == L->top); | ||
| 675 | luaC_checkGC(L); | 683 | luaC_checkGC(L); |
| 676 | break; | 684 | break; |
| 677 | } | 685 | } |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lvm.h,v 1.26 2000/09/05 19:33:32 roberto Exp roberto $ | 2 | ** $Id: lvm.h,v 1.27 2000/10/05 12:14:08 roberto Exp roberto $ |
| 3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -19,10 +19,10 @@ | |||
| 19 | 19 | ||
| 20 | int luaV_tonumber (TObject *obj); | 20 | int luaV_tonumber (TObject *obj); |
| 21 | int luaV_tostring (lua_State *L, TObject *obj); | 21 | int luaV_tostring (lua_State *L, TObject *obj); |
| 22 | const TObject *luaV_gettable (lua_State *L, StkId t); | 22 | void luaV_gettable (lua_State *L, StkId t, StkId top, StkId res); |
| 23 | void luaV_settable (lua_State *L, StkId t, StkId key); | 23 | void luaV_settable (lua_State *L, StkId t, StkId key, StkId top); |
| 24 | const TObject *luaV_getglobal (lua_State *L, TString *s); | 24 | void luaV_getglobal (lua_State *L, TString *s, StkId top); |
| 25 | void luaV_setglobal (lua_State *L, TString *s); | 25 | void luaV_setglobal (lua_State *L, TString *s, StkId top); |
| 26 | StkId luaV_execute (lua_State *L, const Closure *cl, StkId base); | 26 | StkId luaV_execute (lua_State *L, const Closure *cl, StkId base); |
| 27 | void luaV_Cclosure (lua_State *L, lua_CFunction c, int nelems); | 27 | void luaV_Cclosure (lua_State *L, lua_CFunction c, int nelems); |
| 28 | void luaV_Lclosure (lua_State *L, Proto *l, int nelems); | 28 | void luaV_Lclosure (lua_State *L, Proto *l, int nelems); |
