Revert "[clang][NFC] Store a pointer to the ASTContext in ASTDumper and TextNodeDumper"
authorBruno Ricci <riccibrun@gmail.com>
Thu, 2 Jul 2020 18:38:46 +0000 (19:38 +0100)
committerBruno Ricci <riccibrun@gmail.com>
Thu, 2 Jul 2020 18:40:09 +0000 (19:40 +0100)
This reverts commit aa7fd905e4e1bc510448431da9310e8cf5197523.

I missed some dump() functions.

19 files changed:
clang-tools-extra/clang-query/Query.cpp
clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp
clang/include/clang/AST/APValue.h
clang/include/clang/AST/ASTDumper.h
clang/include/clang/AST/ASTTypeTraits.h
clang/include/clang/AST/Comment.h
clang/include/clang/AST/Stmt.h
clang/include/clang/AST/TextNodeDumper.h
clang/include/clang/AST/Type.h
clang/lib/AST/APValue.cpp
clang/lib/AST/ASTDumper.cpp
clang/lib/AST/ASTTypeTraits.cpp
clang/lib/AST/TextNodeDumper.cpp
clang/lib/ASTMatchers/ASTMatchFinder.cpp
clang/lib/CodeGen/CGExprComplex.cpp
clang/lib/CodeGen/CGExprScalar.cpp
clang/lib/Frontend/ASTConsumers.cpp
clang/unittests/AST/CommentParser.cpp
clang/unittests/AST/MatchVerifier.h

index 4fe7110..2fc7af6 100644 (file)
@@ -157,7 +157,8 @@ bool MatchQuery::run(llvm::raw_ostream &OS, QuerySession &QS) const {
           OS << "Binding for \"" << BI->first << "\":\n";
           const ASTContext &Ctx = AST->getASTContext();
           const SourceManager &SM = Ctx.getSourceManager();
-          ASTDumper Dumper(OS, Ctx, SM.getDiagnostics().getShowColors());
+          ASTDumper Dumper(OS, &Ctx.getCommentCommandTraits(), &SM,
+                SM.getDiagnostics().getShowColors(), Ctx.getPrintingPolicy());
           Dumper.SetTraversalKind(QS.TK);
           Dumper.Visit(BI->second);
           OS << "\n";
index b2b883d..616e100 100644 (file)
@@ -62,7 +62,7 @@ REGISTER_TWEAK(DumpAST)
 llvm::Expected<Tweak::Effect> DumpAST::apply(const Selection &Inputs) {
   std::string Str;
   llvm::raw_string_ostream OS(Str);
-  Node->dump(OS, Inputs.AST->getASTContext());
+  Node->dump(OS, Inputs.AST->getSourceManager());
   return Effect::showMessage(std::move(OS.str()));
 }
 
index c69974c..6335929 100644 (file)
@@ -372,7 +372,7 @@ public:
   bool isAddrLabelDiff() const { return Kind == AddrLabelDiff; }
 
   void dump() const;
-  void dump(raw_ostream &OS, const ASTContext *Context) const;
+  void dump(raw_ostream &OS) const;
 
   void printPretty(raw_ostream &OS, const ASTContext &Ctx, QualType Ty) const;
   std::string getAsString(const ASTContext &Ctx, QualType Ty) const;
index a154bc2..f46ffb9 100644 (file)
@@ -24,11 +24,18 @@ class ASTDumper : public ASTNodeTraverser<ASTDumper, TextNodeDumper> {
   const bool ShowColors;
 
 public:
-  ASTDumper(raw_ostream &OS, const ASTContext &Context, bool ShowColors)
-      : NodeDumper(OS, Context, ShowColors), OS(OS), ShowColors(ShowColors) {}
-
-  ASTDumper(raw_ostream &OS, bool ShowColors)
-      : NodeDumper(OS, ShowColors), OS(OS), ShowColors(ShowColors) {}
+  ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits,
+            const SourceManager *SM)
+      : ASTDumper(OS, Traits, SM, SM && SM->getDiagnostics().getShowColors()) {}
+
+  ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits,
+            const SourceManager *SM, bool ShowColors)
+      : ASTDumper(OS, Traits, SM, ShowColors, LangOptions()) {}
+  ASTDumper(raw_ostream &OS, const comments::CommandTraits *Traits,
+            const SourceManager *SM, bool ShowColors,
+            const PrintingPolicy &PrintPolicy)
+      : NodeDumper(OS, ShowColors, SM, PrintPolicy, Traits), OS(OS),
+        ShowColors(ShowColors) {}
 
   TextNodeDumper &doGetNodeDelegate() { return NodeDumper; }
 
