private ulong GetDependOrder(CompileUnit unit, HashSet <string> stackUnitNames = null) { ulong depOrder = unit.DependOrder; if (depOrder != 0) { return(depOrder); } string unitName = unit.Name; if (stackUnitNames != null && stackUnitNames.Contains(unitName)) { return(0); } if (stackUnitNames == null) { stackUnitNames = new HashSet <string>(); } stackUnitNames.Add(unitName); unit.Optimize(UnitMap); foreach (string dep in unit.DeclDepends) { var depUnit = GetUnitFromMap(dep); if (depUnit != null) { depOrder += GetDependOrder(depUnit, stackUnitNames); } } ++depOrder; unit.DependOrder = depOrder; return(depOrder); }
private uint GetDependOrder(CompileUnit unit) { uint depOrder = unit.DependOrder; if (depOrder != 0) { return(depOrder); } unit.Optimize(UnitMap); foreach (string dep in unit.DeclDepends) { depOrder += GetDependOrder(UnitMap[dep]); } ++depOrder; unit.DependOrder = depOrder; return(depOrder); }