LCOV - code coverage report
Current view: top level - src/ast - prettyprinter.h (source / functions) Hit Total Coverage
Test: app.info Lines: 2 2 100.0 %
Date: 2019-01-20 Functions: 3 3 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             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15             : class IncrementalStringBuilder;  // to avoid including string-builder-inl.h
      16             : 
      17       12660 : 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      594807 :   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_

Generated by: LCOV version 1.10