diff --git a/stepmania/src/LuaManager.cpp b/stepmania/src/LuaManager.cpp index 93529c816f..616ba59ec0 100644 --- a/stepmania/src/LuaManager.cpp +++ b/stepmania/src/LuaManager.cpp @@ -104,6 +104,59 @@ void LuaManager::PushStack( const CString &out, lua_State *L ) lua_pushstring( L, out ); } +bool LuaManager::PopStack( int &out, lua_State *L ) +{ + if( L == NULL ) + L = LUA->L; + + out = (int) lua_tonumber( L, -1 ); + lua_pop( L, 1 ); + return true; +} + +bool LuaManager::PopStack( bool &out, lua_State *L ) +{ + if( L == NULL ) + L = LUA->L; + + out = lua_toboolean( L, -1 ); + lua_pop( L, 1 ); + return true; +} + +bool LuaManager::PopStack( float &val, lua_State *L ) +{ + if( L == NULL ) + L = LUA->L; + + val = lua_tonumber( L, -1 ); + lua_pop( L, 1 ); + return true; +} + +bool LuaManager::PopStack( void *&out, lua_State *L ) +{ + if( L == NULL ) + L = LUA->L; + + out = lua_touserdata( L, -1 ); + lua_pop( L, 1 ); + return true; +} + +bool LuaManager::PopStack( CString &out, lua_State *L ) +{ + if( L == NULL ) + L = LUA->L; + + const char *pStr = lua_tostring( L, -1 ); + if( pStr != NULL ) + out = pStr; + + lua_pop( L, 1 ); + return pStr != NULL; +} + void LuaManager::CreateTableFromArrayB( const vector &aIn, lua_State *L ) { if( L == NULL ) @@ -133,16 +186,6 @@ void LuaManager::ReadArrayFromTableB( vector &aOut, lua_State *L ) } } -void LuaManager::PopStack( CString &out ) -{ - /* There must be at least one entry on the stack. */ - ASSERT( lua_gettop(L) > 0 ); - ASSERT( lua_isstring(L, -1) ); - - out = lua_tostring( L, -1 ); - lua_pop( L, -1 ); -} - bool LuaManager::GetStack( int pos, int &out ) { if( pos < 0 ) diff --git a/stepmania/src/LuaManager.h b/stepmania/src/LuaManager.h index dd71937cd3..db37fca193 100644 --- a/stepmania/src/LuaManager.h +++ b/stepmania/src/LuaManager.h @@ -48,6 +48,7 @@ public: void SetGlobal( const CString &sName, bool val ) { PushStack(val); SetGlobal( sName ); } void UnsetGlobal( const CString &sName ) { PushStackNil(); SetGlobal( sName ); } + // XXX: yuck void PushStackNil(); void PushNopFunction(); static void PushStack( bool val, lua_State *L = NULL ); @@ -55,7 +56,11 @@ public: static void PushStack( int val, lua_State *L = NULL ); static void PushStack( void *val, lua_State *L = NULL ); static void PushStack( const CString &val, lua_State *L = NULL ); - void PopStack( CString &out ); + static bool PopStack( bool &val, lua_State *L = NULL ); + static bool PopStack( float &val, lua_State *L = NULL ); + static bool PopStack( int &val, lua_State *L = NULL ); + static bool PopStack( void *&val, lua_State *L = NULL ); + static bool PopStack( CString &val, lua_State *L = NULL ); bool GetStack( int pos, int &out ); void SetGlobal( const CString &sName );