aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/DeclPrinter.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-08-28 22:39:52 +0000
committerAnders Carlsson <andersca@mac.com>2009-08-28 22:39:52 +0000
commit0d59292581dbaa4203451709077de40e0ad72c18 (patch)
tree509d87f51f43e998f64935362cb55bb52303c7e8 /lib/AST/DeclPrinter.cpp
parented656469895ab77177669abe1611dbef8d33b90f (diff)
Add printing of access specifiers to DeclPrinter. The formatting is pretty bad but it works :)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80402 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclPrinter.cpp')
-rw-r--r--lib/AST/DeclPrinter.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp
index 1dea2238bc..51e15bdbe0 100644
--- a/lib/AST/DeclPrinter.cpp
+++ b/lib/AST/DeclPrinter.cpp
@@ -33,6 +33,8 @@ namespace {
llvm::raw_ostream& Indent();
void ProcessDeclGroup(llvm::SmallVectorImpl<Decl*>& Decls);
+ void Print(AccessSpecifier AS);
+
public:
DeclPrinter(llvm::raw_ostream &Out, ASTContext &Context,
const PrintingPolicy &Policy,
@@ -165,6 +167,15 @@ void DeclPrinter::ProcessDeclGroup(llvm::SmallVectorImpl<Decl*>& Decls) {
}
+void DeclPrinter::Print(AccessSpecifier AS) {
+ switch(AS) {
+ case AS_none: break;
+ case AS_public: Out << "public"; break;
+ case AS_protected: Out << "protected"; break;
+ case AS_private: Out << " private"; break;
+ }
+}
+
//----------------------------------------------------------------------------
// Common C declarations
//----------------------------------------------------------------------------
@@ -173,6 +184,9 @@ void DeclPrinter::VisitDeclContext(DeclContext *DC, bool Indent) {
if (Indent)
Indentation += Policy.Indentation;
+ bool PrintAccess = isa<CXXRecordDecl>(DC);
+ AccessSpecifier CurAS = AS_none;
+
llvm::SmallVector<Decl*, 2> Decls;
for (DeclContext::decl_iterator D = DC->decls_begin(), DEnd = DC->decls_end();
D != DEnd; ++D) {
@@ -186,6 +200,15 @@ void DeclPrinter::VisitDeclContext(DeclContext *DC, bool Indent) {
continue;
}
+ if (PrintAccess) {
+ AccessSpecifier AS = D->getAccess();
+ if (AS != CurAS) {
+ Print(AS);
+ Out << ":\n";
+ CurAS = AS;
+ }
+ }
+
// The next bits of code handles stuff like "struct {int x;} a,b"; we're
// forced to merge the declarations because there's no other way to
// refer to the struct in question. This limited merging is safe without
@@ -542,14 +565,8 @@ void DeclPrinter::VisitCXXRecordDecl(CXXRecordDecl *D) {
if (Base->isVirtual())
Out << "virtual ";
- switch(Base->getAccessSpecifierAsWritten()) {
- case AS_none: break;
- case AS_public: Out << "public "; break;
- case AS_protected: Out << "protected "; break;
- case AS_private: Out << " private "; break;
- }
-
- Out << Base->getType().getAsString(Policy);
+ Print(Base->getAccessSpecifierAsWritten());
+ Out << " " << Base->getType().getAsString(Policy);
}
}