Lines Matching +full:data +full:- +full:mapping

1 //===--- StandardLibrary.cpp ------------------------------------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
24 // Symbol name -> Symbol::ID, within a namespace.
27 // A Mapping per language.
36 const char *Data; // std::vector
39 StringRef scope() const { return StringRef(Data, ScopeLen); }
40 StringRef name() const { return StringRef(Data + ScopeLen, NameLen); }
42 return StringRef(Data, ScopeLen + NameLen);
45 // Symbol name -> Symbol::ID, within a namespace.
84 SymbolHeaderMapping *Mapping = new SymbolHeaderMapping();
85 LanguageMappings[static_cast<unsigned>(Language)] = Mapping;
88 Mapping->SymbolCount = SymCount;
89 Mapping->SymbolNames =
90 new std::remove_reference_t<decltype(*Mapping->SymbolNames)>[SymCount];
91 Mapping->SymbolHeaderIDs = new std::remove_reference_t<
92 decltype(*Mapping->SymbolHeaderIDs)>[SymCount];
93 Mapping->NamespaceSymbols =
94 new std::remove_reference_t<decltype(*Mapping->NamespaceSymbols)>;
95 Mapping->HeaderIDs =
96 new std::remove_reference_t<decltype(*Mapping->HeaderIDs)>;
97 auto AddNS = [&](llvm::StringRef NS) -> NSSymbolMap & {
98 auto R = Mapping->NamespaceSymbols->try_emplace(NS, nullptr);
100 R.first->second = new NSSymbolMap();
101 return *R.first->second;
104 auto AddHeader = [&](llvm::StringRef Header) -> unsigned {
105 return Mapping->HeaderIDs->try_emplace(Header, Mapping->HeaderIDs->size())
106 .first->second;
109 auto Add = [&, SymIndex(-1)](llvm::StringRef QName, unsigned NSLen,
112 // FIXME: get rid of "None" from the generated mapping files.
119 Mapping->SymbolNames[SymIndex].qualifiedName() == QName) {
121 assert(llvm::none_of(llvm::ArrayRef(Mapping->SymbolNames, SymIndex),
131 Mapping->SymbolNames[SymIndex] = {
132 QName.data(), NSLen, static_cast<unsigned int>(QName.size() - NSLen)};
134 Mapping->SymbolHeaderIDs[SymIndex].push_back(AddHeader(HeaderName));
171 Mapping->HeaderNames = new llvm::StringRef[Mapping->HeaderIDs->size()];
172 for (const auto &E : *Mapping->HeaderIDs)
173 Mapping->HeaderNames[E.second] = E.first;
190 const auto *Mapping = getMappingPerLang(L);
191 Result.reserve(Mapping->HeaderIDs->size());
192 for (unsigned I = 0, E = Mapping->HeaderIDs->size(); I < E; ++I)
198 const auto *Mapping = getMappingPerLang(L);
199 auto It = Mapping->HeaderIDs->find(Name);
200 if (It == Mapping->HeaderIDs->end())
202 return Header(It->second, L);
205 return getMappingPerLang(Language)->HeaderNames[ID];
211 const auto *Mapping = getMappingPerLang(L);
212 Result.reserve(Mapping->SymbolCount);
213 for (unsigned I = 0, E = Mapping->SymbolCount; I < E; ++I)
218 return getMappingPerLang(Language)->SymbolNames[ID].scope();
221 return getMappingPerLang(Language)->SymbolNames[ID].name();
224 return getMappingPerLang(Language)->SymbolNames[ID].qualifiedName();
231 getMappingPerLang(L)->NamespaceSymbols->lookup(Scope)) {
232 auto It = NSSymbols->find(Name);
233 if (It != NSSymbols->end())
234 return Symbol(It->second, L);
239 const auto& Headers = getMappingPerLang(Language)->SymbolHeaderIDs[ID];
246 for (auto HeaderID : getMappingPerLang(Language)->SymbolHeaderIDs[ID])
254 if (DC->isTranslationUnit()) // global scope.
255 return getMappingPerLang(L)->NamespaceSymbols->lookup("");
259 return It->second;
261 NSSymbolMap *Result = [&]() -> NSSymbolMap * {
262 if (D->isAnonymousNamespace())
267 ND = llvm::dyn_cast_or_null<NamespaceDecl>(ND->getParent()))
268 if (!ND->isInlineNamespace() && !ND->isAnonymousNamespace())
269 Scope = ND->getName().str() + "::" + Scope;
270 return getMappingPerLang(L)->NamespaceSymbols->lookup(Scope);
278 if (D->getLangOpts().CPlusPlus)
280 else if (D->getLangOpts().C99)
289 const DeclContext *DC = D->getDeclContext();
292 while (!DC->isNamespace() && !DC->isTranslationUnit()) {
293 if (NamedDecl::classofKind(DC->getDeclKind()))
295 DC = DC->getParent();
301 llvm::StringRef Name = [&]() -> llvm::StringRef {
303 DeclarationName N = cast<NamedDecl>(SymDC)->getDeclName();
305 return II->getName();
310 if (const auto *II = ND->getIdentifier())
311 return II->getName();
317 auto It = Symbols->find(Name);
318 if (It == Symbols->end())
320 return Symbol(It->second, L);