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.
5 #ifndef V8_PRETTYPRINTER_H_
6 #define V8_PRETTYPRINTER_H_
8 #include "allocation.h"
16 class PrettyPrinter: public AstVisitor {
18 explicit PrettyPrinter(Zone* zone);
19 virtual ~PrettyPrinter();
21 // The following routines print a node into a string.
22 // The result string is alive as long as the PrettyPrinter is alive.
23 const char* Print(AstNode* node);
24 const char* PrintExpression(FunctionLiteral* program);
25 const char* PrintProgram(FunctionLiteral* program);
27 void Print(const char* format, ...);
29 // Print a node to stdout.
30 static void PrintOut(Zone* zone, AstNode* node);
33 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
34 AST_NODE_LIST(DECLARE_VISIT)
38 char* output_; // output string buffer
39 int size_; // output_ size
40 int pos_; // current printing position
44 const char* Output() const { return output_; }
46 virtual void PrintStatements(ZoneList<Statement*>* statements);
47 void PrintLabels(ZoneStringList* labels);
48 virtual void PrintArguments(ZoneList<Expression*>* arguments);
49 void PrintLiteral(Handle<Object> value, bool quote);
50 void PrintParameters(Scope* scope);
51 void PrintDeclarations(ZoneList<Declaration*>* declarations);
52 void PrintFunctionLiteral(FunctionLiteral* function);
53 void PrintCaseClause(CaseClause* clause);
55 DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
59 // Prints the AST structure
60 class AstPrinter: public PrettyPrinter {
62 explicit AstPrinter(Zone* zone);
63 virtual ~AstPrinter();
65 const char* PrintProgram(FunctionLiteral* program);
68 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
69 AST_NODE_LIST(DECLARE_VISIT)
73 friend class IndentedScope;
74 void PrintIndented(const char* txt);
75 void PrintIndentedVisit(const char* s, AstNode* node);
77 void PrintStatements(ZoneList<Statement*>* statements);
78 void PrintDeclarations(ZoneList<Declaration*>* declarations);
79 void PrintParameters(Scope* scope);
80 void PrintArguments(ZoneList<Expression*>* arguments);
81 void PrintCaseClause(CaseClause* clause);
82 void PrintLiteralIndented(const char* info, Handle<Object> value, bool quote);
83 void PrintLiteralWithModeIndented(const char* info,
85 Handle<Object> value);
86 void PrintLabelsIndented(ZoneStringList* labels);
88 void inc_indent() { indent_++; }
89 void dec_indent() { indent_--; }
96 } } // namespace v8::internal
98 #endif // V8_PRETTYPRINTER_H_