int RemoveDeadBlocks() { int numDeadBlocks = 0; var infos = new Dictionary <ScopeBlock, ScopeBlockInfo>(); var deadBlocksDict = new Dictionary <BaseBlock, bool>(); foreach (var baseBlock in FindDeadBlocks()) { deadBlocksDict[baseBlock] = true; ScopeBlock parent = baseBlock.Parent; ScopeBlockInfo info; if (!infos.TryGetValue(parent, out info)) { infos[parent] = info = new ScopeBlockInfo(parent); } info.deadBlocks.Add(baseBlock); numDeadBlocks++; } foreach (var info in infos.Values) { info.scopeBlock.RemoveAllDeadBlocks(info.deadBlocks, deadBlocksDict); } return(numDeadBlocks); }
int RemoveDeadBlocks() { int numDeadBlocks = 0; var infos = new Dictionary<ScopeBlock, ScopeBlockInfo>(); var deadBlocksDict = new Dictionary<BaseBlock, bool>(); foreach (var baseBlock in FindDeadBlocks()) { deadBlocksDict[baseBlock] = true; ScopeBlock parent = baseBlock.Parent; ScopeBlockInfo info; if (!infos.TryGetValue(parent, out info)) infos[parent] = info = new ScopeBlockInfo(parent); info.deadBlocks.Add(baseBlock); numDeadBlocks++; } foreach (var info in infos.Values) info.scopeBlock.RemoveAllDeadBlocks(info.deadBlocks, deadBlocksDict); return numDeadBlocks; }