mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-27 13:39:42 +00:00
[Server] Remove argument cast in the Call with va_args
This commit is contained in:
parent
3101de5f02
commit
585557ad8a
1 changed files with 52 additions and 7 deletions
|
@ -133,20 +133,65 @@ boost::any LangLua::Call(const char *name, const char *argl, int buf, ...)
|
||||||
{
|
{
|
||||||
va_list vargs;
|
va_list vargs;
|
||||||
va_start(vargs, buf);
|
va_start(vargs, buf);
|
||||||
std::vector<boost::any> args;
|
|
||||||
|
|
||||||
ScriptFunctions::GetArguments(args, vargs, argl);
|
int n_args = (int)(strlen(argl));
|
||||||
|
|
||||||
return Call(name, argl, args);
|
lua_getglobal(lua, name);
|
||||||
|
|
||||||
|
for (int index = 0; index < n_args; index++)
|
||||||
|
{
|
||||||
|
switch (argl[index])
|
||||||
|
{
|
||||||
|
case 'i':
|
||||||
|
luabridge::Stack<unsigned int>::push(lua,va_arg(vargs, unsigned int));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'q':
|
||||||
|
luabridge::Stack<signed int>::push(lua,va_arg(vargs, signed int));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'l':
|
||||||
|
luabridge::Stack<unsigned long long>::push(lua, va_arg(vargs, unsigned long long));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'w':
|
||||||
|
luabridge::Stack<signed long long>::push(lua, va_arg(vargs, signed long long));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'f':
|
||||||
|
luabridge::Stack<double>::push(lua, va_arg(vargs, double));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'p':
|
||||||
|
luabridge::Stack<void*>::push(lua, va_arg(vargs, void*));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
luabridge::Stack<const char*>::push(lua, va_arg(vargs, const char*));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'b':
|
||||||
|
luabridge::Stack<bool>::push(lua, (bool) va_arg(vargs, int));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw runtime_error("C++ call: Unknown argument identifier " + argl[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
va_end(vargs);
|
||||||
|
|
||||||
|
luabridge::LuaException::pcall(lua, n_args, 1);
|
||||||
|
return boost::any(luabridge::LuaRef::fromStack(lua, -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::any LangLua::Call(const char *name, const char *argl, const std::vector<boost::any> &args)
|
boost::any LangLua::Call(const char *name, const char *argl, const std::vector<boost::any> &args)
|
||||||
{
|
{
|
||||||
int n_args = (int)(strlen(argl)) ;
|
int n_args = (int)(strlen(argl));
|
||||||
|
|
||||||
lua_getglobal (lua, name);
|
lua_getglobal(lua, name);
|
||||||
|
|
||||||
for (intptr_t index = 0; index < n_args; index++)
|
for (int index = 0; index < n_args; index++)
|
||||||
{
|
{
|
||||||
switch (argl[index])
|
switch (argl[index])
|
||||||
{
|
{
|
||||||
|
@ -186,6 +231,6 @@ boost::any LangLua::Call(const char *name, const char *argl, const std::vector<b
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
luabridge::LuaException::pcall (lua, n_args, 1);
|
luabridge::LuaException::pcall(lua, n_args, 1);
|
||||||
return boost::any(luabridge::LuaRef::fromStack(lua, -1));
|
return boost::any(luabridge::LuaRef::fromStack(lua, -1));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue