[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: comparing C functions using lua_rawequal
- From: brian segall <faulkbabo@...>
- Date: Fri, 13 Jul 2007 02:47:57 +0000
I'm trying to determine whether a lua value is a C function, but it's not working. I have boiled down the problem to this:
 
    int cfunc(lua_State* L)
    { return 0; }
 
    lua_pushcfunction(L, cfunc);
    lua_pushcfunction(L, cfunc);
    int ret = lua_rawequal(L, -1, -2);
    // ret == 0
 
It seems as though lua was not intended to compare C functions, since stepping into lua_rawequal reveals that LUA_TFUNCTION is given the default treatment:
 
    default:
      lua_assert(iscollectable(t1));
      return gcvalue(t1) == gcvalue(t2);
 
I looked inside t1 and t2 and found where the C function's addresses are stored, and added the following lines:
 
    case LUA_TFUNCTION:
      return t1->value.gc->cl.c.f == t2->value.gc->cl.c.f;
 
Modifying lua code is obviously not something I want to be doing, so I would like to know if there's a better way.
 
Thank you
Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy! Try it!