static int MetaNewIndexFunctionInternal(lua_State L) { var isIndexingClassObject = IsIndexingClassObject(L); System.Type typeObject = null; if (isIndexingClassObject) { typeObject = (System.Type)Lua.ObjectAtInternal(L, 1); } object thisObject = null; if (!isIndexingClassObject) { thisObject = Lua.ObjectAtInternal(L, 1); typeObject = thisObject.GetType(); } Lua.Assert(typeObject != null, "Should has a type."); if (Api.lua_isnumber(L, 2)) { if (typeObject != null && typeObject.IsArray) { var array = (System.Array)thisObject; var value = Lua.ValueAtInternal(L, 3); var index = (int)Api.lua_tointeger(L, 2); array.SetValue(Lua.ConvertTo(value, typeObject.GetElementType()), index); } else { Lua.SetValueAtIndexOfObject(L, thisObject, typeObject, new object[] { (int)Api.lua_tointeger(L, 2) }, Lua.ValueAtInternal(L, 3)); } } else if (Api.lua_isstring(L, 2)) { Lua.SetMember(L, thisObject, typeObject, Api.lua_tostring(L, 2), Lua.ValueAtInternal(L, 3), hasPrivatePrivillage: false); } else if (Api.lua_istable(L, 2)) { var host = Lua.CheckHost(L); using (var p = LuaTable.MakeRefTo(host, 2)) { using (var ret = host.testPrivillage.InvokeMultiRet(p)) { var name = (string)ret[1]; Lua.SetMember(L, thisObject, typeObject, name, Lua.ValueAtInternal(L, 3), hasPrivatePrivillage: true); } } } else { Lua.SetValueAtIndexOfObject(L, thisObject, typeObject, new object[] { Lua.ValueAtInternal(L, 2) }, Lua.ValueAtInternal(L, 3)); } return(0); }
ReturnType GenericFunc <T1, T2, T3, ReturnType>(T1 arg1, T2 arg2, T3 arg3) { return((ReturnType)Lua.ConvertTo(func.Invoke1(arg1, arg2, arg3), typeof(ReturnType))); }
ReturnType GenericFunc <T1, ReturnType>(T1 arg1) { return((ReturnType)Lua.ConvertTo(func.Invoke1(arg1), typeof(ReturnType))); }
ReturnType GenericFunc <ReturnType>() { return((ReturnType)Lua.ConvertTo(func.Invoke1(), typeof(ReturnType))); }