/// <summary> /// Gets the symbol from the cache or adds new entry in the cache if symbol wasn't previously found. /// </summary> /// <param name="symbol">The symbol.</param> internal Symbol GetSymbol(IDiaSymbol symbol) { if (symbol == null) { return(null); } Symbol s; uint symbolId = symbol.symIndexId; if (!symbolById.TryGetValue(symbolId, out s)) { s = new Symbol(this, symbol); lock (this) { Symbol previousSymbol = null; symbolById.TryAdd(symbolId, s); if (s.Tag != SymTagEnum.SymTagExe) { if (!symbolByName.TryGetValue(s.Name, out previousSymbol)) { symbolByName.TryAdd(s.Name, s); } else { previousSymbol.LinkSymbols(s); } } } s.InitializeCache(); } return(s); }
/// <summary> /// Gets the symbol from the cache or adds new entry in the cache if symbol wasn't previously found. /// </summary> /// <param name="symbol">The symbol.</param> internal Symbol GetSymbol(IDiaSymbol symbol) { if (symbol == null) return null; Symbol s; uint symbolId = symbol.symIndexId; if (!symbolById.TryGetValue(symbolId, out s)) { s = new Symbol(this, symbol); lock (this) { Symbol previousSymbol = null; symbolById.TryAdd(symbolId, s); if (s.Tag != SymTagEnum.SymTagExe) if (!symbolByName.TryGetValue(s.Name, out previousSymbol)) { symbolByName.TryAdd(s.Name, s); } else { previousSymbol.LinkSymbols(s); } } s.InitializeCache(); } return s; }