Index: src/runtime/runtime-internal.cc |
diff --git a/src/runtime/runtime-internal.cc b/src/runtime/runtime-internal.cc |
index 3de0f16b1e63233ca72bdb4ab8fa311e3d9653b5..9059558189dc393ad81dbd245e24a6bbf10a078c 100644 |
--- a/src/runtime/runtime-internal.cc |
+++ b/src/runtime/runtime-internal.cc |
@@ -274,12 +274,21 @@ RUNTIME_FUNCTION(Runtime_ThrowApplyNonFunction) { |
RUNTIME_FUNCTION(Runtime_PromiseRejectEvent) { |
- DCHECK(args.length() == 3); |
+ DCHECK(args.length() == 4); |
HandleScope scope(isolate); |
CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0); |
CONVERT_ARG_HANDLE_CHECKED(Object, value, 1); |
CONVERT_BOOLEAN_ARG_CHECKED(debug_event, 2); |
- if (debug_event) isolate->debug()->OnPromiseReject(promise, value); |
+ CONVERT_BOOLEAN_ARG_CHECKED(from_promise_reject, 3); |
adamk
2016/08/23 22:29:27
Rather than taking a second bool arg, you could sp
Dan Ehrenberg
2016/08/23 23:28:38
Very good point, done.
|
+ if (debug_event) { |
+ Handle<JSObject> rejected_promise = promise; |
+ if (from_promise_reject) { |
+ Handle<Object> promise_on_stack = isolate->GetPromiseOnStackOnThrow(); |
+ if (promise_on_stack->IsJSObject()) |
+ rejected_promise = Handle<JSObject>::cast(promise_on_stack); |
+ } |
+ isolate->debug()->OnPromiseReject(rejected_promise, value); |
+ } |
Handle<Symbol> key = isolate->factory()->promise_has_handler_symbol(); |
// Do not report if we actually have a handler. |
if (JSReceiver::GetDataProperty(promise, key)->IsUndefined(isolate)) { |