summaryrefslogtreecommitdiff
path: root/src/ltm.c
diff options
context:
space:
mode:
authorLua Team <team@lua.org>2004-03-24 12:00:00 +0000
committerrepogen <>2004-03-24 12:00:00 +0000
commitced7bbbe7a257ce6de94069d5dbf6672aeafd4d9 (patch)
tree2a01a79e6a4f451dccd247c70310ad957204cefa /src/ltm.c
parente7731a8fb8a317aa5c444ef073bfad82fa5baa54 (diff)
downloadlua-github-5.1-work0.tar.gz
Lua 5.1-work05.1-work0
Diffstat (limited to 'src/ltm.c')
-rw-r--r--src/ltm.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/ltm.c b/src/ltm.c
index 1b3e515e..de4bb7af 100644
--- a/src/ltm.c
+++ b/src/ltm.c
@@ -1,5 +1,5 @@
/*
-** $Id: ltm.c,v 1.106 2003/04/03 13:35:34 roberto Exp $
+** $Id: ltm.c,v 2.2 2004/02/16 19:09:52 roberto Exp $
** Tag methods
** See Copyright Notice in lua.h
*/
@@ -21,7 +21,8 @@
const char *const luaT_typenames[] = {
"nil", "boolean", "userdata", "number",
- "string", "table", "function", "userdata", "thread"
+ "string", "table", "function", "userdata", "thread",
+ "proto", "upval"
};
@@ -45,8 +46,8 @@ void luaT_init (lua_State *L) {
** function to be used with macro "fasttm": optimized for absence of
** tag methods
*/
-const TObject *luaT_gettm (Table *events, TMS event, TString *ename) {
- const TObject *tm = luaH_getstr(events, ename);
+const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
+ const TValue *tm = luaH_getstr(events, ename);
lua_assert(event <= TM_EQ);
if (ttisnil(tm)) { /* no tag method? */
events->flags |= cast(lu_byte, 1u<<event); /* cache this fact */
@@ -56,15 +57,18 @@ const TObject *luaT_gettm (Table *events, TMS event, TString *ename) {
}
-const TObject *luaT_gettmbyobj (lua_State *L, const TObject *o, TMS event) {
- TString *ename = G(L)->tmname[event];
+const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
+ Table *mt;
switch (ttype(o)) {
case LUA_TTABLE:
- return luaH_getstr(hvalue(o)->metatable, ename);
+ mt = hvalue(o)->metatable;
+ break;
case LUA_TUSERDATA:
- return luaH_getstr(uvalue(o)->uv.metatable, ename);
+ mt = uvalue(o)->metatable;
+ break;
default:
- return &luaO_nilobject;
+ mt = NULL;
}
+ return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : &luaO_nilobject);
}