LCOV - code coverage report
Current view: top level - src - pending-compilation-error-handler.h (source / functions) Hit Total Coverage
Test: app.info Lines: 10 10 100.0 %
Date: 2019-04-17 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2015 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_PENDING_COMPILATION_ERROR_HANDLER_H_
       6             : #define V8_PENDING_COMPILATION_ERROR_HANDLER_H_
       7             : 
       8             : #include <forward_list>
       9             : 
      10             : #include "src/base/macros.h"
      11             : #include "src/globals.h"
      12             : #include "src/handles.h"
      13             : #include "src/message-template.h"
      14             : 
      15             : namespace v8 {
      16             : namespace internal {
      17             : 
      18             : class AstRawString;
      19             : class AstValueFactory;
      20             : class Isolate;
      21             : class Script;
      22             : 
      23             : // Helper class for handling pending compilation errors consistently in various
      24             : // compilation phases.
      25     2991160 : class PendingCompilationErrorHandler {
      26             :  public:
      27             :   PendingCompilationErrorHandler()
      28             :       : has_pending_error_(false),
      29             :         stack_overflow_(false),
      30     5982350 :         error_type_(kSyntaxError) {}
      31             : 
      32             :   void ReportMessageAt(int start_position, int end_position,
      33             :                        MessageTemplate message, const char* arg = nullptr,
      34             :                        ParseErrorType error_type = kSyntaxError);
      35             : 
      36             :   void ReportMessageAt(int start_position, int end_position,
      37             :                        MessageTemplate message, const AstRawString* arg,
      38             :                        ParseErrorType error_type = kSyntaxError);
      39             : 
      40             :   void ReportWarningAt(int start_position, int end_position,
      41             :                        MessageTemplate message, const char* arg = nullptr);
      42             : 
      43             :   bool stack_overflow() const { return stack_overflow_; }
      44             : 
      45             :   void set_stack_overflow() {
      46       12081 :     has_pending_error_ = true;
      47       12081 :     stack_overflow_ = true;
      48             :   }
      49             : 
      50             :   bool has_pending_error() const { return has_pending_error_; }
      51             :   bool has_pending_warnings() const { return !warning_messages_.empty(); }
      52             : 
      53             :   // Handle errors detected during parsing.
      54             :   void ReportErrors(Isolate* isolate, Handle<Script> script,
      55             :                     AstValueFactory* ast_value_factory);
      56             : 
      57             :   // Handle warnings detected during compilation.
      58             :   void ReportWarnings(Isolate* isolate, Handle<Script> script);
      59             : 
      60             :   V8_EXPORT_PRIVATE Handle<String> FormatErrorMessageForTest(
      61             :       Isolate* isolate) const;
      62             : 
      63             :   void set_unidentifiable_error() {
      64     1663897 :     has_pending_error_ = true;
      65     1663897 :     unidentifiable_error_ = true;
      66             :   }
      67             :   void clear_unidentifiable_error() {
      68       49034 :     has_pending_error_ = false;
      69       49034 :     unidentifiable_error_ = false;
      70             :   }
      71             :   bool has_error_unidentifiable_by_preparser() const {
      72             :     return unidentifiable_error_;
      73             :   }
      74             : 
      75             :  private:
      76             :   class MessageDetails {
      77             :    public:
      78             :     MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(MessageDetails);
      79             :     MessageDetails()
      80             :         : start_position_(-1),
      81             :           end_position_(-1),
      82             :           message_(MessageTemplate::kNone),
      83             :           arg_(nullptr),
      84     2991175 :           char_arg_(nullptr) {}
      85             :     MessageDetails(int start_position, int end_position,
      86             :                    MessageTemplate message, const AstRawString* arg,
      87             :                    const char* char_arg)
      88             :         : start_position_(start_position),
      89             :           end_position_(end_position),
      90             :           message_(message),
      91             :           arg_(arg),
      92        1261 :           char_arg_(char_arg) {}
      93             : 
      94             :     Handle<String> ArgumentString(Isolate* isolate) const;
      95             :     MessageLocation GetLocation(Handle<Script> script) const;
      96             :     MessageTemplate message() const { return message_; }
      97             : 
      98             :    private:
      99             :     int start_position_;
     100             :     int end_position_;
     101             :     MessageTemplate message_;
     102             :     const AstRawString* arg_;
     103             :     const char* char_arg_;
     104             :   };
     105             : 
     106             :   void ThrowPendingError(Isolate* isolate, Handle<Script> script);
     107             : 
     108             :   bool has_pending_error_;
     109             :   bool stack_overflow_;
     110             :   bool unidentifiable_error_ = false;
     111             : 
     112             :   MessageDetails error_details_;
     113             :   ParseErrorType error_type_;
     114             : 
     115             :   std::forward_list<MessageDetails> warning_messages_;
     116             : 
     117             :   DISALLOW_COPY_AND_ASSIGN(PendingCompilationErrorHandler);
     118             : };
     119             : 
     120             : }  // namespace internal
     121             : }  // namespace v8
     122             : #endif  // V8_PENDING_COMPILATION_ERROR_HANDLER_H_

Generated by: LCOV version 1.10