LCOV - code coverage report
Current view: top level - src - pending-compilation-error-handler.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 26 27 96.3 %
Date: 2017-10-20 Functions: 3 3 100.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             : #include "src/pending-compilation-error-handler.h"
       6             : 
       7             : #include "src/ast/ast-value-factory.h"
       8             : #include "src/debug/debug.h"
       9             : #include "src/handles.h"
      10             : #include "src/isolate.h"
      11             : #include "src/messages.h"
      12             : #include "src/objects-inl.h"
      13             : 
      14             : namespace v8 {
      15             : namespace internal {
      16             : 
      17      510019 : Handle<String> PendingCompilationErrorHandler::ArgumentString(
      18             :     Isolate* isolate) {
      19      510019 :   if (arg_ != nullptr) return arg_->string();
      20      433956 :   if (char_arg_ != nullptr) {
      21             :     return isolate->factory()
      22             :         ->NewStringFromUtf8(CStrVector(char_arg_))
      23      448958 :         .ToHandleChecked();
      24             :   }
      25             :   return isolate->factory()->undefined_string();
      26             : }
      27             : 
      28      197610 : Handle<String> PendingCompilationErrorHandler::FormatMessage(Isolate* isolate) {
      29             :   return MessageTemplate::FormatMessage(isolate, message_,
      30      395220 :                                         ArgumentString(isolate));
      31             : }
      32             : 
      33      624818 : void PendingCompilationErrorHandler::ThrowPendingError(Isolate* isolate,
      34             :                                                        Handle<Script> script) {
      35      312439 :   if (!has_pending_error_) return;
      36      312409 :   MessageLocation location(script, start_position_, end_position_);
      37             :   Factory* factory = isolate->factory();
      38      312409 :   Handle<String> argument = ArgumentString(isolate);
      39      312409 :   isolate->debug()->OnCompileError(script);
      40             : 
      41             :   Handle<Object> error;
      42      312409 :   switch (error_type_) {
      43             :     case kReferenceError:
      44        5219 :       error = factory->NewReferenceError(message_, argument);
      45        5219 :       break;
      46             :     case kSyntaxError:
      47      307190 :       error = factory->NewSyntaxError(message_, argument);
      48      307190 :       break;
      49             :     default:
      50           0 :       UNREACHABLE();
      51             :       break;
      52             :   }
      53             : 
      54      312409 :   if (!error->IsJSObject()) {
      55          30 :     isolate->Throw(*error, &location);
      56          30 :     return;
      57             :   }
      58             : 
      59             :   Handle<JSObject> jserror = Handle<JSObject>::cast(error);
      60             : 
      61             :   Handle<Name> key_start_pos = factory->error_start_pos_symbol();
      62             :   JSObject::SetProperty(jserror, key_start_pos,
      63             :                         handle(Smi::FromInt(location.start_pos()), isolate),
      64      624758 :                         LanguageMode::kSloppy)
      65      624758 :       .Check();
      66             : 
      67             :   Handle<Name> key_end_pos = factory->error_end_pos_symbol();
      68             :   JSObject::SetProperty(jserror, key_end_pos,
      69             :                         handle(Smi::FromInt(location.end_pos()), isolate),
      70      624758 :                         LanguageMode::kSloppy)
      71      624758 :       .Check();
      72             : 
      73             :   Handle<Name> key_script = factory->error_script_symbol();
      74      312379 :   JSObject::SetProperty(jserror, key_script, script, LanguageMode::kSloppy)
      75      624758 :       .Check();
      76             : 
      77      312379 :   isolate->Throw(*error, &location);
      78             : }
      79             : }  // namespace internal
      80             : }  // namespace v8

Generated by: LCOV version 1.10