/// <returns>Hashtable<Namespace,ArrayList<TerminalName>></returns> private static ReadOnlyDictionary CreateNamespaceToVariablesAllocatedTherein(IEnumerable liveLocalNonParameterVariableNames) { var result=new Hashtable(); foreach(TerminalName name in liveLocalNonParameterVariableNames) { result.LookupOrCreateArrayList(name.Namespace).Add(name); } return result.AsReadOnlyDictionary(); }
/// <summary> /// Basically: liveVariables.Select(lv=>lv.Namespace).GroupBy(ns=>ns.Depth) /// </summary> /// <returns>Hashtable<int,ArrayList<Namespace>></returns> private static ReadOnlyDictionary MakeDepthToNamespaces(IEnumerable liveLocalNonParameterVariableNames, out int maxDepth) { var result=new Hashtable(); var beenHere=new Hashtable(); maxDepth=-1; foreach(TerminalName name in liveLocalNonParameterVariableNames) { var ns=name.Namespace; maxDepth=Math.Max(maxDepth, ns.Depth); while(ns!=null) { if(beenHere.Contains(ns)) { break; } beenHere.Add(ns, null); result.LookupOrCreateArrayList(ns.Depth).Add(ns); ns=ns.Inner; } } return result.AsReadOnlyDictionary(); }