// Copyright 2026 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_REGEXP_REGEXP_AST_PRINTER_H_ #define V8_REGEXP_REGEXP_AST_PRINTER_H_ #ifdef V8_ENABLE_REGEXP_DIAGNOSTICS #include "irregexp/imported/regexp-ast.h" #include "irregexp/imported/regexp-printer.h" namespace v8 { namespace internal { namespace regexp { class Diagnostics; template class NodePrinter; template <> class V8_EXPORT_PRIVATE NodePrinter : public NodePrinterBase, public Visitor { public: NodePrinter(std::ostream& os, GraphLabeller* labeller, Zone* zone) : NodePrinterBase(os, labeller, zone, 't') {} NodePrinter(const PrinterBase& other, GraphLabeller* labeller) : NodePrinterBase(other, labeller, 't') {} void VisitCharacterRange(CharacterRange that); #define DECLARE_VISIT(Name) void* Visit##Name(Name*, void* data) override; FOR_EACH_REG_EXP_TREE_TYPE(DECLARE_VISIT) #undef DECLARE_VISIT void Print(Tree* tree); }; using AstNodePrinter = NodePrinter; class TraceTreeScope { public: explicit TraceTreeScope(Diagnostics* diagnostics); ~TraceTreeScope(); void PrintTree(Tree* tree); std::ostream& os(); private: TraceTreeScope* const parent_; const int depth_; Diagnostics* diagnostics_; }; } // namespace regexp } // namespace internal } // namespace v8 #endif // V8_ENABLE_REGEXP_DIAGNOSTICS #endif // V8_REGEXP_REGEXP_AST_PRINTER_H_