diff options
Diffstat (limited to 'lapi.c')
| -rw-r--r-- | lapi.c | 32 |
1 files changed, 5 insertions, 27 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 1.67 1999/12/30 18:27:03 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 1.68 2000/01/13 15:56:03 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 | */ |
| @@ -30,29 +30,12 @@ const char lua_ident[] = "$Lua: " LUA_VERSION " " LUA_COPYRIGHT " $\n" | |||
| 30 | 30 | ||
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | const lua_Type luaA_normtype[] = { /* ORDER LUA_T */ | ||
| 34 | LUA_T_USERDATA, LUA_T_NUMBER, LUA_T_STRING, LUA_T_ARRAY, | ||
| 35 | LUA_T_LPROTO, LUA_T_CPROTO, LUA_T_NIL, | ||
| 36 | LUA_T_LCLOSURE, LUA_T_CCLOSURE, | ||
| 37 | LUA_T_LCLOSURE, LUA_T_CCLOSURE, /* LUA_T_LCLMARK, LUA_T_CCLMARK */ | ||
| 38 | LUA_T_LPROTO, LUA_T_CPROTO /* LUA_T_LMARK, LUA_T_CMARK */ | ||
| 39 | }; | ||
| 40 | |||
| 41 | |||
| 42 | void luaA_setnormalized (TObject *d, const TObject *s) { | ||
| 43 | d->value = s->value; | ||
| 44 | d->ttype = luaA_normalizedtype(s); | ||
| 45 | } | ||
| 46 | |||
| 47 | 33 | ||
| 48 | const TObject *luaA_protovalue (const TObject *o) { | 34 | const TObject *luaA_protovalue (const TObject *o) { |
| 49 | switch (luaA_normalizedtype(o)) { | 35 | switch (ttype(o)) { |
| 50 | case LUA_T_CCLOSURE: case LUA_T_LCLOSURE: | 36 | case LUA_T_CCLOSURE: case LUA_T_LCLOSURE: |
| 51 | return protovalue(o); | 37 | return protovalue(o); |
| 52 | default: | 38 | default: |
| 53 | LUA_ASSERT(L, luaA_normalizedtype(o) == LUA_T_LPROTO || | ||
| 54 | luaA_normalizedtype(o) == LUA_T_CPROTO, | ||
| 55 | "invalid `function'"); | ||
| 56 | return o; | 39 | return o; |
| 57 | } | 40 | } |
| 58 | } | 41 | } |
| @@ -107,7 +90,7 @@ int lua_callfunction (lua_State *L, lua_Object function) { | |||
| 107 | return 1; | 90 | return 1; |
| 108 | else { | 91 | else { |
| 109 | luaD_openstack(L, L->Cstack.base); | 92 | luaD_openstack(L, L->Cstack.base); |
| 110 | luaA_setnormalized(L->Cstack.base, function); | 93 | *L->Cstack.base = *function; |
| 111 | return luaD_protectedrun(L); | 94 | return luaD_protectedrun(L); |
| 112 | } | 95 | } |
| 113 | } | 96 | } |
| @@ -248,12 +231,7 @@ int lua_equal(lua_State *L, lua_Object o1, lua_Object o2) { | |||
| 248 | UNUSED(L); | 231 | UNUSED(L); |
| 249 | if (o1 == LUA_NOOBJECT || o2 == LUA_NOOBJECT) | 232 | if (o1 == LUA_NOOBJECT || o2 == LUA_NOOBJECT) |
| 250 | return (o1 == o2); | 233 | return (o1 == o2); |
| 251 | else { | 234 | else return luaO_equalObj(o1, o2); |
| 252 | TObject obj1, obj2; | ||
| 253 | luaA_setnormalized(&obj1, o1); | ||
| 254 | luaA_setnormalized(&obj2, o2); | ||
| 255 | return luaO_equalObj(&obj1, &obj2); | ||
| 256 | } | ||
| 257 | } | 235 | } |
| 258 | 236 | ||
| 259 | 237 | ||
| @@ -344,7 +322,7 @@ void luaA_pushobject (lua_State *L, const TObject *o) { | |||
| 344 | void lua_pushobject (lua_State *L, lua_Object o) { | 322 | void lua_pushobject (lua_State *L, lua_Object o) { |
| 345 | if (o == LUA_NOOBJECT) | 323 | if (o == LUA_NOOBJECT) |
| 346 | lua_error(L, "API error - attempt to push a NOOBJECT"); | 324 | lua_error(L, "API error - attempt to push a NOOBJECT"); |
| 347 | luaA_setnormalized(L->top, o); | 325 | *L->top = *o; |
| 348 | incr_top; | 326 | incr_top; |
| 349 | } | 327 | } |
| 350 | 328 | ||
