| Index: src/runtime/runtime-promise.cc
|
| diff --git a/src/runtime/runtime-promise.cc b/src/runtime/runtime-promise.cc
|
| index 236582be02b818315104489207acb8b6ea612a48..00bf284d15151b92bf1788aac18cd84178dfefbb 100644
|
| --- a/src/runtime/runtime-promise.cc
|
| +++ b/src/runtime/runtime-promise.cc
|
| @@ -12,15 +12,15 @@ namespace internal {
|
|
|
| namespace {
|
|
|
| -void PromiseRejectEvent(Isolate* isolate, Handle<JSReceiver> promise,
|
| +void PromiseRejectEvent(Isolate* isolate, Handle<JSPromise> promise,
|
| Handle<Object> rejected_promise, Handle<Object> value,
|
| bool debug_event) {
|
| if (isolate->debug()->is_active() && debug_event) {
|
| 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)) {
|
| +
|
| + // Report only if we don't actually have a handler.
|
| + if (promise->has_handler() == 0) {
|
| isolate->ReportPromiseReject(Handle<JSObject>::cast(promise), value,
|
| v8::kPromiseRejectWithNoHandler);
|
| }
|
| @@ -31,7 +31,7 @@ void PromiseRejectEvent(Isolate* isolate, Handle<JSReceiver> promise,
|
| RUNTIME_FUNCTION(Runtime_PromiseRejectEventFromStack) {
|
| DCHECK(args.length() == 2);
|
| HandleScope scope(isolate);
|
| - CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
|
| CONVERT_ARG_HANDLE_CHECKED(Object, value, 1);
|
|
|
| Handle<Object> rejected_promise = promise;
|
| @@ -48,10 +48,9 @@ RUNTIME_FUNCTION(Runtime_PromiseRejectEventFromStack) {
|
| RUNTIME_FUNCTION(Runtime_PromiseRevokeReject) {
|
| DCHECK(args.length() == 1);
|
| HandleScope scope(isolate);
|
| - CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0);
|
| - Handle<Symbol> key = isolate->factory()->promise_has_handler_symbol();
|
| + CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
|
| // At this point, no revocation has been issued before
|
| - CHECK(JSReceiver::GetDataProperty(promise, key)->IsUndefined(isolate));
|
| + CHECK(promise->has_handler() == 0);
|
| isolate->ReportPromiseReject(promise, Handle<Object>(),
|
| v8::kPromiseHandlerAddedAfterReject);
|
| return isolate->heap()->undefined_value();
|
| @@ -272,5 +271,14 @@ RUNTIME_FUNCTION(Runtime_PromiseRejectReactions) {
|
| Handle<FixedArray>::cast(reject_reactions));
|
| }
|
|
|
| +RUNTIME_FUNCTION(Runtime_PromiseMarkAsHandled) {
|
| + HandleScope scope(isolate);
|
| + DCHECK(args.length() == 1);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
|
| +
|
| + promise->set_has_handler(1);
|
| + return isolate->heap()->undefined_value();
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|