public ObjectTranslator(Lua interpreter,IntPtr luaState) { this.interpreter=interpreter; typeChecker=new CheckType(this); metaFunctions=new MetaFunctions(this); objects=new ArrayList(); assemblies=new ArrayList(); importTypeFunction=new LuaCSFunction(this.importType); importType__indexFunction=new LuaCSFunction(this.importType__index); loadAssemblyFunction=new LuaCSFunction(this.loadAssembly); loadAssemblyFromFunction=new LuaCSFunction(this.loadAssemblyFrom); registerTableFunction=new LuaCSFunction(this.registerTable); unregisterTableFunction=new LuaCSFunction(this.unregisterTable); getMethodSigFunction=new LuaCSFunction(this.getMethodSignature); getConstructorSigFunction=new LuaCSFunction(this.getConstructorSignature); createLuaObjectList(luaState); createIndexingMetaFunction(luaState); createBaseClassMetatable(luaState); createClassMetatable(luaState); createFunctionMetatable(luaState); setGlobalFunctions(luaState); LuaDLL.lua_dostring(luaState, "load_assembly('mscorlib')"); }
public ObjectTranslator(LuaState interpreter,IntPtr luaState) { this.interpreter=interpreter; typeChecker=new CheckType(this); metaFunctions=new MetaFunctions(this); assemblies=new List<Assembly>(); assemblies.Add(Assembly.GetExecutingAssembly()); importTypeFunction = new LuaCSFunction(ObjectTranslator.importType); loadAssemblyFunction = new LuaCSFunction(ObjectTranslator.loadAssembly); registerTableFunction = new LuaCSFunction(ObjectTranslator.registerTable); unregisterTableFunction = new LuaCSFunction(ObjectTranslator.unregisterTable); getMethodSigFunction = new LuaCSFunction(ObjectTranslator.getMethodSignature); getConstructorSigFunction = new LuaCSFunction(ObjectTranslator.getConstructorSignature); ctypeFunction = new LuaCSFunction(ObjectTranslator.ctype); enumFromIntFunction = new LuaCSFunction(ObjectTranslator.enumFromInt); createLuaObjectList(luaState); createIndexingMetaFunction(luaState); createBaseClassMetatable(luaState); createClassMetatable(luaState); createFunctionMetatable(luaState); setGlobalFunctions(luaState); }
public LuaFunction(int reference, LuaState interpreter) { _Reference = reference; this.function = null; _Interpreter = interpreter; L = _Interpreter.L; translator = _Interpreter.translator; }
public LuaFunction(LuaCSFunction function, LuaState interpreter) { _Reference = 0; this.function = function; _Interpreter = interpreter; L = _Interpreter.L; translator = _Interpreter.translator; }
public LuaFunction(int reference, IntPtr l) { _Reference = reference; this.function = null; L = l; translator = ObjectTranslator.FromState(L); _Interpreter = translator.interpreter; }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.UI.BusinessCardDescUpdateNetTask"); if (Lua_BlackJack_ProjectL_UI_BusinessCardDescUpdateNetTask.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_UI_BusinessCardDescUpdateNetTask.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_UI_BusinessCardDescUpdateNetTask.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_UI_BusinessCardDescUpdateNetTask.< > f__mg$cache0, typeof(BusinessCardDescUpdateNetTask), typeof(UINetTask)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.UI.ArenaPlayerInfoGetNetTask"); if (Lua_BlackJack_ProjectL_UI_ArenaPlayerInfoGetNetTask.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_UI_ArenaPlayerInfoGetNetTask.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_UI_ArenaPlayerInfoGetNetTask.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_UI_ArenaPlayerInfoGetNetTask.< > f__mg$cache0, typeof(ArenaPlayerInfoGetNetTask), typeof(UINetTask)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.Scene.ClientActorActActionEnd"); if (Lua_BlackJack_ProjectL_Scene_ClientActorActActionEnd.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_Scene_ClientActorActActionEnd.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_Scene_ClientActorActActionEnd.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_Scene_ClientActorActActionEnd.< > f__mg$cache0, typeof(ClientActorActActionEnd), typeof(ClientActorAct)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "UnityEngine.UnassignedReferenceException"); if (Lua_UnityEngine_UnassignedReferenceException.< > f__mg$cache0 == null) { Lua_UnityEngine_UnassignedReferenceException.< > f__mg$cache0 = new LuaCSFunction(Lua_UnityEngine_UnassignedReferenceException.constructor); } LuaObject.createTypeMetatable(l, Lua_UnityEngine_UnassignedReferenceException.< > f__mg$cache0, typeof(UnassignedReferenceException), typeof(SystemException)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "UnityEngine.Security"); if (Lua_UnityEngine_Security.< > f__mg$cache0 == null) { Lua_UnityEngine_Security.< > f__mg$cache0 = new LuaCSFunction(Lua_UnityEngine_Security.constructor); } LuaObject.createTypeMetatable(l, Lua_UnityEngine_Security.< > f__mg$cache0, typeof(Security)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.UI.SoldierSkinTakeOffNetTask"); if (Lua_BlackJack_ProjectL_UI_SoldierSkinTakeOffNetTask.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_UI_SoldierSkinTakeOffNetTask.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_UI_SoldierSkinTakeOffNetTask.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_UI_SoldierSkinTakeOffNetTask.< > f__mg$cache0, typeof(SoldierSkinTakeOffNetTask), typeof(UINetTask)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.Common.EnchantStoneBagItem"); if (Lua_BlackJack_ProjectL_Common_EnchantStoneBagItem.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_Common_EnchantStoneBagItem.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_EnchantStoneBagItem.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_Common_EnchantStoneBagItem.< > f__mg$cache0, typeof(EnchantStoneBagItem), typeof(BagItemBase)); }
public static void PushCFunction(LuaCSFunction function) { #if SLUA_STANDALONE // Add all LuaCSFunction�� or they will be GC collected! (problem at windows, .net framework 4.5, `CallbackOnCollectedDelegated` exception) GCHandle.Alloc(function); #endif IntPtr fn = Marshal.GetFunctionPointerForDelegate(function); lua_pushcclosure(LuaState, fn, 0); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.UI.TeamRoomAuthorityChangeNetTask"); if (Lua_BlackJack_ProjectL_UI_TeamRoomAuthorityChangeNetTask.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_UI_TeamRoomAuthorityChangeNetTask.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_UI_TeamRoomAuthorityChangeNetTask.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_UI_TeamRoomAuthorityChangeNetTask.< > f__mg$cache0, typeof(TeamRoomAuthorityChangeNetTask), typeof(UINetTask)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.UI.FriendLeaveChatGroupNetTask"); if (Lua_BlackJack_ProjectL_UI_FriendLeaveChatGroupNetTask.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_UI_FriendLeaveChatGroupNetTask.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_UI_FriendLeaveChatGroupNetTask.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_UI_FriendLeaveChatGroupNetTask.< > f__mg$cache0, typeof(FriendLeaveChatGroupNetTask), typeof(UINetTask)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.UI.EquipmentStarLevelUpNetTask"); if (Lua_BlackJack_ProjectL_UI_EquipmentStarLevelUpNetTask.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_UI_EquipmentStarLevelUpNetTask.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_UI_EquipmentStarLevelUpNetTask.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_UI_EquipmentStarLevelUpNetTask.< > f__mg$cache0, typeof(EquipmentStarLevelUpNetTask), typeof(UINetTask)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "UnityEngine.WaitForSeconds"); if (Lua_UnityEngine_WaitForSeconds.< > f__mg$cache0 == null) { Lua_UnityEngine_WaitForSeconds.< > f__mg$cache0 = new LuaCSFunction(Lua_UnityEngine_WaitForSeconds.constructor); } LuaObject.createTypeMetatable(l, Lua_UnityEngine_WaitForSeconds.< > f__mg$cache0, typeof(WaitForSeconds), typeof(YieldInstruction)); }
public LuaState() { this.L = LuaDLL.luaL_newstate(); LuaDLL.luaL_openlibs(this.L); LuaDLL.lua_pushstring(this.L, "LUAINTERFACE LOADED"); LuaDLL.lua_pushboolean(this.L, true); LuaDLL.lua_settable(this.L, LuaIndexes.LUA_REGISTRYINDEX); LuaDLL.lua_newtable(this.L); LuaDLL.lua_setglobal(this.L, "luanet"); LuaDLL.lua_pushvalue(this.L, LuaIndexes.LUA_GLOBALSINDEX); LuaDLL.lua_getglobal(this.L, "luanet"); LuaDLL.lua_pushstring(this.L, "getmetatable"); LuaDLL.lua_getglobal(this.L, "getmetatable"); LuaDLL.lua_settable(this.L, -3); LuaDLL.lua_pushstring(this.L, "rawget"); LuaDLL.lua_getglobal(this.L, "rawget"); LuaDLL.lua_settable(this.L, -3); LuaDLL.lua_pushstring(this.L, "rawset"); LuaDLL.lua_getglobal(this.L, "rawset"); LuaDLL.lua_settable(this.L, -3); LuaDLL.lua_replace(this.L, LuaIndexes.LUA_GLOBALSINDEX); this.translator = new ObjectTranslator(this, this.L); LuaDLL.lua_replace(this.L, LuaIndexes.LUA_GLOBALSINDEX); this.translator.PushTranslator(this.L); this.panicCallback = new LuaCSFunction(LuaStatic.panic); LuaDLL.lua_atpanic(this.L, this.panicCallback); this.printFunction = new LuaCSFunction(LuaStatic.print); LuaDLL.lua_pushstdcallcfunction(this.L, this.printFunction, 0); LuaDLL.lua_setfield(this.L, LuaIndexes.LUA_GLOBALSINDEX, "print"); this.loadfileFunction = new LuaCSFunction(LuaStatic.loadfile); LuaDLL.lua_pushstdcallcfunction(this.L, this.loadfileFunction, 0); LuaDLL.lua_setfield(this.L, LuaIndexes.LUA_GLOBALSINDEX, "loadfile"); this.dofileFunction = new LuaCSFunction(LuaStatic.dofile); LuaDLL.lua_pushstdcallcfunction(this.L, this.dofileFunction, 0); LuaDLL.lua_setfield(this.L, LuaIndexes.LUA_GLOBALSINDEX, "dofile"); this.import_wrapFunction = new LuaCSFunction(LuaStatic.importWrap); LuaDLL.lua_pushstdcallcfunction(this.L, this.import_wrapFunction, 0); LuaDLL.lua_setfield(this.L, LuaIndexes.LUA_GLOBALSINDEX, "import"); this.loaderFunction = new LuaCSFunction(LuaStatic.loader); LuaDLL.lua_pushstdcallcfunction(this.L, this.loaderFunction, 0); int index = LuaDLL.lua_gettop(this.L); LuaDLL.lua_getfield(this.L, LuaIndexes.LUA_GLOBALSINDEX, "package"); LuaDLL.lua_getfield(this.L, -1, "loaders"); int num = LuaDLL.lua_gettop(this.L); for (int i = LuaDLL.luaL_getn(this.L, num) + 1; i > 1; i--) { LuaDLL.lua_rawgeti(this.L, num, i - 1); LuaDLL.lua_rawseti(this.L, num, i); } LuaDLL.lua_pushvalue(this.L, index); LuaDLL.lua_rawseti(this.L, num, 1); LuaDLL.lua_settop(this.L, 0); this.DoString(LuaStatic.init_luanet); this.tracebackFunction = new LuaCSFunction(LuaStatic.traceback); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.UI.HeroPhantomLevelAttackNetTask"); if (Lua_BlackJack_ProjectL_UI_HeroPhantomLevelAttackNetTask.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_UI_HeroPhantomLevelAttackNetTask.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_UI_HeroPhantomLevelAttackNetTask.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_UI_HeroPhantomLevelAttackNetTask.< > f__mg$cache0, typeof(HeroPhantomLevelAttackNetTask), typeof(UINetTask)); }
static void SetOutMethods(IntPtr L, string table, LuaCSFunction getOutFunc = null) { LuaDLL.lua_getglobal(L, table); IntPtr get = Marshal.GetFunctionPointerForDelegate(getOutFunc); LuaDLL.tolua_variable(L, "out", get, IntPtr.Zero); LuaDLL.lua_pop(L, 1); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.UI.GetRandomStoreItemListNetTask"); if (Lua_BlackJack_ProjectL_UI_GetRandomStoreItemListNetTask.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_UI_GetRandomStoreItemListNetTask.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_UI_GetRandomStoreItemListNetTask.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_UI_GetRandomStoreItemListNetTask.< > f__mg$cache0, typeof(GetRandomStoreItemListNetTask), typeof(UINetTask)); }
public static void lua_pushcclosure(IntPtr l, LuaCSFunction f, int nup) { #if SLUA_STANDALONE // Add all LuaCSFunction£¬ or they will be GC collected! (problem at windows, .net framework 4.5, `CallbackOnCollectedDelegated` exception) GCHandle.Alloc(f); #endif IntPtr fn = Marshal.GetFunctionPointerForDelegate(f); lua_pushcclosure(l, fn, nup); }
protected static void addMember(IntPtr l, LuaCSFunction func, bool instance) { checkMethodValid(func); pushValue(l, func); string name = func.Method.Name; LuaDLL.lua_setfield(l, instance ? -2 : -3, name); }
public static void reg(IntPtr l, LuaCSFunction func, string ns) { checkMethodValid(func); newTypeTable(l, ns); pushValue(l, func); LuaDLL.lua_setfield(l, -2, func.Method.Name); LuaDLL.lua_pop(l, 1); }
static void checkMethodValid(LuaCSFunction f) { #if UNITY_EDITOR if (f != null && !Attribute.IsDefined(f.Method, typeof(MonoPInvokeCallbackAttribute))) { Logger.LogError(string.Format("MonoPInvokeCallbackAttribute not defined for LuaCSFunction {0}.", f.Method)); } #endif }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "UnityEngine.UI.MaskableGraphic"); if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache0 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache0 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.GetModifiedMaterial); } LuaObject.addMember(l, Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache0); if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache1 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache1 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.Cull); } LuaObject.addMember(l, Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache1); if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache2 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache2 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.SetClipRect); } LuaObject.addMember(l, Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache2); if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache3 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache3 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.RecalculateClipping); } LuaObject.addMember(l, Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache3); if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache4 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache4 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.RecalculateMasking); } LuaObject.addMember(l, Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache4); string name = "onCullStateChanged"; if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache5 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache5 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.get_onCullStateChanged); } LuaCSFunction get = Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache5; if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache6 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache6 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.set_onCullStateChanged); } LuaObject.addMember(l, name, get, Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache6, true); string name2 = "maskable"; if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache7 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache7 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.get_maskable); } LuaCSFunction get2 = Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache7; if (Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache8 == null) { Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache8 = new LuaCSFunction(Lua_UnityEngine_UI_MaskableGraphic.set_maskable); } LuaObject.addMember(l, name2, get2, Lua_UnityEngine_UI_MaskableGraphic.< > f__mg$cache8, true); LuaObject.createTypeMetatable(l, null, typeof(MaskableGraphic), typeof(Graphic)); }
public static void reg(IntPtr l) { LuaUnityEvent_int.reg(l); LuaObject.getTypeTable(l, "UnityEngine.UI.Dropdown.DropdownEvent"); if (Lua_UnityEngine_UI_Dropdown_DropdownEvent.< > f__mg$cache0 == null) { Lua_UnityEngine_UI_Dropdown_DropdownEvent.< > f__mg$cache0 = new LuaCSFunction(Lua_UnityEngine_UI_Dropdown_DropdownEvent.constructor); } LuaObject.createTypeMetatable(l, Lua_UnityEngine_UI_Dropdown_DropdownEvent.< > f__mg$cache0, typeof(Dropdown.DropdownEvent), typeof(LuaUnityEvent_int)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "UnityEngine.EventSystems.ISelectHandler"); if (Lua_UnityEngine_EventSystems_ISelectHandler.< > f__mg$cache0 == null) { Lua_UnityEngine_EventSystems_ISelectHandler.< > f__mg$cache0 = new LuaCSFunction(Lua_UnityEngine_EventSystems_ISelectHandler.OnSelect); } LuaObject.addMember(l, Lua_UnityEngine_EventSystems_ISelectHandler.< > f__mg$cache0); LuaObject.createTypeMetatable(l, null, typeof(ISelectHandler)); }
public static void reg(IntPtr l) { LuaUnityEvent_string.reg(l); LuaObject.getTypeTable(l, "UnityEngine.UI.InputField.OnChangeEvent"); if (Lua_UnityEngine_UI_InputField_OnChangeEvent.< > f__mg$cache0 == null) { Lua_UnityEngine_UI_InputField_OnChangeEvent.< > f__mg$cache0 = new LuaCSFunction(Lua_UnityEngine_UI_InputField_OnChangeEvent.constructor); } LuaObject.createTypeMetatable(l, Lua_UnityEngine_UI_InputField_OnChangeEvent.< > f__mg$cache0, typeof(InputField.OnChangeEvent), typeof(LuaUnityEvent_string)); }
/// <summary> /// NOTE: A reference to the function pointer to a managed delegate held by unmanaged code does not prevent the common language runtime from performing garbage collection on the managed object. /// </summary> /// <param name="luaState"></param> /// <param name="function"></param> public static void lua_pushcfunction(IntPtr luaState, LuaCSFunction function) { #if SLUA_STANDALONE // Add all LuaCSFunction?? or they will be GC collected! (problem at windows, .net framework 4.5, `CallbackOnCollectedDelegated` exception) //See https://manski.net/2012/06/pinvoke-tutorial-pinning-part-4/ //防止GC收集 GCHandle.Alloc(function); #endif IntPtr fn = Marshal.GetFunctionPointerForDelegate(function); lua_pushcclosure(luaState, fn, 0); }
private static void LuaPCall(IntPtr L, LuaCSFunction func) { LuaDLL.tolua_pushcfunction(L, func); if (LuaDLL.lua_pcall(L, 0, -1, 0) != 0) { string msg = LuaDLL.lua_tostring(L, -1); Exception luaStack = LuaException.luaStack; LuaException.luaStack = null; throw new LuaException(msg, luaStack, 1); } }
public LuaState() { // Create State L = LuaDLL.luaL_newstate(); // Create LuaInterface library LuaDLL.luaL_openlibs(L); LuaDLL.lua_pushstring(L, "LUAINTERFACE LOADED"); LuaDLL.lua_pushboolean(L, true); LuaDLL.lua_settable(L, (int)LuaIndexes.LUA_REGISTRYINDEX); tracebackFunction = new LuaCSFunction(error_traceback); // We need to keep this in a managed reference so the delegate doesn't get garbage collected panicCallback = new LuaCSFunction(panic); LuaDLL.lua_atpanic(L, panicCallback); printFunction = new LuaCSFunction(print); LuaDLL.lua_pushstdcallcfunction(L, printFunction); LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "print"); loadfileFunction = new LuaCSFunction(loadfile); LuaDLL.lua_pushstdcallcfunction(L, loadfileFunction); LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "loadfile"); dofileFunction = new LuaCSFunction(dofile); LuaDLL.lua_pushstdcallcfunction(L, dofileFunction); LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "dofile"); LuaDLL.lua_pushstdcallcfunction(L, dofileFunction); LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "require"); LuaDLL.lua_newtable(L); LuaDLL.lua_newtable(L); LuaDLL.lua_pushstring(L, "v"); LuaDLL.lua_setfield(L, -2, "__mode"); LuaDLL.lua_setmetatable(L, -2); LuaDLL.lua_setfield(L, LuaIndexes.LUA_REGISTRYINDEX, LuaStatic.CACHE_CSHARP_OBJECT_TABLE); // Insert our loader FIRST loaderFunction = new LuaCSFunction(loader); LuaDLL.lua_pushstdcallcfunction(L, loaderFunction); int loaderFunc = LuaDLL.lua_gettop(L); LuaDLL.lua_getfield(L, LuaIndexes.LUA_GLOBALSINDEX, "package"); LuaDLL.lua_getfield(L, -1, "loaders"); int loaderTable = LuaDLL.lua_gettop(L); // Shift table elements right for (int e = LuaDLL.luaL_getn(L, loaderTable) + 1; e > 1; e--) { LuaDLL.lua_rawgeti(L, loaderTable, e - 1); LuaDLL.lua_rawseti(L, loaderTable, e); } LuaDLL.lua_pushvalue(L, loaderFunc); LuaDLL.lua_rawseti(L, loaderTable, 1); LuaDLL.lua_settop(L, 0); }
internal static void pcall(IntPtr l, LuaCSFunction f) { int err = LuaObject.pushTry(l); LuaDLL.lua_pushcfunction(l, f); if (LuaDLL.lua_pcall(l, 0, 0, err) != 0) { LuaDLL.lua_pop(l, 1); } LuaDLL.lua_remove(l, err); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.Common.GuildPlayerMassiveCombatInfo"); if (Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.ToPro); } LuaObject.addMember(l, Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache0); string name = "UsedHeroIds"; if (Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache1 == null) { Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache1 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.get_UsedHeroIds); } LuaCSFunction get = Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache1; if (Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache2 == null) { Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache2 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.set_UsedHeroIds); } LuaObject.addMember(l, name, get, Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache2, true); string name2 = "BindedGuildId"; if (Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache3 == null) { Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache3 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.get_BindedGuildId); } LuaCSFunction get2 = Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache3; if (Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache4 == null) { Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache4 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.set_BindedGuildId); } LuaObject.addMember(l, name2, get2, Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache4, true); string name3 = "Points"; if (Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache5 == null) { Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache5 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.get_Points); } LuaCSFunction get3 = Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache5; if (Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache6 == null) { Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache6 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.set_Points); } LuaObject.addMember(l, name3, get3, Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache6, true); if (Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache7 == null) { Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache7 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_Common_GuildPlayerMassiveCombatInfo.< > f__mg$cache7, typeof(GuildPlayerMassiveCombatInfo)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "BlackJack.ProjectL.Common.HeroDungeonLevel"); if (Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache0 == null) { Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache0 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.ToPBLevel_s); } LuaObject.addMember(l, Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache0); string name = "LevelId"; if (Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache1 == null) { Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache1 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.get_LevelId); } LuaCSFunction get = Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache1; if (Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache2 == null) { Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache2 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.set_LevelId); } LuaObject.addMember(l, name, get, Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache2, true); string name2 = "Stars"; if (Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache3 == null) { Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache3 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.get_Stars); } LuaCSFunction get2 = Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache3; if (Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache4 == null) { Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache4 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.set_Stars); } LuaObject.addMember(l, name2, get2, Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache4, true); string name3 = "Nums"; if (Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache5 == null) { Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache5 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.get_Nums); } LuaCSFunction get3 = Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache5; if (Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache6 == null) { Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache6 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.set_Nums); } LuaObject.addMember(l, name3, get3, Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache6, true); if (Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache7 == null) { Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache7 = new LuaCSFunction(Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.constructor); } LuaObject.createTypeMetatable(l, Lua_BlackJack_ProjectL_Common_HeroDungeonLevel.< > f__mg$cache7, typeof(HeroDungeonLevel)); }
public static void reg(IntPtr l) { LuaObject.getTypeTable(l, "UnityEngine.UI.ILayoutIgnorer"); string name = "ignoreLayout"; if (Lua_UnityEngine_UI_ILayoutIgnorer.< > f__mg$cache0 == null) { Lua_UnityEngine_UI_ILayoutIgnorer.< > f__mg$cache0 = new LuaCSFunction(Lua_UnityEngine_UI_ILayoutIgnorer.get_ignoreLayout); } LuaObject.addMember(l, name, Lua_UnityEngine_UI_ILayoutIgnorer.< > f__mg$cache0, null, true); LuaObject.createTypeMetatable(l, null, typeof(ILayoutIgnorer)); }
public MetaFunctions(ObjectTranslator translator) { this.translator = translator; gcFunction = new LuaCSFunction(this.collectObject); toStringFunction = new LuaCSFunction(this.toString); indexFunction = new LuaCSFunction(this.getMethod); newindexFunction = new LuaCSFunction(this.setFieldOrProperty); baseIndexFunction = new LuaCSFunction(this.getBaseMethod); callConstructorFunction = new LuaCSFunction(this.callConstructor); classIndexFunction = new LuaCSFunction(this.getClassMethod); classNewindexFunction = new LuaCSFunction(this.setClassFieldOrProperty); execDelegateFunction = new LuaCSFunction(this.runFunctionDelegate); }
public ObjectTranslator(Lua interpreter, IntPtr luaState) { this.interpreter = interpreter; this.typeChecker = new CheckType(this); this.metaFunctions = new MetaFunctions(this); this.assemblies = new List<Assembly>(); this.importTypeFunction = new LuaCSFunction(this.importType); this.loadAssemblyFunction = new LuaCSFunction(this.loadAssembly); this.registerTableFunction = new LuaCSFunction(this.registerTable); this.unregisterTableFunction = new LuaCSFunction(this.unregisterTable); this.getMethodSigFunction = new LuaCSFunction(this.getMethodSignature); this.getConstructorSigFunction = new LuaCSFunction(this.getConstructorSignature); this.createLuaObjectList(luaState); this.createIndexingMetaFunction(luaState); this.createBaseClassMetatable(luaState); this.createClassMetatable(luaState); this.createFunctionMetatable(luaState); this.setGlobalFunctions(luaState); }
public Lua() { this.luaLock = new object(); this.luaState = LuaJIT.luaL_newstate(); LuaJIT.luaL_openlibs(this.luaState); LuaJIT.lua_pushstring(this.luaState, "LUAINTERFACE LOADED"); LuaJIT.lua_pushboolean(this.luaState, 1); LuaJIT.lua_settable(this.luaState, -10000); LuaJIT.lua_newtable(this.luaState); LuaJIT.lua_setglobal(this.luaState, "luanet"); LuaJIT.lua_pushvalue(this.luaState, -10002); LuaJIT.lua_getglobal(this.luaState, "luanet"); LuaJIT.lua_pushstring(this.luaState, "getmetatable"); LuaJIT.lua_getglobal(this.luaState, "getmetatable"); LuaJIT.lua_settable(this.luaState, -3); LuaJIT.lua_replace(this.luaState, -10002); this.translator = new ObjectTranslator(this, this.luaState); LuaJIT.lua_replace(this.luaState, -10002); LuaJIT.luaL_dostring(this.luaState, init_luanet); this.panicCallback = new LuaCSFunction(Lua.PanicCallback); LuaJIT.lua_atpanic(this.luaState, this.panicCallback); }
public static extern IntPtr lua_atpanic(IntPtr luaState, LuaCSFunction panicf);
/* * Pushes the value of a member or a delegate to call it, depending on the type of * the member. Works with static or instance members. * Uses reflection to find members, and stores the reflected MemberInfo object in * a cache (indexed by the type of the object and the name of the member). */ private int getMember(IntPtr luaState, IReflect objType, object obj, string methodName, BindingFlags bindingType) { bool implicitStatic = false; MemberInfo member = null; object cachedMember = checkMemberCache(memberCache, objType, methodName); //object cachedMember=null; if (cachedMember is LuaCSFunction) { translator.pushFunction(luaState, (LuaCSFunction)cachedMember); translator.push(luaState, true); return 2; } else if (cachedMember != null) { member = (MemberInfo)cachedMember; } else { MemberInfo[] members = objType.GetMember(methodName, bindingType | BindingFlags.Public | BindingFlags.NonPublic); if (members.Length > 0) member = members[0]; else { // If we can't find any suitable instance members, try to find them as statics - but we only want to allow implicit static // lookups for fields/properties/events -kevinh members = objType.GetMember(methodName, bindingType | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (members.Length > 0) { member = members[0]; implicitStatic = true; } } } if (member != null) { if (member.MemberType == MemberTypes.Field) { FieldInfo field = (FieldInfo)member; if (cachedMember == null) setMemberCache(memberCache, objType, methodName, member); try { translator.push(luaState, field.GetValue(obj)); } catch { LuaDLL.lua_pushnil(luaState); } } else if (member.MemberType == MemberTypes.Property) { PropertyInfo property = (PropertyInfo)member; if (cachedMember == null) setMemberCache(memberCache, objType, methodName, member); try { object val = property.GetValue(obj, null); translator.push(luaState, val); } catch (ArgumentException) { // If we can't find the getter in our class, recurse up to the base class and see // if they can help. if (objType is Type && !(((Type)objType) == typeof(object))) return getMember(luaState, ((Type)objType).BaseType, obj, methodName, bindingType); else LuaDLL.lua_pushnil(luaState); } catch { LuaDLL.lua_pushnil(luaState); } } else if (member.MemberType == MemberTypes.Event) { EventInfo eventInfo = (EventInfo)member; if (cachedMember == null) setMemberCache(memberCache, objType, methodName, member); translator.push(luaState, new RegisterEventHandler(translator.pendingEvents, obj, eventInfo)); } else if(!implicitStatic) { if (member.MemberType == MemberTypes.NestedType) { // kevinh - added support for finding nested types // cache us if (cachedMember == null) setMemberCache(memberCache, objType, methodName, member); // Find the name of our class string name = member.Name; Type dectype = member.DeclaringType; // Build a new long name and try to find the type by name string longname = dectype.FullName + "+" + name; Type nestedType = translator.FindType(longname); translator.pushType(luaState, nestedType); } else { // Member type must be 'method' LuaCSFunction wrapper = new LuaCSFunction((new LuaMethodWrapper(translator, objType, methodName, bindingType)).call); if (cachedMember == null) setMemberCache(memberCache, objType, methodName, wrapper); translator.pushFunction(luaState, wrapper); translator.push(luaState, true); return 2; } } else { // If we reach this point we found a static method, but can't use it in this context because the user passed in an instance translator.throwError(luaState, "can't pass instance to static method " + methodName); LuaDLL.lua_pushnil(luaState); } } else { // kevinh - we want to throw an exception because meerly returning 'nil' in this case // is not sufficient. valid data members may return nil and therefore there must be some // way to know the member just doesn't exist. translator.throwError(luaState, "unknown member name " + methodName); LuaDLL.lua_pushnil(luaState); } // push false because we are NOT returning a function (see luaIndexFunction) translator.push(luaState, false); return 2; }
//internal int reference; public LuaFunction(int reference, LuaState interpreter) { _Reference = reference; this.function = null; _Interpreter = interpreter; }
public static void tolua_bindthis(IntPtr L, LuaCSFunction get, LuaCSFunction set) { IntPtr pGet = IntPtr.Zero; IntPtr pSet = IntPtr.Zero; if (get != null) { pGet = Marshal.GetFunctionPointerForDelegate(get); } if (set != null) { pSet = Marshal.GetFunctionPointerForDelegate(set); } tolua_regthis(L, pGet, pSet); }
public static void lua_register(IntPtr luaState, string name, LuaCSFunction func) { lua_pushcfunction(luaState, func); lua_setglobal(luaState, name); }
void init() { luaState = LuaDLL.luaL_newstate(); // steffenj: Lua 5.1.1 API change (lua_open is gone) //LuaDLL.luaopen_base(luaState); // steffenj: luaopen_* no longer used LuaDLL.luaL_openlibs(luaState); // steffenj: Lua 5.1.1 API change (luaopen_base is gone, just open all libs right here) LuaDLL.lua_pushstring(luaState, "LUAINTERFACE LOADED"); LuaDLL.lua_pushboolean(luaState, true); LuaDLL.lua_settable(luaState, (int) LuaIndexes.LUA_REGISTRYINDEX); LuaDLL.lua_newtable(luaState); LuaDLL.lua_setglobal(luaState, "luanet"); LuaDLL.lua_pushvalue(luaState, (int)LuaIndexes.LUA_GLOBALSINDEX); LuaDLL.lua_getglobal(luaState, "luanet"); LuaDLL.lua_pushstring(luaState, "getmetatable"); LuaDLL.lua_getglobal(luaState, "getmetatable"); LuaDLL.lua_settable(luaState, -3); LuaDLL.lua_replace(luaState, (int)LuaIndexes.LUA_GLOBALSINDEX); translator=new ObjectTranslator(this,luaState); LuaDLL.lua_replace(luaState, (int)LuaIndexes.LUA_GLOBALSINDEX); LuaDLL.luaL_dostring(luaState, Lua.init_luanet); // steffenj: lua_dostring renamed to luaL_dostring // We need to keep this in a managed reference so the delegate doesn't get garbage collected panicCallback = new LuaCSFunction(PanicCallback); LuaDLL.lua_atpanic(luaState, panicCallback); //LuaDLL.lua_atlock(luaState, lockCallback = new LuaCSFunction(LockCallback)); //LuaDLL.lua_atunlock(luaState, unlockCallback = new LuaCSFunction(UnlockCallback)); }
public static void lua_atunlock(Lua.lua_State luaState, LuaCSFunction^ unlockf);
// not yet implemented public static void lua_atlock(Lua.lua_State luaState, LuaCSFunction^ lockf) { IntPtr p = Marshal::GetFunctionPointerForDelegate(lockf); Lua.lua_atlock(luaState, (lua_CFunction) p.ToPointer()); }
internal void pushCSFunction(LuaCSFunction function) { this.translator.pushFunction(this.luaState, function); }
public static void lua_pushcclosure(IntPtr l, LuaCSFunction f, int nup) { IntPtr fn = Marshal.GetFunctionPointerForDelegate(f); lua_pushcclosure(l, fn, nup); }
public static void lua_pushcfunction(IntPtr luaState, LuaCSFunction func) { IntPtr fn = Marshal.GetFunctionPointerForDelegate(func); lua_pushcclosure(luaState, fn, 0); }
public LuaState() { // Create State L = LuaDLL.luaL_newstate(); // Create LuaInterface library LuaDLL.luaL_openlibs(L); LuaDLL.lua_pushstring(L, "LUAINTERFACE LOADED"); LuaDLL.lua_pushboolean(L, true); LuaDLL.lua_settable(L, (int) LuaIndexes.LUA_REGISTRYINDEX); LuaDLL.lua_newtable(L); LuaDLL.lua_setglobal(L, "luanet"); LuaDLL.lua_pushvalue(L, (int)LuaIndexes.LUA_GLOBALSINDEX); LuaDLL.lua_getglobal(L, "luanet"); LuaDLL.lua_pushstring(L, "getmetatable"); LuaDLL.lua_getglobal(L, "getmetatable"); LuaDLL.lua_settable(L, -3); // Set luanet as global for object translator LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX); translator = new ObjectTranslator(this,L); LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX); translator.PushTranslator(L); //GCHandle handle = GCHandle.Alloc(translator, GCHandleType.Pinned); //IntPtr thisptr = GCHandle.ToIntPtr(handle); //LuaDLL.lua_pushlightuserdata(L, thisptr); //LuaDLL.lua_setglobal(L, "_translator"); // We need to keep this in a managed reference so the delegate doesn't get garbage collected panicCallback = new LuaCSFunction(LuaStatic.panic); LuaDLL.lua_atpanic(L, panicCallback); printFunction = new LuaCSFunction(LuaStatic.print); LuaDLL.lua_pushstdcallcfunction(L, printFunction); LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "print"); loadfileFunction = new LuaCSFunction(LuaStatic.loadfile); LuaDLL.lua_pushstdcallcfunction(L, loadfileFunction); LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "loadfile"); dofileFunction = new LuaCSFunction(LuaStatic.dofile); LuaDLL.lua_pushstdcallcfunction(L, dofileFunction); LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "dofile"); // Insert our loader FIRST loaderFunction = new LuaCSFunction(LuaStatic.loader); LuaDLL.lua_pushstdcallcfunction(L, loaderFunction); int loaderFunc = LuaDLL.lua_gettop( L ); LuaDLL.lua_getfield( L, LuaIndexes.LUA_GLOBALSINDEX, "package" ); LuaDLL.lua_getfield( L, -1, "loaders" ); int loaderTable = LuaDLL.lua_gettop( L ); // Shift table elements right for( int e = LuaDLL.luaL_getn( L, loaderTable ) + 1; e > 1; e-- ) { LuaDLL.lua_rawgeti( L, loaderTable, e-1 ); LuaDLL.lua_rawseti( L, loaderTable, e ); } LuaDLL.lua_pushvalue( L, loaderFunc ); LuaDLL.lua_rawseti( L, loaderTable, 1 ); LuaDLL.lua_settop( L, 0 ); DoString(LuaStatic.init_luanet); tracebackFunction = new LuaCSFunction(LuaStatic.traceback); }
public static IntPtr tolua_atpanic(IntPtr L, LuaCSFunction func) { IntPtr fn = Marshal.GetFunctionPointerForDelegate(func); return lua_atpanic(L, fn); }
public static extern LuaCSFunction lua_atpanic(IntPtr l, LuaCSFunction f);
public static void lua_pushstdcallcfunction(IntPtr luaState, LuaCSFunction function, int n = 0) { IntPtr fn = Marshal.GetFunctionPointerForDelegate(function); lua_pushcclosure(luaState, fn, n); }
static void InitEnv() { m_luaState = LuaDLL.luaL_newstate(); LuaDLL.luaL_openlibs(L); ANativeRuntime.Init(); ANativeRuntime.exp_setup_luastate(L); //set panic var panicCallback = new LuaCSFunction(LuaStatic.panic); LuaDLL.lua_atpanic(L, panicCallback); m_refHolder.Add(panicCallback); //override print, warn var warnFunction = new LuaCSFunction(LuaStatic.warn); LuaDLL.lua_pushstdcallcfunction(L, warnFunction); LuaDLL.lua_setfield(L, LuaInterface.LuaIndexes.LUA_GLOBALSINDEX, "warn"); m_refHolder.Add(warnFunction); var printFunction = new LuaCSFunction(LuaStatic.print); LuaDLL.lua_pushstdcallcfunction(L, printFunction); LuaDLL.lua_setfield(L, LuaInterface.LuaIndexes.LUA_GLOBALSINDEX, "print"); m_refHolder.Add(printFunction); }
public LuaFunction(LuaCSFunction function, LuaState interpreter) { _Reference = 0; this.function = function; _Interpreter = interpreter; }
internal void pushCSFunction(LuaCSFunction function) { translator.pushFunction(L,function); }
public static void lua_pushcfunction(IntPtr l, LuaCSFunction f) { lua_pushcclosure(l, f, 0); }