diff options
Diffstat (limited to 'lib/AST/DeclPrinter.cpp')
| -rw-r--r-- | lib/AST/DeclPrinter.cpp | 54 | 
1 files changed, 25 insertions, 29 deletions
diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index 74e1c1bb9df9..aad0ca1b536e 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -114,6 +114,8 @@ static QualType GetBaseType(QualType T) {        BaseType = FTy->getResultType();      else if (const VectorType *VTy = BaseType->getAs<VectorType>())        BaseType = VTy->getElementType(); +    else if (const ReferenceType *RTy = BaseType->getAs<ReferenceType>()) +      BaseType = RTy->getPointeeType();      else        llvm_unreachable("Unknown declarator!");    } @@ -173,8 +175,10 @@ void DeclContext::dumpDeclContext() const {    Printer.VisitDeclContext(const_cast<DeclContext *>(this), /*Indent=*/false);  } -void Decl::dump() const { -  print(llvm::errs()); +void Decl::dump(raw_ostream &Out) const { +  PrintingPolicy Policy = getASTContext().getPrintingPolicy(); +  Policy.Dump = true; +  print(Out, Policy, /*Indentation*/ 0, /*PrintInstantiation*/ true);  }  raw_ostream& DeclPrinter::Indent(unsigned Indentation) { @@ -322,15 +326,13 @@ void DeclPrinter::VisitTranslationUnitDecl(TranslationUnitDecl *D) {  }  void DeclPrinter::VisitTypedefDecl(TypedefDecl *D) { -  std::string S = D->getNameAsString(); -  D->getUnderlyingType().getAsStringInternal(S, Policy);    if (!Policy.SuppressSpecifiers) {      Out << "typedef ";      if (D->isModulePrivate())        Out << "__module_private__ ";    } -  Out << S; +  D->getUnderlyingType().print(Out, Policy, D->getName());    prettyPrintAttributes(D);  } @@ -350,11 +352,8 @@ void DeclPrinter::VisitEnumDecl(EnumDecl *D) {    }    Out << *D; -  if (D->isFixed()) { -    std::string Underlying; -    D->getIntegerType().getAsStringInternal(Underlying, Policy); -    Out << " : " << Underlying; -  } +  if (D->isFixed()) +    Out << " : " << D->getIntegerType().stream(Policy);    if (D->isCompleteDefinition()) {      Out << " {\n"; @@ -441,13 +440,12 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {      Proto += ")"; -    if (FT && FT->getTypeQuals()) { -      unsigned TypeQuals = FT->getTypeQuals(); -      if (TypeQuals & Qualifiers::Const) +    if (FT) { +      if (FT->isConst())          Proto += " const"; -      if (TypeQuals & Qualifiers::Volatile)  +      if (FT->isVolatile())          Proto += " volatile"; -      if (TypeQuals & Qualifiers::Restrict) +      if (FT->isRestrict())          Proto += " restrict";      } @@ -460,9 +458,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {            if (I)              Proto += ", "; -          std::string ExceptionType; -          FT->getExceptionType(I).getAsStringInternal(ExceptionType, SubPolicy); -          Proto += ExceptionType; +          Proto += FT->getExceptionType(I).getAsString(SubPolicy);;          }        Proto += ")";      } else if (FT && isNoexceptExceptionSpec(FT->getExceptionSpecType())) { @@ -542,12 +538,11 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) {        }      }      else -      AFT->getResultType().getAsStringInternal(Proto, Policy); +      AFT->getResultType().print(Out, Policy, Proto);    } else { -    Ty.getAsStringInternal(Proto, Policy); +    Ty.print(Out, Policy, Proto);    } -  Out << Proto;    prettyPrintAttributes(D);    if (D->isPure()) @@ -581,9 +576,7 @@ void DeclPrinter::VisitFieldDecl(FieldDecl *D) {    if (!Policy.SuppressSpecifiers && D->isModulePrivate())      Out << "__module_private__ "; -  std::string Name = D->getNameAsString(); -  D->getType().getAsStringInternal(Name, Policy); -  Out << Name; +  Out << D->getType().stream(Policy, D->getName());    if (D->isBitField()) {      Out << " : "; @@ -592,7 +585,10 @@ void DeclPrinter::VisitFieldDecl(FieldDecl *D) {    Expr *Init = D->getInClassInitializer();    if (!Policy.SuppressInitializers && Init) { -    Out << " = "; +    if (D->getInClassInitStyle() == ICIS_ListInit) +      Out << " "; +    else +      Out << " = ";      Init->printPretty(Out, Context, 0, Policy, Indentation);    }    prettyPrintAttributes(D); @@ -613,12 +609,10 @@ void DeclPrinter::VisitVarDecl(VarDecl *D) {    if (!Policy.SuppressSpecifiers && D->isModulePrivate())      Out << "__module_private__ "; -  std::string Name = D->getNameAsString();    QualType T = D->getType();    if (ParmVarDecl *Parm = dyn_cast<ParmVarDecl>(D))      T = Parm->getOriginalType(); -  T.getAsStringInternal(Name, Policy); -  Out << Name; +  T.print(Out, Policy, D->getName());    Expr *Init = D->getInit();    if (!Policy.SuppressInitializers && Init) {      bool ImplicitInit = false; @@ -666,6 +660,8 @@ void DeclPrinter::VisitStaticAssertDecl(StaticAssertDecl *D) {  // C++ declarations  //----------------------------------------------------------------------------  void DeclPrinter::VisitNamespaceDecl(NamespaceDecl *D) { +  if (D->isInline()) +    Out << "inline ";    Out << "namespace " << *D << " {\n";    VisitDeclContext(D);    Indent() << "}"; @@ -923,7 +919,7 @@ void DeclPrinter::VisitObjCInterfaceDecl(ObjCInterfaceDecl *OID) {      Indentation += Policy.Indentation;      for (ObjCInterfaceDecl::ivar_iterator I = OID->ivar_begin(),           E = OID->ivar_end(); I != E; ++I) { -      Indent() << (*I)->getType().getAsString(Policy) << ' ' << **I << ";\n"; +      Indent() << I->getType().getAsString(Policy) << ' ' << **I << ";\n";      }      Indentation -= Policy.Indentation;      Out << "}\n";  | 
