[cfe-commits] r95805 - /cfe/trunk/lib/AST/ASTImporter.cpp
Douglas Gregor
dgregor at apple.com
Wed Feb 10 13:10:29 PST 2010
Author: dgregor
Date: Wed Feb 10 15:10:29 2010
New Revision: 95805
URL: http://llvm.org/viewvc/llvm-project?rev=95805&view=rev
Log:
Move TypedefDecl importer to match the ordering in DeclNodes. No functionality change.
Modified:
cfe/trunk/lib/AST/ASTImporter.cpp
Modified: cfe/trunk/lib/AST/ASTImporter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=95805&r1=95804&r2=95805&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTImporter.cpp (original)
+++ cfe/trunk/lib/AST/ASTImporter.cpp Wed Feb 10 15:10:29 2010
@@ -81,10 +81,10 @@
DeclarationName &Name, SourceLocation &Loc,
QualType &T);
Decl *VisitDecl(Decl *D);
+ Decl *VisitTypedefDecl(TypedefDecl *D);
Decl *VisitFunctionDecl(FunctionDecl *D);
Decl *VisitVarDecl(VarDecl *D);
Decl *VisitParmVarDecl(ParmVarDecl *D);
- Decl *VisitTypedefDecl(TypedefDecl *D);
};
}
@@ -506,6 +506,61 @@
return 0;
}
+Decl *ASTNodeImporter::VisitTypedefDecl(TypedefDecl *D) {
+ // Import the major distinguishing characteristics of this typedef.
+ DeclContext *DC, *LexicalDC;
+ DeclarationName Name;
+ SourceLocation Loc;
+ if (ImportDeclParts(D, DC, LexicalDC, Name, Loc))
+ return 0;
+
+ // Import the underlying type of this typedef;
+ QualType T = Importer.Import(D->getUnderlyingType());
+ if (T.isNull())
+ return 0;
+
+ // If this typedef is not in block scope, determine whether we've
+ // seen a typedef with the same name (that we can merge with) or any
+ // other entity by that name (which name lookup could conflict with).
+ if (!DC->isFunctionOrMethod()) {
+ llvm::SmallVector<NamedDecl *, 4> ConflictingDecls;
+ unsigned IDNS = Decl::IDNS_Ordinary;
+ for (DeclContext::lookup_result Lookup = DC->lookup(Name);
+ Lookup.first != Lookup.second;
+ ++Lookup.first) {
+ if (!(*Lookup.first)->isInIdentifierNamespace(IDNS))
+ continue;
+ if (TypedefDecl *FoundTypedef = dyn_cast<TypedefDecl>(*Lookup.first)) {
+ if (Importer.getToContext().typesAreCompatible(T,
+ FoundTypedef->getUnderlyingType())) {
+ Importer.getImportedDecls()[D] = FoundTypedef;
+ return FoundTypedef;
+ }
+ }
+
+ ConflictingDecls.push_back(*Lookup.first);
+ }
+
+ if (!ConflictingDecls.empty()) {
+ Name = Importer.HandleNameConflict(Name, DC, IDNS,
+ ConflictingDecls.data(),
+ ConflictingDecls.size());
+ if (!Name)
+ return 0;
+ }
+ }
+
+ // Create the new typedef node.
+ TypeSourceInfo *TInfo = Importer.Import(D->getTypeSourceInfo());
+ TypedefDecl *ToTypedef = TypedefDecl::Create(Importer.getToContext(), DC,
+ Loc, Name.getAsIdentifierInfo(),
+ TInfo);
+ ToTypedef->setLexicalDeclContext(LexicalDC);
+ Importer.getImportedDecls()[D] = ToTypedef;
+ LexicalDC->addDecl(ToTypedef);
+ return ToTypedef;
+}
+
Decl *ASTNodeImporter::VisitFunctionDecl(FunctionDecl *D) {
// Import the major distinguishing characteristics of this function.
DeclContext *DC, *LexicalDC;
@@ -745,61 +800,6 @@
return ToParm;
}
-Decl *ASTNodeImporter::VisitTypedefDecl(TypedefDecl *D) {
- // Import the major distinguishing characteristics of this typedef.
- DeclContext *DC, *LexicalDC;
- DeclarationName Name;
- SourceLocation Loc;
- if (ImportDeclParts(D, DC, LexicalDC, Name, Loc))
- return 0;
-
- // Import the underlying type of this typedef;
- QualType T = Importer.Import(D->getUnderlyingType());
- if (T.isNull())
- return 0;
-
- // If this typedef is not in block scope, determine whether we've
- // seen a typedef with the same name (that we can merge with) or any
- // other entity by that name (which name lookup could conflict with).
- if (!DC->isFunctionOrMethod()) {
- llvm::SmallVector<NamedDecl *, 4> ConflictingDecls;
- unsigned IDNS = Decl::IDNS_Ordinary;
- for (DeclContext::lookup_result Lookup = DC->lookup(Name);
- Lookup.first != Lookup.second;
- ++Lookup.first) {
- if (!(*Lookup.first)->isInIdentifierNamespace(IDNS))
- continue;
- if (TypedefDecl *FoundTypedef = dyn_cast<TypedefDecl>(*Lookup.first)) {
- if (Importer.getToContext().typesAreCompatible(T,
- FoundTypedef->getUnderlyingType())) {
- Importer.getImportedDecls()[D] = FoundTypedef;
- return FoundTypedef;
- }
- }
-
- ConflictingDecls.push_back(*Lookup.first);
- }
-
- if (!ConflictingDecls.empty()) {
- Name = Importer.HandleNameConflict(Name, DC, IDNS,
- ConflictingDecls.data(),
- ConflictingDecls.size());
- if (!Name)
- return 0;
- }
- }
-
- // Create the new typedef node.
- TypeSourceInfo *TInfo = Importer.Import(D->getTypeSourceInfo());
- TypedefDecl *ToTypedef = TypedefDecl::Create(Importer.getToContext(), DC,
- Loc, Name.getAsIdentifierInfo(),
- TInfo);
- ToTypedef->setLexicalDeclContext(LexicalDC);
- Importer.getImportedDecls()[D] = ToTypedef;
- LexicalDC->addDecl(ToTypedef);
- return ToTypedef;
-}
-
ASTImporter::ASTImporter(ASTContext &ToContext, FileManager &ToFileManager,
Diagnostic &ToDiags,
ASTContext &FromContext, FileManager &FromFileManager,
More information about the cfe-commits
mailing list