diff options
Diffstat (limited to 'clang-tools-extra/clangd/index/Index.cpp')
-rw-r--r-- | clang-tools-extra/clangd/index/Index.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/clang-tools-extra/clangd/index/Index.cpp b/clang-tools-extra/clangd/index/Index.cpp index f609056f639..95ecb6b18ec 100644 --- a/clang-tools-extra/clangd/index/Index.cpp +++ b/clang-tools-extra/clangd/index/Index.cpp @@ -38,9 +38,17 @@ SymbolSlab::const_iterator SymbolSlab::find(const SymbolID &SymID) const { void SymbolSlab::freeze() { Frozen = true; } -void SymbolSlab::insert(Symbol S) { +void SymbolSlab::insert(const Symbol &S) { assert(!Frozen && "Can't insert a symbol after the slab has been frozen!"); - Symbols[S.ID] = std::move(S); + auto ItInserted = Symbols.try_emplace(S.ID, S); + if (!ItInserted.second) + return; + auto &Sym = ItInserted.first->second; + + // We inserted a new symbol, so copy the underlying data. + intern(Sym.Name); + intern(Sym.Scope); + intern(Sym.CanonicalDeclaration.FilePath); } } // namespace clangd |