| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 (function(global, utils, extrasUtils) { | 5 (function(global, utils, extrasUtils) { |
| 6 | 6 |
| 7 "use strict"; | 7 "use strict"; |
| 8 | 8 |
| 9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
| 10 | 10 |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 %PromiseRevokeReject(resolution); | 276 %PromiseRevokeReject(resolution); |
| 277 } | 277 } |
| 278 // Don't cause a debug event as this case is forwarding a rejection | 278 // Don't cause a debug event as this case is forwarding a rejection |
| 279 RejectPromise(promise, thenableValue, false); | 279 RejectPromise(promise, thenableValue, false); |
| 280 SET_PRIVATE(resolution, promiseHasHandlerSymbol, true); | 280 SET_PRIVATE(resolution, promiseHasHandlerSymbol, true); |
| 281 return; | 281 return; |
| 282 } | 282 } |
| 283 } | 283 } |
| 284 | 284 |
| 285 if (IS_CALLABLE(then)) { | 285 if (IS_CALLABLE(then)) { |
| 286 // PromiseResolveThenableJob | 286 var callbacks = CreateResolvingFunctions(promise, false); |
| 287 var id; | 287 var id, before_debug_event, after_debug_event; |
| 288 var name = "PromiseResolveThenableJob"; | 288 if (DEBUG_IS_ACTIVE) { |
| 289 var instrumenting = DEBUG_IS_ACTIVE; | |
| 290 %EnqueueMicrotask(function() { | |
| 291 if (instrumenting) { | |
| 292 %DebugAsyncTaskEvent({ type: "willHandle", id: id, name: name }); | |
| 293 } | |
| 294 // These resolving functions simply forward the exception, so | |
| 295 // don't create a new debugEvent. | |
| 296 var callbacks = CreateResolvingFunctions(promise, false); | |
| 297 try { | |
| 298 %_Call(then, resolution, callbacks.resolve, callbacks.reject); | |
| 299 } catch (e) { | |
| 300 %_Call(callbacks.reject, UNDEFINED, e); | |
| 301 } | |
| 302 if (instrumenting) { | |
| 303 %DebugAsyncTaskEvent({ type: "didHandle", id: id, name: name }); | |
| 304 } | |
| 305 }); | |
| 306 if (instrumenting) { | |
| 307 id = ++lastMicrotaskId; | 289 id = ++lastMicrotaskId; |
| 308 %DebugAsyncTaskEvent({ type: "enqueue", id: id, name: name }); | 290 before_debug_event = { |
| 291 type: "willHandle", |
| 292 id: id, |
| 293 name: "PromiseResolveThenableJob" |
| 294 }; |
| 295 after_debug_event = { |
| 296 type: "didHandle", |
| 297 id: id, |
| 298 name: "PromiseResolveThenableJob" |
| 299 }; |
| 300 %DebugAsyncTaskEvent({ |
| 301 type: "enqueue", |
| 302 id: id, |
| 303 name: "PromiseResolveThenableJob" |
| 304 }); |
| 309 } | 305 } |
| 306 %EnqueuePromiseResolveThenableJob( |
| 307 resolution, then, callbacks.resolve, callbacks.reject, |
| 308 before_debug_event, after_debug_event); |
| 310 return; | 309 return; |
| 311 } | 310 } |
| 312 } | 311 } |
| 313 FulfillPromise(promise, kFulfilled, resolution, promiseFulfillReactionsSymbol)
; | 312 FulfillPromise(promise, kFulfilled, resolution, promiseFulfillReactionsSymbol)
; |
| 314 } | 313 } |
| 315 | 314 |
| 316 // ES#sec-rejectpromise | 315 // ES#sec-rejectpromise |
| 317 // RejectPromise ( promise, reason ) | 316 // RejectPromise ( promise, reason ) |
| 318 function RejectPromise(promise, reason, debugEvent) { | 317 function RejectPromise(promise, reason, debugEvent) { |
| 319 // Check promise status to confirm that this reject has an effect. | 318 // Check promise status to confirm that this reject has an effect. |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 "then", PromiseThen, | 605 "then", PromiseThen, |
| 607 "catch", PromiseCatch | 606 "catch", PromiseCatch |
| 608 ]); | 607 ]); |
| 609 | 608 |
| 610 %InstallToContext([ | 609 %InstallToContext([ |
| 611 "promise_catch", PromiseCatch, | 610 "promise_catch", PromiseCatch, |
| 612 "promise_create", PromiseCreate, | 611 "promise_create", PromiseCreate, |
| 613 "promise_has_user_defined_reject_handler", PromiseHasUserDefinedRejectHandler, | 612 "promise_has_user_defined_reject_handler", PromiseHasUserDefinedRejectHandler, |
| 614 "promise_reject", DoRejectPromise, | 613 "promise_reject", DoRejectPromise, |
| 615 "promise_resolve", ResolvePromise, | 614 "promise_resolve", ResolvePromise, |
| 616 "promise_then", PromiseThen, | 615 "promise_then", PromiseThen |
| 617 ]); | 616 ]); |
| 618 | 617 |
| 619 // This allows extras to create promises quickly without building extra | 618 // This allows extras to create promises quickly without building extra |
| 620 // resolve/reject closures, and allows them to later resolve and reject any | 619 // resolve/reject closures, and allows them to later resolve and reject any |
| 621 // promise without having to hold on to those closures forever. | 620 // promise without having to hold on to those closures forever. |
| 622 utils.InstallFunctions(extrasUtils, 0, [ | 621 utils.InstallFunctions(extrasUtils, 0, [ |
| 623 "createPromise", PromiseCreate, | 622 "createPromise", PromiseCreate, |
| 624 "resolvePromise", ResolvePromise, | 623 "resolvePromise", ResolvePromise, |
| 625 "rejectPromise", DoRejectPromise | 624 "rejectPromise", DoRejectPromise |
| 626 ]); | 625 ]); |
| 627 | 626 |
| 628 utils.Export(function(to) { | 627 utils.Export(function(to) { |
| 629 to.IsPromise = IsPromise; | 628 to.IsPromise = IsPromise; |
| 630 to.PromiseCreate = PromiseCreate; | 629 to.PromiseCreate = PromiseCreate; |
| 631 to.PromiseThen = PromiseThen; | 630 to.PromiseThen = PromiseThen; |
| 632 | 631 |
| 633 to.GlobalPromise = GlobalPromise; | 632 to.GlobalPromise = GlobalPromise; |
| 634 to.NewPromiseCapability = NewPromiseCapability; | 633 to.NewPromiseCapability = NewPromiseCapability; |
| 635 to.PerformPromiseThen = PerformPromiseThen; | 634 to.PerformPromiseThen = PerformPromiseThen; |
| 636 to.ResolvePromise = ResolvePromise; | 635 to.ResolvePromise = ResolvePromise; |
| 637 to.RejectPromise = RejectPromise; | 636 to.RejectPromise = RejectPromise; |
| 638 }); | 637 }); |
| 639 | 638 |
| 640 }) | 639 }) |
| OLD | NEW |