index 328b7bc..67fa4ab 100644 (file)
@@ -278,7 +278,7 @@ public:
   void print(llvm::raw_ostream &OS, const PrintingPolicy &PP) const;
 
   /// Dumps the node to the given output stream.
-  void dump(llvm::raw_ostream &OS, const ASTContext &Context) const;
+  void dump(llvm::raw_ostream &OS, SourceManager &SM) const;
 
   /// For nodes which represent textual entities in the source code,
   /// return their SourceRange.  For all other nodes, return SourceRange().
index 54a4b0a..cd9c1ce 100644 (file)
@@ -209,7 +209,9 @@ public:
 
   void dump() const;
   void dumpColor() const;
-  void dump(raw_ostream &OS, const ASTContext &Context) const;
+  void dump(const ASTContext &Context) const;
+  void dump(raw_ostream &OS, const CommandTraits *Traits,
+            const SourceManager *SM) const;
 
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
 
index 01d4301..6c3f036 100644 (file)
@@ -1166,7 +1166,9 @@ public:
   /// Dumps the specified AST fragment and all subtrees to
   /// \c llvm::errs().
   void dump() const;
-  void dump(raw_ostream &OS, const ASTContext &Context) const;
+  void dump(SourceManager &SM) const;
+  void dump(raw_ostream &OS, SourceManager &SM) const;
+  void dump(raw_ostream &OS) const;
 
   /// \return Unique reproducible object identifier
   int64_t getID(const ASTContext &Context) const;
index d2ec153..b069bd0 100644 (file)
@@ -139,23 +139,19 @@ class TextNodeDumper
   const char *LastLocFilename = "";
   unsigned LastLocLine = ~0U;
 
-  /// \p Context, \p SM, and \p Traits can be null. This is because we want
-  /// to be able to call \p dump() in a debugger without having to pass the
-  /// \p ASTContext to \p dump. Not all parts of the AST dump output will be
-  /// available without the \p ASTContext.
-  const ASTContext *Context = nullptr;
-  const SourceManager *SM = nullptr;
+  const SourceManager *SM;
 
   /// The policy to use for printing; can be defaulted.
-  PrintingPolicy PrintPolicy = LangOptions();
+  PrintingPolicy PrintPolicy;
 
-  const comments::CommandTraits *Traits = nullptr;
+  const comments::CommandTraits *Traits;
 
   const char *getCommandName(unsigned CommandID);
 
 public:
-  TextNodeDumper(raw_ostream &OS, const ASTContext &Context, bool ShowColors);
-  TextNodeDumper(raw_ostream &OS, bool ShowColors);
+  TextNodeDumper(raw_ostream &OS, bool ShowColors, const SourceManager *SM,
+                 const PrintingPolicy &PrintPolicy,
+                 const comments::CommandTraits *Traits);
 
   void Visit(const comments::Comment *C, const comments::FullComment *FC);
 
index 0fc50e0..10b8b41 100644 (file)
@@ -1058,7 +1058,7 @@ public:
 
   void dump(const char *s) const;
   void dump() const;
-  void dump(llvm::raw_ostream &OS, const ASTContext &Context) const;
+  void dump(llvm::raw_ostream &OS) const;
 
   void Profile(llvm::FoldingSetNodeID &ID) const {
     ID.AddPointer(getAsOpaquePtr());
@@ -2471,7 +2471,7 @@ public:
 
   CanQualType getCanonicalTypeUnqualified() const; // in CanonicalType.h
   void dump() const;
-  void dump(llvm::raw_ostream &OS, const ASTContext &Context) const;
+  void dump(llvm::raw_ostream &OS) const;
 };
 
 /// This will check for a TypedefType by removing any existing sugar
