diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-02-08 15:18:58 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-02-08 15:18:58 +0000 |
commit | 169fba50da76d71723cd1d91629cabb310f8bf9e (patch) | |
tree | 931df0b29a960b5e5d0196d9a811970fd9f2d8a3 /lib | |
parent | 6f8c430a95279ef048a356d6283871477b4ad351 (diff) |
Cache imported types
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95543 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/ASTImporter.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
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<Type *, Type *>::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()); } |