V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
prettyprinter.h
1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_AST_PRETTYPRINTER_H_
6 #define V8_AST_PRETTYPRINTER_H_
7 
8 #include "src/allocation.h"
9 #include "src/ast/ast.h"
10 #include "src/base/compiler-specific.h"
11 
12 namespace v8 {
13 namespace internal {
14 
15 class IncrementalStringBuilder; // to avoid including string-builder-inl.h
16 
17 class CallPrinter final : public AstVisitor<CallPrinter> {
18  public:
19  explicit CallPrinter(Isolate* isolate, bool is_user_js);
20  ~CallPrinter();
21 
22  // The following routine prints the node with position |position| into a
23  // string.
24  Handle<String> Print(FunctionLiteral* program, int position);
25  enum ErrorHint {
26  kNone,
27  kNormalIterator,
28  kAsyncIterator,
29  kCallAndNormalIterator,
30  kCallAndAsyncIterator
31  };
32  ErrorHint GetErrorHint() const;
33 
34 // Individual nodes
35 #define DECLARE_VISIT(type) void Visit##type(type* node);
36  AST_NODE_LIST(DECLARE_VISIT)
37 #undef DECLARE_VISIT
38 
39  private:
40  void Print(const char* str);
41  void Print(Handle<String> str);
42 
43  void Find(AstNode* node, bool print = false);
44 
45  Isolate* isolate_;
46  int num_prints_;
47  // Allocate the builder on the heap simply because it's forward declared.
48  std::unique_ptr<IncrementalStringBuilder> builder_;
49  int position_; // position of ast node to print
50  bool found_;
51  bool done_;
52  bool is_user_js_;
53  bool is_iterator_error_;
54  bool is_async_iterator_error_;
55  bool is_call_error_;
56  FunctionKind function_kind_;
57  DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
58 
59  protected:
60  void PrintLiteral(Handle<Object> value, bool quote);
61  void PrintLiteral(const AstRawString* value, bool quote);
62  void FindStatements(const ZonePtrList<Statement>* statements);
63  void FindArguments(const ZonePtrList<Expression>* arguments);
64 };
65 
66 
67 #ifdef DEBUG
68 
69 class AstPrinter final : public AstVisitor<AstPrinter> {
70  public:
71  explicit AstPrinter(uintptr_t stack_limit);
72  ~AstPrinter();
73 
74  // The following routines print a node into a string.
75  // The result string is alive as long as the AstPrinter is alive.
76  const char* Print(AstNode* node);
77  const char* PrintProgram(FunctionLiteral* program);
78 
79  void PRINTF_FORMAT(2, 3) Print(const char* format, ...);
80 
81  // Print a node to stdout.
82  static void PrintOut(Isolate* isolate, AstNode* node);
83 
84  // Individual nodes
85 #define DECLARE_VISIT(type) void Visit##type(type* node);
86  AST_NODE_LIST(DECLARE_VISIT)
87 #undef DECLARE_VISIT
88 
89  private:
90  friend class IndentedScope;
91 
92  void Init();
93 
94  void PrintLabels(ZonePtrList<const AstRawString>* labels);
95  void PrintLiteral(const AstRawString* value, bool quote);
96  void PrintLiteral(const AstConsString* value, bool quote);
97  void PrintLiteral(Literal* literal, bool quote);
98  void PrintIndented(const char* txt);
99  void PrintIndentedVisit(const char* s, AstNode* node);
100 
101  void PrintStatements(const ZonePtrList<Statement>* statements);
102  void PrintDeclarations(Declaration::List* declarations);
103  void PrintParameters(DeclarationScope* scope);
104  void PrintArguments(const ZonePtrList<Expression>* arguments);
105  void PrintCaseClause(CaseClause* clause);
106  void PrintLiteralIndented(const char* info, Literal* literal, bool quote);
107  void PrintLiteralIndented(const char* info, const AstRawString* value,
108  bool quote);
109  void PrintLiteralIndented(const char* info, const AstConsString* value,
110  bool quote);
111  void PrintLiteralWithModeIndented(const char* info, Variable* var,
112  const AstRawString* value);
113  void PrintLabelsIndented(ZonePtrList<const AstRawString>* labels,
114  const char* prefix = "");
115  void PrintObjectProperties(
116  const ZonePtrList<ObjectLiteral::Property>* properties);
117  void PrintClassProperties(
118  const ZonePtrList<ClassLiteral::Property>* properties);
119 
120  void inc_indent() { indent_++; }
121  void dec_indent() { indent_--; }
122 
123  DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
124 
125  char* output_; // output string buffer
126  int size_; // output_ size
127  int pos_; // current printing position
128  int indent_;
129 };
130 
131 #endif // DEBUG
132 
133 } // namespace internal
134 } // namespace v8
135 
136 #endif // V8_AST_PRETTYPRINTER_H_
Definition: libplatform.h:13