public int __Call(lua_State L)
{
List<object> paramValues = new List<object>();
if (InvokeLua.lua_touserdata(L, 1) != proxy_object.userdata)
{
InvokeLua.lua_pushstring(L, "attempt to call method on bad self");
return InvokeLua.lua_error(L);
}
InvokeLua.lua_remove(L, 1);
foreach (MethodInfo method in proxy_methods)
{
ParameterInfo[] parameters = method.GetParameters();
if (parameters.Length != InvokeLua.lua_gettop(L))
{
continue;
}
paramValues.Clear();
for (int i = 0; i < parameters.Length; i++)
{
object o;
if (TryGetValue(parameters[i].ParameterType, L, i + 1, proxy_object.proxiedByUserdata, out o))
{
paramValues.Add(o);
}
else
{
break;
}
}
if (paramValues.Count != parameters.Length)
{
continue;
}
object result = method.Invoke(proxy_object.ProxyObject, paramValues.ToArray());
LuaDotNetObjectProxy.PushValue(L, result, proxy_object.proxied, proxy_object.proxiedByUserdata);
return 1;
}
InvokeLua.lua_pushstring(L, "invalid arguments to method");
return InvokeLua.lua_error(L);
}