private static void _Kill(Script tokill) { if (tokill.m_isAlive) { if (tokill.OnScriptKilled != null) { tokill.OnScriptKilled(tokill); } tokill.m_MainProcessor = null; tokill.m_ByteCode = null; tokill.m_Sources = null; for (int i = 0; i != tokill._childClosures.Count; i++) { WeakReference wr = tokill._childClosures[i]; if (wr.IsAlive) { Closure c = (Closure)wr.Target; Closure.Kill(ref c); } } tokill._childClosures.Clear(); tokill._childClosures = null; for (int i = 0; i != tokill._childTables.Count; i++) { WeakReference wr = tokill._childTables[i]; if (wr.IsAlive) { Table t = (Table)wr.Target; Table.Kill(ref t); } } tokill._childTables.Clear(); tokill._childTables = null; Table.Kill(ref tokill.m_GlobalTable); tokill.m_Debugger = null; if (tokill.m_TypeMetatables != null) { for (int i = 0; i != tokill.m_TypeMetatables.Length; i++) { Table.Kill(ref tokill.m_TypeMetatables[i]); } } tokill.m_TypeMetatables = null; tokill.m_isAlive = false; } }