Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: src/prettyprinter.h

Issue 1481613002: Create ast/ and parsing/ subdirectories and move appropriate files (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/preparser.cc ('k') | src/prettyprinter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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_PRETTYPRINTER_H_
6 #define V8_PRETTYPRINTER_H_
7
8 #include "src/allocation.h"
9 #include "src/ast.h"
10
11 namespace v8 {
12 namespace internal {
13
14 class CallPrinter : public AstVisitor {
15 public:
16 explicit CallPrinter(Isolate* isolate);
17 virtual ~CallPrinter();
18
19 // The following routine prints the node with position |position| into a
20 // string. The result string is alive as long as the CallPrinter is alive.
21 const char* Print(FunctionLiteral* program, int position);
22
23 void Print(const char* format, ...);
24
25 void Find(AstNode* node, bool print = false);
26
27 // Individual nodes
28 #define DECLARE_VISIT(type) void Visit##type(type* node) override;
29 AST_NODE_LIST(DECLARE_VISIT)
30 #undef DECLARE_VISIT
31
32 private:
33 void Init();
34 char* output_; // output string buffer
35 int size_; // output_ size
36 int pos_; // current printing position
37 int position_; // position of ast node to print
38 bool found_;
39 bool done_;
40
41 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
42
43 protected:
44 void PrintLiteral(Handle<Object> value, bool quote);
45 void PrintLiteral(const AstRawString* value, bool quote);
46 void FindStatements(ZoneList<Statement*>* statements);
47 void FindArguments(ZoneList<Expression*>* arguments);
48 };
49
50
51 #ifdef DEBUG
52
53 class PrettyPrinter: public AstVisitor {
54 public:
55 explicit PrettyPrinter(Isolate* isolate);
56 virtual ~PrettyPrinter();
57
58 // The following routines print a node into a string.
59 // The result string is alive as long as the PrettyPrinter is alive.
60 const char* Print(AstNode* node);
61 const char* PrintExpression(FunctionLiteral* program);
62 const char* PrintProgram(FunctionLiteral* program);
63
64 void Print(const char* format, ...);
65
66 // Print a node to stdout.
67 static void PrintOut(Isolate* isolate, AstNode* node);
68
69 // Individual nodes
70 #define DECLARE_VISIT(type) void Visit##type(type* node) override;
71 AST_NODE_LIST(DECLARE_VISIT)
72 #undef DECLARE_VISIT
73
74 private:
75 char* output_; // output string buffer
76 int size_; // output_ size
77 int pos_; // current printing position
78
79 protected:
80 void Init();
81 const char* Output() const { return output_; }
82
83 virtual void PrintStatements(ZoneList<Statement*>* statements);
84 void PrintLabels(ZoneList<const AstRawString*>* labels);
85 virtual void PrintArguments(ZoneList<Expression*>* arguments);
86 void PrintLiteral(Handle<Object> value, bool quote);
87 void PrintLiteral(const AstRawString* value, bool quote);
88 void PrintParameters(Scope* scope);
89 void PrintDeclarations(ZoneList<Declaration*>* declarations);
90 void PrintFunctionLiteral(FunctionLiteral* function);
91 void PrintCaseClause(CaseClause* clause);
92 void PrintObjectLiteralProperty(ObjectLiteralProperty* property);
93
94 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
95 };
96
97
98 // Prints the AST structure
99 class AstPrinter: public PrettyPrinter {
100 public:
101 explicit AstPrinter(Isolate* isolate);
102 virtual ~AstPrinter();
103
104 const char* PrintProgram(FunctionLiteral* program);
105
106 // Individual nodes
107 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
108 AST_NODE_LIST(DECLARE_VISIT)
109 #undef DECLARE_VISIT
110
111 private:
112 friend class IndentedScope;
113 void PrintIndented(const char* txt);
114 void PrintIndentedVisit(const char* s, AstNode* node);
115
116 void PrintStatements(ZoneList<Statement*>* statements);
117 void PrintDeclarations(ZoneList<Declaration*>* declarations);
118 void PrintParameters(Scope* scope);
119 void PrintArguments(ZoneList<Expression*>* arguments);
120 void PrintCaseClause(CaseClause* clause);
121 void PrintLiteralIndented(const char* info, Handle<Object> value, bool quote);
122 void PrintLiteralWithModeIndented(const char* info,
123 Variable* var,
124 Handle<Object> value);
125 void PrintLabelsIndented(ZoneList<const AstRawString*>* labels);
126 void PrintProperties(ZoneList<ObjectLiteral::Property*>* properties);
127
128 void inc_indent() { indent_++; }
129 void dec_indent() { indent_--; }
130
131 int indent_;
132 };
133
134 #endif // DEBUG
135
136 } // namespace internal
137 } // namespace v8
138
139 #endif // V8_PRETTYPRINTER_H_
OLDNEW
« no previous file with comments | « src/preparser.cc ('k') | src/prettyprinter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698