index 4179162..50f8d05 100644 (file)
@@ -378,6 +378,11 @@ void APValue::swap(APValue &RHS) {
   memcpy(RHS.Data.buffer, TmpData, DataSize);
 }
 
+LLVM_DUMP_METHOD void APValue::dump() const {
+  dump(llvm::errs());
+  llvm::errs() << '\n';
+}
+
 static double GetApproxValue(const llvm::APFloat &F) {
   llvm::APFloat V = F;
   bool ignored;
@@ -386,13 +391,7 @@ static double GetApproxValue(const llvm::APFloat &F) {
   return V.convertToDouble();
 }
 
-LLVM_DUMP_METHOD void APValue::dump() const {
-  dump(llvm::errs(), /*Context=*/nullptr);
-  llvm::errs() << '\n';
-}
-
-LLVM_DUMP_METHOD void APValue::dump(raw_ostream &OS,
-                                    const ASTContext *Context) const {
+void APValue::dump(raw_ostream &OS) const {
   switch (getKind()) {
   case None:
     OS << "None";
@@ -411,10 +410,10 @@ LLVM_DUMP_METHOD void APValue::dump(raw_ostream &OS,
     return;
   case Vector:
     OS << "Vector: ";
-    getVectorElt(0).dump(OS, Context);
+    getVectorElt(0).dump(OS);
     for (unsigned i = 1; i != getVectorLength(); ++i) {
       OS << ", ";
-      getVectorElt(i).dump(OS, Context);
+      getVectorElt(i).dump(OS);
     }
     return;
   case ComplexInt:
@@ -430,37 +429,36 @@ LLVM_DUMP_METHOD void APValue::dump(raw_ostream &OS,
   case Array:
     OS << "Array: ";
     for (unsigned I = 0, N = getArrayInitializedElts(); I != N; ++I) {
-      getArrayInitializedElt(I).dump(OS, Context);
-      if (I != getArraySize() - 1)
-        OS << ", ";
+      getArrayInitializedElt(I).dump(OS);
+      if (I != getArraySize() - 1) OS << ", ";
     }
     if (hasArrayFiller()) {
       OS << getArraySize() - getArrayInitializedElts() << " x ";
-      getArrayFiller().dump(OS, Context);
+      getArrayFiller().dump(OS);
     }
     return;
   case Struct:
     OS << "Struct ";
     if (unsigned N = getStructNumBases()) {
       OS << " bases: ";
-      getStructBase(0).dump(OS, Context);
+      getStructBase(0).dump(OS);
       for (unsigned I = 1; I != N; ++I) {
         OS << ", ";
-        getStructBase(I).dump(OS, Context);
+        getStructBase(I).dump(OS);
       }
     }
     if (unsigned N = getStructNumFields()) {
       OS << " fields: ";
-      getStructField(0).dump(OS, Context);
+      getStructField(0).dump(OS);
       for (unsigned I = 1; I != N; ++I) {
         OS << ", ";
-        getStructField(I).dump(OS, Context);
+        getStructField(I).dump(OS);
       }
     }
     return;
   case Union:
     OS << "Union: ";
-    getUnionValue().dump(OS, Context);
+    getUnionValue().dump(OS);
     return;
   case MemberPointer:
     OS << "MemberPointer: <todo>";
index 08a6d0c..d7a25cc 100644 (file)
@@ -159,22 +159,17 @@ void QualType::dump(const char *msg) const {
   dump();
 }
 
-LLVM_DUMP_METHOD void QualType::dump() const {
-  ASTDumper Dumper(llvm::errs(), /*ShowColors=*/false);
-  Dumper.Visit(*this);
-}
+LLVM_DUMP_METHOD void QualType::dump() const { dump(llvm::errs()); }
 
-LLVM_DUMP_METHOD void QualType::dump(llvm::raw_ostream &OS,
-                                     const ASTContext &Context) const {
-  ASTDumper Dumper(OS, Context, Context.getDiagnostics().getShowColors());
+LLVM_DUMP_METHOD void QualType::dump(llvm::raw_ostream &OS) const {
+  ASTDumper Dumper(OS, nullptr, nullptr);
   Dumper.Visit(*this);
 }
 
-LLVM_DUMP_METHOD void Type::dump() const { QualType(this, 0).dump(); }
+LLVM_DUMP_METHOD void Type::dump() const { dump(llvm::errs()); }
 
-LLVM_DUMP_METHOD void Type::dump(llvm::raw_ostream &OS,
-                                 const ASTContext &Context) const {
-  QualType(this, 0).dump(OS, Context);
+LLVM_DUMP_METHOD void Type::dump(llvm::raw_ostream &OS) const {
+  QualType(this, 0).dump(OS);
 }
 
 //===----------------------------------------------------------------------===//
@@ -194,7 +189,8 @@ LLVM_DUMP_METHOD void Decl::dump(raw_ostream &OS, bool Deserialize,
     (void)Deserialize; // FIXME?
     P.Visit(this);
   } else {
-    ASTDumper P(OS, Ctx, Ctx.getDiagnostics().getShowColors());
+    ASTDumper P(OS, &Ctx.getCommentCommandTraits(), &SM,
+                SM.getDiagnostics().getShowColors(), Ctx.getPrintingPolicy());
     P.setDeserialize(Deserialize);
     P.Visit(this);
   }
@@ -202,7 +198,9 @@ LLVM_DUMP_METHOD void Decl::dump(raw_ostream &OS, bool Deserialize,
 
 LLVM_DUMP_METHOD void Decl::dumpColor() const {
   const ASTContext &Ctx = getASTContext();
-  ASTDumper P(llvm::errs(), Ctx, /*ShowColors=*/true);
+  ASTDumper P(llvm::errs(), &Ctx.getCommentCommandTraits(),
+              &Ctx.getSourceManager(), /*ShowColors*/ true,
+              Ctx.getPrintingPolicy());
   P.Visit(this);
 }
 
@@ -216,8 +214,10 @@ LLVM_DUMP_METHOD void DeclContext::dumpLookups(raw_ostream &OS,
   const DeclContext *DC = this;
   while (!DC->isTranslationUnit())
     DC = DC->getParent();
-  const ASTContext &Ctx = cast<TranslationUnitDecl>(DC)->getASTContext();
-  ASTDumper P(OS, Ctx, Ctx.getDiagnostics().getShowColors());
+  ASTContext &Ctx = cast<TranslationUnitDecl>(DC)->getASTContext();
+  const SourceManager &SM = Ctx.getSourceManager();
+  ASTDumper P(OS, &Ctx.getCommentCommandTraits(), &Ctx.getSourceManager(),
+              SM.getDiagnostics().getShowColors(), Ctx.getPrintingPolicy());
   P.setDeserialize(Deserialize);
   P.dumpLookups(this, DumpDecls);
 }
@@ -226,19 +226,27 @@ LLVM_DUMP_METHOD void DeclContext::dumpLookups(raw_ostream &OS,
 // Stmt method implementations
 //===----------------------------------------------------------------------===//
 
-LLVM_DUMP_METHOD void Stmt::dump() const {
-  ASTDumper P(llvm::errs(), /*ShowColors=*/false);
+LLVM_DUMP_METHOD void Stmt::dump(SourceManager &SM) const {
+  dump(llvm::errs(), SM);
+}
+
+LLVM_DUMP_METHOD void Stmt::dump(raw_ostream &OS, SourceManager &SM) const {
+  ASTDumper P(OS, nullptr, &SM);
+  P.Visit(this);
+}
+
+LLVM_DUMP_METHOD void Stmt::dump(raw_ostream &OS) const {
+  ASTDumper P(OS, nullptr, nullptr);
   P.Visit(this);
 }
 
-LLVM_DUMP_METHOD void Stmt::dump(raw_ostream &OS,
-                                 const ASTContext &Context) const {
-  ASTDumper P(OS, Context, Context.getDiagnostics().getShowColors());
+LLVM_DUMP_METHOD void Stmt::dump() const {
+  ASTDumper P(llvm::errs(), nullptr, nullptr);
   P.Visit(this);
 }
 
 LLVM_DUMP_METHOD void Stmt::dumpColor() const {
-  ASTDumper P(llvm::errs(), /*ShowColors=*/true);
+  ASTDumper P(llvm::errs(), nullptr, nullptr, /*ShowColors*/true);
   P.Visit(this);
 }
 
@@ -247,26 +255,27 @@ LLVM_DUMP_METHOD void Stmt::dumpColor() const {
 //===----------------------------------------------------------------------===//
 
 LLVM_DUMP_METHOD void Comment::dump() const {
-  const auto *FC = dyn_cast<FullComment>(this);
-  if (!FC)
-    return;
-  ASTDumper Dumper(llvm::errs(), /*ShowColors=*/false);
-  Dumper.Visit(FC, FC);
+  dump(llvm::errs(), nullptr, nullptr);
+}
+
+LLVM_DUMP_METHOD void Comment::dump(const ASTContext &Context) const {
+  dump(llvm::errs(), &Context.getCommentCommandTraits(),
+       &Context.getSourceManager());
 }
 
-LLVM_DUMP_METHOD void Comment::dump(raw_ostream &OS,
-                                    const ASTContext &Context) const {
-  const auto *FC = dyn_cast<FullComment>(this);
+void Comment::dump(raw_ostream &OS, const CommandTraits *Traits,
+                   const SourceManager *SM) const {
+  const FullComment *FC = dyn_cast<FullComment>(this);
   if (!FC)
     return;
-  ASTDumper Dumper(OS, Context, Context.getDiagnostics().getShowColors());
-  Dumper.Visit(FC, FC);
+  ASTDumper D(OS, Traits, SM);
+  D.Visit(FC, FC);
 }
 
 LLVM_DUMP_METHOD void Comment::dumpColor() const {
-  const auto *FC = dyn_cast<FullComment>(this);
+  const FullComment *FC = dyn_cast<FullComment>(this);
   if (!FC)
     return;
-  ASTDumper Dumper(llvm::errs(), /*ShowColors=*/true);
-  Dumper.Visit(FC, FC);
+  ASTDumper D(llvm::errs(), nullptr, nullptr, /*ShowColors*/true);
+  D.Visit(FC, FC);
 }
index 34fc587..ccfc115 100644 (file)
@@ -152,14 +152,13 @@ void DynTypedNode::print(llvm::raw_ostream &OS,
     OS << "Unable to print values of type " << NodeKind.asStringRef() << "\n";
 }
 
-void DynTypedNode::dump(llvm::raw_ostream &OS,
-                        const ASTContext &Context) const {
+void DynTypedNode::dump(llvm::raw_ostream &OS, SourceManager &SM) const {
   if (const Decl *D = get<Decl>())
     D->dump(OS);
   else if (const Stmt *S = get<Stmt>())
-    S->dump(OS, Context);
+    S->dump(OS, SM);
   else if (const Type *T = get<Type>())
-    T->dump(OS, Context);
+    T->dump(OS);
   else
     OS << "Unable to dump values of type " << NodeKind.asStringRef() << "\n";
 }
index 74966f8..0d49c44 100644 (file)
@@ -51,15 +51,12 @@ static void dumpPreviousDecl(raw_ostream &OS, const Decl *D) {
   llvm_unreachable("Decl that isn't part of DeclNodes.inc!");
 }
 
-TextNodeDumper::TextNodeDumper(raw_ostream &OS, const ASTContext &Context,
-                               bool ShowColors)
-    : TextTreeStructure(OS, ShowColors), OS(OS), ShowColors(ShowColors),
-      Context(&Context), SM(&Context.getSourceManager()),
-      PrintPolicy(Context.getPrintingPolicy()),
-      Traits(&Context.getCommentCommandTraits()) {}
-
-TextNodeDumper::TextNodeDumper(raw_ostream &OS, bool ShowColors)
-    : TextTreeStructure(OS, ShowColors), OS(OS), ShowColors(ShowColors) {}
+TextNodeDumper::TextNodeDumper(raw_ostream &OS, bool ShowColors,
+                               const SourceManager *SM,
+                               const PrintingPolicy &PrintPolicy,
+                               const comments::CommandTraits *Traits)
+    : TextTreeStructure(OS, ShowColors), OS(OS), ShowColors(ShowColors), SM(SM),
+      PrintPolicy(PrintPolicy), Traits(Traits) {}
 
 void TextNodeDumper::Visit(const comments::Comment *C,
                            const comments::FullComment *FC) {
@@ -715,7 +712,7 @@ void TextNodeDumper::VisitConstantExpr(const ConstantExpr *Node) {
   if (Node->getResultAPValueKind() != APValue::None) {
     ColorScope Color(OS, ShowColors, ValueColor);
     OS << " ";
-    Node->getAPValueResult().dump(OS, Context);
+    Node->getAPValueResult().dump(OS);
   }
 }
 
index e88da16..563f3fc 100644 (file)
@@ -755,7 +755,7 @@ private:
             return D->getKind() == Decl::TranslationUnit;
           })) {
         llvm::errs() << "Tried to match orphan node:\n";
-        Node.dump(llvm::errs(), *ActiveASTContext);
+        Node.dump(llvm::errs(), ActiveASTContext->getSourceManager());
         llvm_unreachable("Parent map should be complete!");
       }
 #endif
index a498178..13a5713 100644 (file)
@@ -98,7 +98,7 @@ public:
   }
 
   ComplexPairTy VisitStmt(Stmt *S) {
-    S->dump(llvm::errs(), CGF.getContext());
+    S->dump(CGF.getContext().getSourceManager());
     llvm_unreachable("Stmt can't have complex result type!");
   }
   ComplexPairTy VisitExpr(Expr *S);
index 6131f97..922aa95 100644 (file)
@@ -413,7 +413,7 @@ public:
   }
 
   Value *VisitStmt(Stmt *S) {
-    S->dump(llvm::errs(), CGF.getContext());
+    S->dump(CGF.getContext().getSourceManager());
     llvm_unreachable("Stmt can't have complex result type!");
   }
   Value *VisitExpr(Expr *S);
index a73cc88..12fda45 100644 (file)
@@ -103,9 +103,9 @@ namespace {
         // FIXME: Support OutputFormat in type dumping.
         // FIXME: Support combining -ast-dump-decl-types with -ast-dump-lookups.
         if (auto *VD = dyn_cast<ValueDecl>(InnerD))
-          VD->getType().dump(Out, VD->getASTContext());
+          VD->getType().dump(Out);
         if (auto *TD = dyn_cast<TypeDecl>(InnerD))
-          TD->getTypeForDecl()->dump(Out, TD->getASTContext());
+          TD->getTypeForDecl()->dump(Out);
       }
     }
 
index ba8b34e..327cabd 100644 (file)
@@ -64,7 +64,7 @@ FullComment *CommentParserTest::parseString(const char *Source) {
 
   if (MY_DEBUG) {
     llvm::errs() << "=== Source:\n" << Source << "\n=== AST:\n";
-    FC->dump();
+    FC->dump(llvm::errs(), &Traits, &SourceMgr);
   }
 
   Token Tok;
index 217c1ab..3fb22ef 100644 (file)
@@ -271,7 +271,7 @@ protected:
               const DynTypedNode &Node) override {
     std::string DumpStr;
     llvm::raw_string_ostream Dump(DumpStr);
-    Node.dump(Dump, *Result.Context);
+    Node.dump(Dump, *Result.SourceManager);
 
     if (Dump.str().find(ExpectSubstring) == std::string::npos) {
       std::string MsgStr;