LCOV - code coverage report
Current view: top level - src/ast - prettyprinter.h (source / functions) Hit Total Coverage
Test: app.info Lines: 1 1 100.0 %
Date: 2017-04-26 Functions: 2 2 100.0 %

          Line data    Source code
       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             : #include "src/string-builder.h"
      12             : 
      13             : namespace v8 {
      14             : namespace internal {
      15             : 
      16             : class CallPrinter final : public AstVisitor<CallPrinter> {
      17             :  public:
      18             :   explicit CallPrinter(Isolate* isolate, bool is_user_js);
      19             : 
      20             :   // The following routine prints the node with position |position| into a
      21             :   // string.
      22             :   Handle<String> Print(FunctionLiteral* program, int position);
      23             : 
      24             : // Individual nodes
      25             : #define DECLARE_VISIT(type) void Visit##type(type* node);
      26             :   AST_NODE_LIST(DECLARE_VISIT)
      27             : #undef DECLARE_VISIT
      28             : 
      29             :  private:
      30             :   void Print(const char* str);
      31             :   void Print(Handle<String> str);
      32             : 
      33             :   void Find(AstNode* node, bool print = false);
      34             : 
      35             :   Isolate* isolate_;
      36             :   int num_prints_;
      37             :   IncrementalStringBuilder builder_;
      38             :   int position_;  // position of ast node to print
      39             :   bool found_;
      40             :   bool done_;
      41             :   bool is_user_js_;
      42             : 
      43     1243052 :   DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
      44             : 
      45             :  protected:
      46             :   void PrintLiteral(Handle<Object> value, bool quote);
      47             :   void PrintLiteral(const AstRawString* value, bool quote);
      48             :   void FindStatements(ZoneList<Statement*>* statements);
      49             :   void FindArguments(ZoneList<Expression*>* arguments);
      50             : };
      51             : 
      52             : 
      53             : #ifdef DEBUG
      54             : 
      55             : class AstPrinter final : public AstVisitor<AstPrinter> {
      56             :  public:
      57             :   explicit AstPrinter(Isolate* isolate);
      58             :   ~AstPrinter();
      59             : 
      60             :   // The following routines print a node into a string.
      61             :   // The result string is alive as long as the AstPrinter is alive.
      62             :   const char* Print(AstNode* node);
      63             :   const char* PrintProgram(FunctionLiteral* program);
      64             : 
      65             :   void PRINTF_FORMAT(2, 3) Print(const char* format, ...);
      66             : 
      67             :   // Print a node to stdout.
      68             :   static void PrintOut(Isolate* isolate, AstNode* node);
      69             : 
      70             :   // Individual nodes
      71             : #define DECLARE_VISIT(type) void Visit##type(type* node);
      72             :   AST_NODE_LIST(DECLARE_VISIT)
      73             : #undef DECLARE_VISIT
      74             : 
      75             :  private:
      76             :   friend class IndentedScope;
      77             : 
      78             :   void Init();
      79             : 
      80             :   void PrintLabels(ZoneList<const AstRawString*>* labels);
      81             :   void PrintLiteral(const AstRawString* value, bool quote);
      82             :   void PrintLiteral(Handle<Object> value, bool quote);
      83             :   void PrintIndented(const char* txt);
      84             :   void PrintIndentedVisit(const char* s, AstNode* node);
      85             : 
      86             :   void PrintStatements(ZoneList<Statement*>* statements);
      87             :   void PrintDeclarations(Declaration::List* declarations);
      88             :   void PrintParameters(DeclarationScope* scope);
      89             :   void PrintArguments(ZoneList<Expression*>* arguments);
      90             :   void PrintCaseClause(CaseClause* clause);
      91             :   void PrintLiteralIndented(const char* info, Handle<Object> value, bool quote);
      92             :   void PrintLiteralWithModeIndented(const char* info,
      93             :                                     Variable* var,
      94             :                                     Handle<Object> value);
      95             :   void PrintLabelsIndented(ZoneList<const AstRawString*>* labels);
      96             :   void PrintObjectProperties(ZoneList<ObjectLiteral::Property*>* properties);
      97             :   void PrintClassProperties(ZoneList<ClassLiteral::Property*>* properties);
      98             :   void PrintTryStatement(TryStatement* try_statement);
      99             : 
     100             :   void inc_indent() { indent_++; }
     101             :   void dec_indent() { indent_--; }
     102             : 
     103             :   DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
     104             : 
     105             :   Isolate* isolate_;
     106             :   char* output_;  // output string buffer
     107             :   int size_;      // output_ size
     108             :   int pos_;       // current printing position
     109             :   int indent_;
     110             : };
     111             : 
     112             : #endif  // DEBUG
     113             : 
     114             : }  // namespace internal
     115             : }  // namespace v8
     116             : 
     117             : #endif  // V8_AST_PRETTYPRINTER_H_

Generated by: LCOV version 1.10