diff options
Diffstat (limited to 'lib/AST/ASTDumper.cpp')
| -rw-r--r-- | lib/AST/ASTDumper.cpp | 56 | 
1 files changed, 51 insertions, 5 deletions
| diff --git a/lib/AST/ASTDumper.cpp b/lib/AST/ASTDumper.cpp index ebf5e651ef9a..60cbb0601138 100644 --- a/lib/AST/ASTDumper.cpp +++ b/lib/AST/ASTDumper.cpp @@ -508,6 +508,8 @@ namespace  {      void VisitCXXFunctionalCastExpr(const CXXFunctionalCastExpr *Node);      void VisitCXXConstructExpr(const CXXConstructExpr *Node);      void VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *Node); +    void VisitCXXNewExpr(const CXXNewExpr *Node); +    void VisitCXXDeleteExpr(const CXXDeleteExpr *Node);      void VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *Node);      void VisitExprWithCleanups(const ExprWithCleanups *Node);      void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *Node); @@ -516,6 +518,7 @@ namespace  {        VisitExpr(Node);        dumpDecl(Node->getLambdaClass());      } +    void VisitSizeOfPackExpr(const SizeOfPackExpr *Node);      // ObjC      void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node); @@ -974,8 +977,10 @@ void ASTDumper::dumpDecl(const Decl *D) {      dumpSourceRange(D->getSourceRange());      OS << ' ';      dumpLocation(D->getLocation()); -    if (Module *M = D->getOwningModule()) +    if (Module *M = D->getImportedOwningModule())        OS << " in " << M->getFullModuleName(); +    else if (Module *M = D->getLocalOwningModule()) +      OS << " in (local) " << M->getFullModuleName();      if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))        if (ND->isHidden())          OS << " hidden"; @@ -1099,10 +1104,13 @@ void ASTDumper::VisitFunctionDecl(const FunctionDecl *D) {         E = D->getDeclsInPrototypeScope().end(); I != E; ++I)      dumpDecl(*I); -  for (FunctionDecl::param_const_iterator I = D->param_begin(), -                                          E = D->param_end(); -       I != E; ++I) -    dumpDecl(*I); +  if (!D->param_begin() && D->getNumParams()) +    dumpChild([=] { OS << "<<NULL params x " << D->getNumParams() << ">>"; }); +  else +    for (FunctionDecl::param_const_iterator I = D->param_begin(), +                                            E = D->param_end(); +         I != E; ++I) +      dumpDecl(*I);    if (const CXXConstructorDecl *C = dyn_cast<CXXConstructorDecl>(D))      for (CXXConstructorDecl::init_const_iterator I = C->init_begin(), @@ -1913,6 +1921,32 @@ void ASTDumper::VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *Node) {    dumpCXXTemporary(Node->getTemporary());  } +void ASTDumper::VisitCXXNewExpr(const CXXNewExpr *Node) { +  VisitExpr(Node); +  if (Node->isGlobalNew()) +    OS << " global"; +  if (Node->isArray()) +    OS << " array"; +  if (Node->getOperatorNew()) { +    OS << ' '; +    dumpBareDeclRef(Node->getOperatorNew()); +  } +  // We could dump the deallocation function used in case of error, but it's +  // usually not that interesting. +} + +void ASTDumper::VisitCXXDeleteExpr(const CXXDeleteExpr *Node) { +  VisitExpr(Node); +  if (Node->isGlobalDelete()) +    OS << " global"; +  if (Node->isArrayForm()) +    OS << " array"; +  if (Node->getOperatorDelete()) { +    OS << ' '; +    dumpBareDeclRef(Node->getOperatorDelete()); +  } +} +  void  ASTDumper::VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *Node) {    VisitExpr(Node); @@ -1934,6 +1968,13 @@ void ASTDumper::dumpCXXTemporary(const CXXTemporary *Temporary) {    OS << ")";  } +void ASTDumper::VisitSizeOfPackExpr(const SizeOfPackExpr *Node) { +  VisitExpr(Node); +  dumpPointer(Node->getPack()); +  dumpName(Node->getPack()); +} + +  //===----------------------------------------------------------------------===//  // Obj-C Expressions  //===----------------------------------------------------------------------===// @@ -2255,6 +2296,11 @@ LLVM_DUMP_METHOD void Stmt::dump(raw_ostream &OS, SourceManager &SM) const {    P.dumpStmt(this);  } +LLVM_DUMP_METHOD void Stmt::dump(raw_ostream &OS) const { +  ASTDumper P(OS, nullptr, nullptr); +  P.dumpStmt(this); +} +  LLVM_DUMP_METHOD void Stmt::dump() const {    ASTDumper P(llvm::errs(), nullptr, nullptr);    P.dumpStmt(this); | 
