aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2003-04-07 11:36:08 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2003-04-07 11:36:08 -0300
commitd1df829f8dc62966f46525aca24227a3e05db1df (patch)
tree63ccbd2f515f7fd668e85cf42e40825d2d496a12
parent2ad947fe031aa739d98474eb933eede3659305ac (diff)
downloadlua-d1df829f8dc62966f46525aca24227a3e05db1df.tar.gz
lua-d1df829f8dc62966f46525aca24227a3e05db1df.tar.bz2
lua-d1df829f8dc62966f46525aca24227a3e05db1df.zip
lua_getmetatable must accept any acceptable index
-rw-r--r--lapi.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/lapi.c b/lapi.c
index b1a95b79..78a9dd3b 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 1.233 2003/03/14 18:59:21 roberto Exp roberto $ 2** $Id: lapi.c,v 1.234 2003/04/03 13:35:34 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*/
@@ -370,6 +370,7 @@ LUA_API const void *lua_topointer (lua_State *L, int idx) {
370 switch (ttype(o)) { 370 switch (ttype(o)) {
371 case LUA_TTABLE: return hvalue(o); 371 case LUA_TTABLE: return hvalue(o);
372 case LUA_TFUNCTION: return clvalue(o); 372 case LUA_TFUNCTION: return clvalue(o);
373 case LUA_TTHREAD: return thvalue(o);
373 case LUA_TUSERDATA: 374 case LUA_TUSERDATA:
374 case LUA_TLIGHTUSERDATA: 375 case LUA_TLIGHTUSERDATA:
375 return lua_touserdata(L, idx); 376 return lua_touserdata(L, idx);
@@ -520,22 +521,22 @@ LUA_API void lua_newtable (lua_State *L) {
520 521
521 522
522LUA_API int lua_getmetatable (lua_State *L, int objindex) { 523LUA_API int lua_getmetatable (lua_State *L, int objindex) {
523 StkId obj; 524 const TObject *obj;
524 Table *mt; 525 Table *mt = NULL;
525 int res; 526 int res;
526 lua_lock(L); 527 lua_lock(L);
527 obj = luaA_indexAcceptable(L, objindex); 528 obj = luaA_indexAcceptable(L, objindex);
528 switch (ttype(obj)) { 529 if (obj != NULL) {
529 case LUA_TTABLE: 530 switch (ttype(obj)) {
530 mt = hvalue(obj)->metatable; 531 case LUA_TTABLE:
531 break; 532 mt = hvalue(obj)->metatable;
532 case LUA_TUSERDATA: 533 break;
533 mt = uvalue(obj)->uv.metatable; 534 case LUA_TUSERDATA:
534 break; 535 mt = uvalue(obj)->uv.metatable;
535 default: 536 break;
536 mt = hvalue(defaultmeta(L)); 537 }
537 } 538 }
538 if (mt == hvalue(defaultmeta(L))) 539 if (mt == NULL || mt == hvalue(defaultmeta(L)))
539 res = 0; 540 res = 0;
540 else { 541 else {
541 sethvalue(L->top, mt); 542 sethvalue(L->top, mt);