public LuaFunction GetFunction(string name) { WeakReference weak = null; if (funcMap.TryGetValue(name, out weak)) { if (weak.IsAlive) { LuaFunction func = weak.Target as LuaFunction; if (func.IsAlive) { func.AddRef(); RemoveFromGCList(func.GetReference()); return(func); } } funcMap.Remove(name); } if (PushLuaFunction(name, false)) { int reference = ToLuaRef(); if (funcRefMap.TryGetValue(reference, out weak)) { if (weak.IsAlive) { LuaFunction func = weak.Target as LuaFunction; if (func.IsAlive) { funcMap.Add(name, weak); func.AddRef(); RemoveFromGCList(reference); return(func); } } funcRefMap.Remove(reference); delegateMap.Remove(reference); } LuaFunction fun = new LuaFunction(reference, this); fun.name = name; funcMap.Add(name, new WeakReference(fun)); funcRefMap.Add(reference, new WeakReference(fun)); RemoveFromGCList(reference); if (LogGC) { Debugger.Log("Alloc LuaFunction name {0}, id {1}", name, reference); } return(fun); } Debugger.Log("Lua function {0} not exists", name); return(null); }
public LuaDelegate(LuaFunction func) { this.func = func; this.func.AddRef(); reference = func.GetReference(); self = null; method = null; count = 1; }
internal void AddLuaDelegate(LuaDelegate luaDelegate, LuaFunction func) { int key = func.GetReference(); if (key > 0) { delegateMap[key] = new WeakReference(luaDelegate); } }
public LuaDelegate(LuaFunction func, LuaTable self) { this.func = func; this.func.AddRef(); this.self = self; this.self.AddRef(); reference = func.GetReference(); method = null; count = 1; }
public LuaDelegate GetLuaDelegate(LuaFunction func) { WeakReference weak = null; int reference = func.GetReference(); if (delegateMap.TryGetValue(reference, out weak)) { if (weak.IsAlive) { return(weak.Target as LuaDelegate); } delegateMap.Remove(reference); } return(null); }