From 169fba50da76d71723cd1d91629cabb310f8bf9e Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Mon, 8 Feb 2010 15:18:58 +0000 Subject: [PATCH] Cache imported types git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95543 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/ASTImporter.h | 7 ++++++- lib/AST/ASTImporter.cpp | 10 +++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/include/clang/AST/ASTImporter.h b/include/clang/AST/ASTImporter.h index 7cd6499be3..01ec13470e 100644 --- a/include/clang/AST/ASTImporter.h +++ b/include/clang/AST/ASTImporter.h @@ -17,6 +17,7 @@ #include "clang/AST/Type.h" #include "clang/AST/DeclarationName.h" #include "clang/Basic/SourceLocation.h" +#include "llvm/ADT/DenseMap.h" namespace clang { class ASTContext; @@ -38,7 +39,11 @@ namespace clang { /// \brief The diagnostics object that we should use to emit diagnostics /// within the context we're importing to and from. Diagnostic &ToDiags, &FromDiags; - + + /// \brief Mapping from the already-imported types in the "from" context + /// to the corresponding types in the "to" context. + llvm::DenseMap ImportedTypes; + public: ASTImporter(ASTContext &ToContext, Diagnostic &ToDiags, ASTContext &FromContext, Diagnostic &FromDiags); diff --git a/lib/AST/ASTImporter.cpp b/lib/AST/ASTImporter.cpp index dc3281afba..16fd7e6184 100644 --- a/lib/AST/ASTImporter.cpp +++ b/lib/AST/ASTImporter.cpp @@ -434,13 +434,21 @@ QualType ASTImporter::Import(QualType FromT) { if (FromT.isNull()) return QualType(); - // FIXME: Cache type mappings? + // Check whether we've already imported this type. + llvm::DenseMap::iterator Pos + = ImportedTypes.find(FromT.getTypePtr()); + if (Pos != ImportedTypes.end()) + return ToContext.getQualifiedType(Pos->second, FromT.getQualifiers()); + // Import the type ASTNodeImporter Importer(*this); QualType ToT = Importer.Visit(FromT.getTypePtr()); if (ToT.isNull()) return ToT; + // Record the imported type. + ImportedTypes[FromT.getTypePtr()] = ToT.getTypePtr(); + return ToContext.getQualifiedType(ToT, FromT.getQualifiers()); } -- 2.40.0