LGTM, but you should really wait for John, Reid, and Richard to weigh in.


================
Comment at: include/clang/AST/Decl.h:2672-2688
@@ -2668,6 +2671,19 @@
 
+  bool hasDeclaratorForAnonDecl() const {
+    return dyn_cast_or_null<DeclaratorDecl>(
+        NamedDeclOrQualifier.get<NamedDecl *>());
+  }
+  const DeclaratorDecl *getDeclaratorForAnonDecl() const {
+    return hasExtInfo() ? 0 : dyn_cast_or_null<DeclaratorDecl>(
+                                  NamedDeclOrQualifier.get<NamedDecl *>());
+  }
+  DeclaratorDecl *getDeclaratorForAnonDecl() {
+    return hasExtInfo() ? 0 : dyn_cast_or_null<DeclaratorDecl>(
+                                  NamedDeclOrQualifier.get<NamedDecl *>());
+  }
+
   TypedefNameDecl *getTypedefNameForAnonDecl() const {
-    return hasExtInfo() ? 0 :
-           TypedefNameDeclOrQualifier.get<TypedefNameDecl*>();
+    return hasExtInfo() ? 0 : dyn_cast_or_null<TypedefNameDecl>(
+                                  NamedDeclOrQualifier.get<NamedDecl *>());
   }
 
----------------
This is ugly. It seems to me that it should be possible to just say:

  lang=c++
  NamedDeclOrQualifier.dyn_cast<DeclaratorDecl *>()

instead of having to explicitly grab the `NamedDecl` pointer, then 
`dyn_cast_or_null` it to `DeclaratorDecl`. But this is a limitation of 
`llvm::PointerUnion` anyway; nothing we can do about it here.



http://llvm-reviews.chandlerc.com/D1540
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to