1
0
mirror of https://github.com/elua/elua.git synced 2025-01-25 01:02:54 +08:00

fix handling of rotables in luarpc

This commit is contained in:
James Snyder 2012-09-05 16:16:19 -05:00
parent 030e8d7ef4
commit 402bc4c6c0

View File

@ -45,8 +45,10 @@ void *alloca(size_t);
// Support for Compiling with & without rotables // Support for Compiling with & without rotables
#ifdef LUA_OPTIMIZE_MEMORY #ifdef LUA_OPTIMIZE_MEMORY
#define LUA_ISCALLABLE( state, idx ) ( lua_isfunction( state, idx ) || lua_islightfunction( state, idx ) ) #define LUA_ISCALLABLE( state, idx ) ( lua_isfunction( state, idx ) || lua_islightfunction( state, idx ) )
#define LUA_ISATABLE( state, idx ) ( lua_istable( state, idx ) || lua_isrotable( state, idx ) )
#else #else
#define LUA_ISCALLABLE( state, idx ) lua_isfunction( state, idx ) #define LUA_ISCALLABLE( state, idx ) lua_isfunction( state, idx )
#define LUA_ISATABLE( state, idx ) lua_istable( state, idx )
#endif #endif
// Prototypes for Local Functions // Prototypes for Local Functions
@ -1232,16 +1234,16 @@ static void read_cmd_call( Transport *tpt, lua_State *L )
// @@@ also strtok is not thread safe // @@@ also strtok is not thread safe
token = strtok( funcname, "." ); token = strtok( funcname, "." );
lua_getglobal( L, token ); lua_getglobal( L, token );
if( LUA_ISCALLABLE( L, -1 ) || lua_istable( L, -1 ) ) // only continue if non-nil if( LUA_ISCALLABLE( L, -1 ) || LUA_ISATABLE( L, -1 ) ) // only continue if non-nil
{ {
token = strtok( NULL, "." ); token = strtok( NULL, "." );
// loop over remainder of string, leaving token with last value if // loop over remainder of string, leaving token with last value if
// indexing fails // indexing fails
while( token != NULL && ( LUA_ISCALLABLE( L, -1 ) || lua_istable( L, -1 ) ) ) while( token != NULL && ( LUA_ISCALLABLE( L, -1 ) || LUA_ISATABLE( L, -1 ) ) )
{ {
lua_getfield( L, -1, token ); lua_getfield( L, -1, token );
if ( LUA_ISCALLABLE( L, -1 ) || lua_istable( L, -1 ) ) if ( LUA_ISCALLABLE( L, -1 ) || LUA_ISATABLE( L, -1 ) )
{ {
lua_remove( L, -2 ); lua_remove( L, -2 );
token = strtok( NULL, "." ); token = strtok( NULL, "." );
@ -1291,7 +1293,7 @@ static void read_cmd_call( Transport *tpt, lua_State *L )
const char *msg; const char *msg;
if ( lua_isnil( L, -1 ) ) if ( lua_isnil( L, -1 ) )
msg = "undefined: "; msg = "undefined: ";
else if ( lua_istable( L, -1 ) ) else if ( LUA_ISATABLE( L, -1 ) )
msg = "can't call table"; msg = "can't call table";
else else
msg = "not table/func: "; msg = "not table/func: ";