| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/runtime/runtime-utils.h" | 5 #include "src/runtime/runtime-utils.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
| 10 #include "src/ast/prettyprinter.h" | 10 #include "src/ast/prettyprinter.h" |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 DCHECK_EQ(1, args.length()); | 267 DCHECK_EQ(1, args.length()); |
| 268 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); | 268 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); |
| 269 Handle<String> type = Object::TypeOf(isolate, object); | 269 Handle<String> type = Object::TypeOf(isolate, object); |
| 270 THROW_NEW_ERROR_RETURN_FAILURE( | 270 THROW_NEW_ERROR_RETURN_FAILURE( |
| 271 isolate, NewTypeError(MessageTemplate::kApplyNonFunction, object, type)); | 271 isolate, NewTypeError(MessageTemplate::kApplyNonFunction, object, type)); |
| 272 } | 272 } |
| 273 | 273 |
| 274 namespace { | 274 namespace { |
| 275 | 275 |
| 276 void PromiseRejectEvent(Isolate* isolate, Handle<JSObject> promise, | 276 void PromiseRejectEvent(Isolate* isolate, Handle<JSObject> promise, |
| 277 Handle<JSObject> rejected_promise, Handle<Object> value, | 277 Handle<Object> rejected_promise, Handle<Object> value, |
| 278 bool debug_event) { | 278 bool debug_event) { |
| 279 if (isolate->debug()->is_active() && debug_event) { | 279 if (isolate->debug()->is_active() && debug_event) { |
| 280 isolate->debug()->OnPromiseReject(rejected_promise, value); | 280 isolate->debug()->OnPromiseReject(rejected_promise, value); |
| 281 } | 281 } |
| 282 Handle<Symbol> key = isolate->factory()->promise_has_handler_symbol(); | 282 Handle<Symbol> key = isolate->factory()->promise_has_handler_symbol(); |
| 283 // Do not report if we actually have a handler. | 283 // Do not report if we actually have a handler. |
| 284 if (JSReceiver::GetDataProperty(promise, key)->IsUndefined(isolate)) { | 284 if (JSReceiver::GetDataProperty(promise, key)->IsUndefined(isolate)) { |
| 285 isolate->ReportPromiseReject(promise, value, | 285 isolate->ReportPromiseReject(promise, value, |
| 286 v8::kPromiseRejectWithNoHandler); | 286 v8::kPromiseRejectWithNoHandler); |
| 287 } | 287 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 299 PromiseRejectEvent(isolate, promise, promise, value, debug_event); | 299 PromiseRejectEvent(isolate, promise, promise, value, debug_event); |
| 300 return isolate->heap()->undefined_value(); | 300 return isolate->heap()->undefined_value(); |
| 301 } | 301 } |
| 302 | 302 |
| 303 RUNTIME_FUNCTION(Runtime_PromiseRejectEventFromStack) { | 303 RUNTIME_FUNCTION(Runtime_PromiseRejectEventFromStack) { |
| 304 DCHECK(args.length() == 2); | 304 DCHECK(args.length() == 2); |
| 305 HandleScope scope(isolate); | 305 HandleScope scope(isolate); |
| 306 CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0); | 306 CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0); |
| 307 CONVERT_ARG_HANDLE_CHECKED(Object, value, 1); | 307 CONVERT_ARG_HANDLE_CHECKED(Object, value, 1); |
| 308 | 308 |
| 309 Handle<JSObject> rejected_promise = promise; | 309 Handle<Object> rejected_promise = promise; |
| 310 if (isolate->debug()->is_active()) { | 310 if (isolate->debug()->is_active()) { |
| 311 Handle<Object> promise_on_stack = isolate->GetPromiseOnStackOnThrow(); | 311 // If the Promise.reject call is caught, then this will return |
| 312 if (promise_on_stack->IsJSObject()) { | 312 // undefined, which will be interpreted by PromiseRejectEvent |
| 313 rejected_promise = Handle<JSObject>::cast(promise_on_stack); | 313 // as being a caught exception event. |
| 314 } | 314 rejected_promise = isolate->GetPromiseOnStackOnThrow(); |
| 315 } | 315 } |
| 316 PromiseRejectEvent(isolate, promise, rejected_promise, value, true); | 316 PromiseRejectEvent(isolate, promise, rejected_promise, value, true); |
| 317 return isolate->heap()->undefined_value(); | 317 return isolate->heap()->undefined_value(); |
| 318 } | 318 } |
| 319 | 319 |
| 320 RUNTIME_FUNCTION(Runtime_PromiseRevokeReject) { | 320 RUNTIME_FUNCTION(Runtime_PromiseRevokeReject) { |
| 321 DCHECK(args.length() == 1); | 321 DCHECK(args.length() == 1); |
| 322 HandleScope scope(isolate); | 322 HandleScope scope(isolate); |
| 323 CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0); | 323 CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0); |
| 324 Handle<Symbol> key = isolate->factory()->promise_has_handler_symbol(); | 324 Handle<Symbol> key = isolate->factory()->promise_has_handler_symbol(); |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 | 590 |
| 591 RUNTIME_FUNCTION(Runtime_Typeof) { | 591 RUNTIME_FUNCTION(Runtime_Typeof) { |
| 592 HandleScope scope(isolate); | 592 HandleScope scope(isolate); |
| 593 DCHECK_EQ(1, args.length()); | 593 DCHECK_EQ(1, args.length()); |
| 594 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); | 594 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); |
| 595 return *Object::TypeOf(isolate, object); | 595 return *Object::TypeOf(isolate, object); |
| 596 } | 596 } |
| 597 | 597 |
| 598 } // namespace internal | 598 } // namespace internal |
| 599 } // namespace v8 | 599 } // namespace v8 |
| OLD | NEW |