summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/LuaState.cpp33
-rw-r--r--source/LuaState.h5
-rw-r--r--source/ManualBindings.cpp7
3 files changed, 41 insertions, 4 deletions
diff --git a/source/LuaState.cpp b/source/LuaState.cpp
index 8d2fa8eca..ba60ed67d 100644
--- a/source/LuaState.cpp
+++ b/source/LuaState.cpp
@@ -739,6 +739,39 @@ bool cLuaState::CallFunction(int a_NumResults)
+bool cLuaState::CheckParamUserTable(int a_StartParam, const char * a_UserTable, int a_EndParam)
+{
+ ASSERT(IsValid());
+
+ if (a_EndParam < 0)
+ {
+ a_EndParam = a_StartParam;
+ }
+
+ tolua_Error tolua_err;
+ for (int i = a_StartParam; i <= a_EndParam; i++)
+ {
+ if (tolua_isusertable(m_LuaState, i, a_UserTable, 0, &tolua_err))
+ {
+ continue;
+ }
+ // Not the correct parameter
+ lua_Debug entry;
+ VERIFY(lua_getstack(m_LuaState, 0, &entry));
+ VERIFY(lua_getinfo (m_LuaState, "n", &entry));
+ AString ErrMsg = Printf("#ferror in function '%s'.", (entry.name != NULL) ? entry.name : "?");
+ tolua_error(m_LuaState, ErrMsg.c_str(), &tolua_err);
+ return false;
+ } // for i - Param
+
+ // All params checked ok
+ return true;
+}
+
+
+
+
+
bool cLuaState::CheckParamUserType(int a_StartParam, const char * a_UserType, int a_EndParam)
{
ASSERT(IsValid());
diff --git a/source/LuaState.h b/source/LuaState.h
index caba2484d..8586a251b 100644
--- a/source/LuaState.h
+++ b/source/LuaState.h
@@ -764,7 +764,10 @@ public:
*/
bool CallFunction(int a_NumReturnValues);
- /// Returns true if the specified parameters on the stack are of the specified usertype; also logs warning if not
+ /// Returns true if the specified parameters on the stack are of the specified usertable type; also logs warning if not. Used for static functions
+ bool CheckParamUserTable(int a_StartParam, const char * a_UserTable, int a_EndParam = -1);
+
+ /// Returns true if the specified parameters on the stack are of the specified usertype; also logs warning if not. Used for regular functions
bool CheckParamUserType(int a_StartParam, const char * a_UserType, int a_EndParam = -1);
/// Returns true if the specified parameters on the stack are a table; also logs warning if not
diff --git a/source/ManualBindings.cpp b/source/ManualBindings.cpp
index 418819910..f3325f25c 100644
--- a/source/ManualBindings.cpp
+++ b/source/ManualBindings.cpp
@@ -2067,15 +2067,16 @@ static int tolua_cRoot_GetFurnaceRecipe(lua_State * tolua_S)
{
cLuaState L(tolua_S);
if (
- !L.CheckParamUserType(1, "const cItem") ||
- !L.CheckParamEnd (2)
+ !L.CheckParamUserTable(1, "cRoot") ||
+ !L.CheckParamUserType (2, "const cItem") ||
+ !L.CheckParamEnd (3)
)
{
return 0;
}
// Check the input param:
- cItem * Input = (cItem *)tolua_tousertype(L, 1, NULL);
+ cItem * Input = (cItem *)tolua_tousertype(L, 2, NULL);
if (Input == NULL)
{
LOGWARNING("cRoot:GetFurnaceRecipe: the Input parameter is nil or missing.");