clang 20.0.0 (based on r547379) from build 12806354. Bug: http://b/379133546 Test: N/A Change-Id: I2eb8938af55d809de674be63cb30cf27e801862b Upstream-Commit: ad834e67b1105d15ef907f6255d4c96e8e733f57
88 lines
2.7 KiB
C++
88 lines
2.7 KiB
C++
//===- ASTImporterSharedState.h - ASTImporter specific state --*- C++ -*---===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the ASTImporter specific state, which may be shared
|
|
// amongst several ASTImporter objects.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_AST_ASTIMPORTERSHAREDSTATE_H
|
|
#define LLVM_CLANG_AST_ASTIMPORTERSHAREDSTATE_H
|
|
|
|
#include "clang/AST/ASTImportError.h"
|
|
#include "clang/AST/ASTImporterLookupTable.h"
|
|
#include "clang/AST/Decl.h"
|
|
#include "llvm/ADT/DenseMap.h"
|
|
#include <optional>
|
|
|
|
namespace clang {
|
|
|
|
class TranslationUnitDecl;
|
|
|
|
/// Importer specific state, which may be shared amongst several ASTImporter
|
|
/// objects.
|
|
class ASTImporterSharedState {
|
|
|
|
/// Pointer to the import specific lookup table.
|
|
std::unique_ptr<ASTImporterLookupTable> LookupTable;
|
|
|
|
/// Mapping from the already-imported declarations in the "to"
|
|
/// context to the error status of the import of that declaration.
|
|
/// This map contains only the declarations that were not correctly
|
|
/// imported. The same declaration may or may not be included in
|
|
/// ImportedFromDecls. This map is updated continuously during imports and
|
|
/// never cleared (like ImportedFromDecls).
|
|
llvm::DenseMap<Decl *, ASTImportError> ImportErrors;
|
|
|
|
/// Set of the newly created declarations.
|
|
llvm::DenseSet<Decl *> NewDecls;
|
|
|
|
// FIXME put ImportedFromDecls here!
|
|
// And from that point we can better encapsulate the lookup table.
|
|
|
|
public:
|
|
ASTImporterSharedState() = default;
|
|
|
|
ASTImporterSharedState(TranslationUnitDecl &ToTU) {
|
|
LookupTable = std::make_unique<ASTImporterLookupTable>(ToTU);
|
|
}
|
|
|
|
ASTImporterLookupTable *getLookupTable() { return LookupTable.get(); }
|
|
|
|
void addDeclToLookup(Decl *D) {
|
|
if (LookupTable)
|
|
if (auto *ND = dyn_cast<NamedDecl>(D))
|
|
LookupTable->add(ND);
|
|
}
|
|
|
|
void removeDeclFromLookup(Decl *D) {
|
|
if (LookupTable)
|
|
if (auto *ND = dyn_cast<NamedDecl>(D))
|
|
LookupTable->remove(ND);
|
|
}
|
|
|
|
std::optional<ASTImportError> getImportDeclErrorIfAny(Decl *ToD) const {
|
|
auto Pos = ImportErrors.find(ToD);
|
|
if (Pos != ImportErrors.end())
|
|
return Pos->second;
|
|
else
|
|
return std::nullopt;
|
|
}
|
|
|
|
void setImportDeclError(Decl *To, ASTImportError Error) {
|
|
ImportErrors[To] = Error;
|
|
}
|
|
|
|
bool isNewDecl(const Decl *ToD) const { return NewDecls.count(ToD); }
|
|
|
|
void markAsNewDecl(Decl *ToD) { NewDecls.insert(ToD); }
|
|
};
|
|
|
|
} // namespace clang
|
|
#endif // LLVM_CLANG_AST_ASTIMPORTERSHAREDSTATE_H
|