forked from OSchip/llvm-project
parent
4583dfc651
commit
f65bbb31e8
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue