[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