git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95543 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2010-02-08 15:18:58 +00:00
Родитель 6f8c430a95
Коммит 169fba50da
2 изменённых файлов: 15 добавлений и 2 удалений

Просмотреть файл

@ -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<Type *, Type *> ImportedTypes;
public:
ASTImporter(ASTContext &ToContext, Diagnostic &ToDiags,
ASTContext &FromContext, Diagnostic &FromDiags);

Просмотреть файл

@ -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());
}