]> granicus.if.org Git - clang/commitdiff
Add
authorAnders Carlsson <andersca@mac.com>
Thu, 26 Mar 2009 23:46:50 +0000 (23:46 +0000)
committerAnders Carlsson <andersca@mac.com>
Thu, 26 Mar 2009 23:46:50 +0000 (23:46 +0000)
const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
                                    AccessSpecifier AS);

so we can easily add access specifiers to diagnostics.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67795 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclCXX.h
include/clang/Basic/Diagnostic.h
lib/AST/DeclCXX.cpp
lib/Sema/SemaDeclCXX.cpp

index e1f1095d3d9a95cd428eaec41dd75d8928e8119c..940d95ca439c7e1901781872b2768472a720b79a 100644 (file)
@@ -980,6 +980,11 @@ public:
   }
   static bool classof(StaticAssertDecl *D) { return true; }
 };
+
+/// Insertion operator for diagnostics.  This allows sending AccessSpecifier's
+/// into a diagnostic with <<.
+const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+                                    AccessSpecifier AS);
   
 } // end namespace clang
 
index a9f87107ab5aede584dfaaffd1014371869411e4..c6c9e394f5fbee133ce3ee9edec424c7824edd5d 100644 (file)
@@ -144,7 +144,8 @@ public:
     ak_identifierinfo,  // IdentifierInfo
     ak_qualtype,        // QualType
     ak_declarationname, // DeclarationName
-    ak_nameddecl        // NamedDecl *
+    ak_nameddecl,       // NamedDecl *
+    ak_accessspecifier  // AccessSpecifier
   };
 
 private:  
index 98d7d8f48731e5eb5148615fc48b77558d35e8d7..7c5dbced3117984b0c0f53af671980ce8ca06a76 100644 (file)
@@ -377,3 +377,24 @@ void StaticAssertDecl::Destroy(ASTContext& C) {
 StaticAssertDecl::~StaticAssertDecl() {
 }
 
+static const char *getAccessName(AccessSpecifier AS) {
+  switch (AS) {
+    default:
+    case AS_none:
+      assert("Invalid access specifier!");
+      return 0;
+    case AS_public:
+      return "public";
+    case AS_private:
+      return "private";
+    case AS_protected:
+      return "protected";
+  }
+}
+
+const DiagnosticBuilder &clang::operator<<(const DiagnosticBuilder &DB,
+                                           AccessSpecifier AS) {
+  return DB << getAccessName(AS);
+}
+
+
index 11ab071c586ae9ab649b1b6bf0150b7ea353fcae..cb44cfc186a3c39e0d04f5c79f8e0dc09883d1df 100644 (file)
@@ -2530,21 +2530,6 @@ void Sema::SetDeclDeleted(DeclTy *dcl, SourceLocation DelLoc) {
   Fn->setDeleted();
 }
 
-static const char *getAccessName(AccessSpecifier AS) {
-  switch (AS) {
-    default:
-    case AS_none:
-      assert("Invalid access specifier!");
-      return 0;
-    case AS_public:
-      return "public";
-    case AS_private:
-      return "private";
-    case AS_protected:
-      return "protected";
-  }
-}
-
 bool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, 
                                     NamedDecl *PrevMemberDecl,
                                     AccessSpecifier LexicalAS) {
@@ -2559,9 +2544,9 @@ bool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl,
   if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) {
     Diag(MemberDecl->getLocation(), 
          diag::err_class_redeclared_with_different_access) 
-      << MemberDecl << getAccessName(LexicalAS);
+      << MemberDecl << LexicalAS;
     Diag(PrevMemberDecl->getLocation(), diag::note_previous_access_declaration)
-      << PrevMemberDecl << getAccessName(PrevMemberDecl->getAccess());
+      << PrevMemberDecl << PrevMemberDecl->getAccess();
     return true;
   }