static void AutoAddBaseType(BindType bt, bool beDropBaseType) { Type t = bt.baseType; if (t == null) { return; } if (t.IsInterface) { Debugger.LogWarning("{0} has a base type {1} is Interface, use SetBaseType to jump it", bt.name, t.FullName); bt.baseType = t.BaseType; } else if (dropType.IndexOf(t) >= 0) { Debugger.LogWarning("{0} has a base type {1} is a drop type", bt.name, t.FullName); bt.baseType = t.BaseType; } else if (!beDropBaseType || baseType.IndexOf(t) < 0) { int index = allTypes.FindIndex((iter) => { return(iter.type == t); }); if (index < 0) { #if JUMP_NODEFINED_ABSTRACT if (t.IsAbstract && !t.IsSealed) { Debugger.LogWarning("not defined bindtype for {0}, it is abstract class, jump it, child class is {1}", t.FullName, bt.name); bt.baseType = t.BaseType; } else { Debugger.LogWarning("not defined bindtype for {0}, autogen it, child class is {1}", t.FullName, bt.name); bt = new BindType(t); allTypes.Add(bt); } #else Debugger.LogWarning("not defined bindtype for {0}, autogen it, child class is {1}", t.FullName, bt.name); bt = new BindType(t); allTypes.Add(bt); #endif } else { return; } } else { return; } AutoAddBaseType(bt, beDropBaseType); }
public void PushNewValueObject(IntPtr luaState, object o, int index) { LuaDLL.luanet_newudata(luaState, index); //string meta = GetAQName(o.GetType()); //LuaDLL.luaL_getmetatable(luaState, meta); Type t = o.GetType(); PushMetaTable(luaState, o.GetType()); if (LuaDLL.lua_isnil(luaState, -1)) { string meta = t.AssemblyQualifiedName; Debugger.LogWarning("Create not wrap ulua type:" + meta); LuaDLL.lua_settop(luaState, -2); LuaDLL.luaL_newmetatable(luaState, meta); LuaDLL.lua_pushstring(luaState, "cache"); LuaDLL.lua_newtable(luaState); LuaDLL.lua_rawset(luaState, -3); LuaDLL.lua_pushlightuserdata(luaState, LuaDLL.luanet_gettag()); LuaDLL.lua_pushnumber(luaState, 1); LuaDLL.lua_rawset(luaState, -3); LuaDLL.lua_pushstring(luaState, "__index"); LuaDLL.lua_pushstring(luaState, "luaNet_indexfunction"); LuaDLL.lua_rawget(luaState, (int)LuaIndexes.LUA_REGISTRYINDEX); LuaDLL.lua_rawset(luaState, -3); LuaDLL.lua_pushstring(luaState, "__gc"); LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.gcFunction); LuaDLL.lua_rawset(luaState, -3); LuaDLL.lua_pushstring(luaState, "__tostring"); LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.toStringFunction); LuaDLL.lua_rawset(luaState, -3); LuaDLL.lua_pushstring(luaState, "__newindex"); LuaDLL.lua_pushstdcallcfunction(luaState, metaFunctions.newindexFunction); LuaDLL.lua_rawset(luaState, -3); } LuaDLL.lua_setmetatable(luaState, -2); }
static void PushPreLoadType(IntPtr L, object o, Type type) { LuaCSFunction LuaOpenLib = LuaStatic.GetPreModule(L, type); if (LuaOpenLib != null) { #if UNITY_EDITOR Debugger.LogWarning("register PreLoad type {0} to lua", LuaMisc.GetTypeName(type)); #endif LuaPCall(L, LuaOpenLib); int reference = LuaStatic.GetMetaReference(L, type); if (reference > 0) { PushUserData(L, o, reference); return; } } //类型未Wrap LuaDLL.lua_pushnil(L); Debugger.LogError("Type {0} not wrap to lua", LuaMisc.GetTypeName(type)); }
void DestroyUnityObject(int udata) { object o = objects.Destroy(udata); if (o != null) { if (!TypeChecker.IsValueType(o.GetType())) { objectsBackMap.Remove(o); } UnityEngine.Object obj = o as UnityEngine.Object; if (obj != null) { UnityEngine.Object.Destroy(obj); } if (LogGC) { Debugger.LogWarning("destroy object {0}, id {1}", o, udata); } } }
/// <summary> /// (自动)添加参数 BindType bt 的基类类型到 List<BindType> allTypes /// </summary> static void AutoAddBaseType(BindType bt, bool beDropBaseType) { // 获取参数 bt 中 baseType 的值 Type t = bt.baseType; // 如果基类为空直接返回 if (t == null) { return; } // 如果是接口类型则打印警告 if (t.IsInterface) { Debugger.LogWarning("{0} has a base type {1} is Interface, use SetBaseType to jump it", bt.name, t.FullName); // 将参数 bt 的基类设为类型 t 的基类(object?) bt.baseType = t.BaseType; } // 如果存在于不导出 list 中,同样打印警告 else if (dropType.IndexOf(t) >= 0) { Debugger.LogWarning("{0} has a base type {1} is a drop type", bt.name, t.FullName); // 将参数 bt 的基类设为类型 t 的基类(object?) bt.baseType = t.BaseType; } // 如果参数 beDropBaseType 为假,或可导出类型中没有类型 t else if (!beDropBaseType || baseType.IndexOf(t) < 0) { // 找到 t 位于 List<BindType> allTypes 中类型相同的 BindType 元素位置 int index = allTypes.FindIndex((iter) => { return(iter.type == t); }); // 如果没有找到就打印警告并新建 BindType 加入到 allTypes 中去,否则返回空(已经被添加过了) if (index < 0) { #if JUMP_NODEFINED_ABSTRACT if (t.IsAbstract && !t.IsSealed) { Debugger.LogWarning("not defined bindtype for {0}, it is abstract class, jump it, child class is {1}", t.FullName, bt.name); bt.baseType = t.BaseType; } else { Debugger.LogWarning("not defined bindtype for {0}, autogen it, child class is {1}", t.FullName, bt.name); bt = new BindType(t); allTypes.Add(bt); } #else Debugger.LogWarning("not defined bindtype for {0}, autogen it, child class is {1}", t.FullName, bt.name); bt = new BindType(t); allTypes.Add(bt); #endif } else { return; } } else { return; } // 调用自身以验证添加结果(如果有进行添加的话则进行相应处理,无添加则返回) AutoAddBaseType(bt, beDropBaseType); }
public LuaTable GetTable(string fullPath, bool beLogMiss = true) { WeakReference weak = null; if (funcMap.TryGetValue(fullPath, out weak)) { if (weak.IsAlive) { LuaTable table = weak.Target as LuaTable; if (table.IsAlive) { table.AddRef(); RemoveFromGCList(table.GetReference()); return(table); } } funcMap.Remove(fullPath); } if (PushLuaTable(fullPath, false)) { int reference = ToLuaRef(); LuaTable table = null; if (funcRefMap.TryGetValue(reference, out weak)) { if (weak.IsAlive) { table = weak.Target as LuaTable; if (table.IsAlive) { funcMap.Add(fullPath, weak); table.AddRef(); RemoveFromGCList(reference); return(table); } } funcRefMap.Remove(reference); } table = new LuaTable(reference, this); table.name = fullPath; funcMap.Add(fullPath, new WeakReference(table)); funcRefMap.Add(reference, new WeakReference(table)); if (LogGC) { Debugger.Log("Alloc LuaTable name {0}, id {1}", fullPath, reference); } RemoveFromGCList(reference); return(table); } if (beLogMiss) { Debugger.LogWarning("Lua table {0} not exists", fullPath); } return(null); }
public static void LogWarning(string str, object arg0, object arg1) { Debugger.LogWarning(string.Format(str, arg0, arg1)); }
public static void LogWarning(object message) { Debugger.LogWarning(message.ToString()); }
public static void LogWarning(string str, params object[] param) { Debugger.LogWarning(string.Format(str, param)); }