Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: src/isolate.cc

Issue 2590563003: [promises] Remove deferred object (Closed)
Patch Set: rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/factory.cc ('k') | src/js/async-await.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/isolate.cc
diff --git a/src/isolate.cc b/src/isolate.cc
index 36b3b34e6ff9a0ca5fd56b775d81ed661e73f804..4e5a7c8fd983d2dfb3c710024ff32c5b63e34baf 100644
--- a/src/isolate.cc
+++ b/src/isolate.cc
@@ -1813,7 +1813,7 @@ bool InternalPromiseHasUserDefinedRejectHandler(Isolate* isolate,
Handle<JSPromise> promise);
bool PromiseHandlerCheck(Isolate* isolate, Handle<JSReceiver> handler,
- Handle<JSObject> deferred) {
+ Handle<JSReceiver> deferred_promise) {
// Recurse to the forwarding Promise, if any. This may be due to
// - await reaction forwarding to the throwaway Promise, which has
// a dependency edge to the outer Promise.
@@ -1827,16 +1827,12 @@ bool PromiseHandlerCheck(Isolate* isolate, Handle<JSReceiver> handler,
return true;
}
- // TODO(gsathya): Remove this once we get rid of deferred objects.
- Handle<String> promise_str = isolate->factory()->promise_string();
- Handle<Object> deferred_promise_obj =
- JSObject::GetDataProperty(deferred, promise_str);
- if (!deferred_promise_obj->IsJSPromise()) {
+ if (!deferred_promise->IsJSPromise()) {
return true;
}
return InternalPromiseHasUserDefinedRejectHandler(
- isolate, Handle<JSPromise>::cast(deferred_promise_obj));
+ isolate, Handle<JSPromise>::cast(deferred_promise));
}
bool InternalPromiseHasUserDefinedRejectHandler(Isolate* isolate,
@@ -1859,7 +1855,7 @@ bool InternalPromiseHasUserDefinedRejectHandler(Isolate* isolate,
}
Handle<Object> queue(promise->reject_reactions(), isolate);
- Handle<Object> deferred(promise->deferred(), isolate);
+ Handle<Object> deferred_promise(promise->deferred_promise(), isolate);
if (queue->IsUndefined(isolate)) {
return false;
@@ -1867,15 +1863,17 @@ bool InternalPromiseHasUserDefinedRejectHandler(Isolate* isolate,
if (queue->IsCallable()) {
return PromiseHandlerCheck(isolate, Handle<JSReceiver>::cast(queue),
- Handle<JSObject>::cast(deferred));
+ Handle<JSReceiver>::cast(deferred_promise));
}
Handle<FixedArray> queue_arr = Handle<FixedArray>::cast(queue);
- Handle<FixedArray> deferred_arr = Handle<FixedArray>::cast(deferred);
- for (int i = 0; i < deferred_arr->length(); i++) {
+ Handle<FixedArray> deferred_promise_arr =
+ Handle<FixedArray>::cast(deferred_promise);
+ for (int i = 0; i < deferred_promise_arr->length(); i++) {
Handle<JSReceiver> queue_item(JSReceiver::cast(queue_arr->get(i)));
- Handle<JSObject> deferred_item(JSObject::cast(deferred_arr->get(i)));
- if (PromiseHandlerCheck(isolate, queue_item, deferred_item)) {
+ Handle<JSReceiver> deferred_promise_item(
+ JSReceiver::cast(deferred_promise_arr->get(i)));
+ if (PromiseHandlerCheck(isolate, queue_item, deferred_promise_item)) {
return true;
}
}
@@ -3299,15 +3297,24 @@ void Isolate::PromiseReactionJob(Handle<PromiseReactionJobInfo> info,
Handle<Object> tasks(info->tasks(), this);
Handle<JSFunction> promise_handle_fn = promise_handle();
Handle<Object> undefined = factory()->undefined_value();
- Handle<Object> deferred(info->deferred(), this);
+ Handle<Object> deferred_promise(info->deferred_promise(), this);
- if (deferred->IsFixedArray()) {
+ if (deferred_promise->IsFixedArray()) {
DCHECK(tasks->IsFixedArray());
- Handle<FixedArray> deferred_arr = Handle<FixedArray>::cast(deferred);
+ Handle<FixedArray> deferred_promise_arr =
+ Handle<FixedArray>::cast(deferred_promise);
+ Handle<FixedArray> deferred_on_resolve_arr(
+ FixedArray::cast(info->deferred_on_resolve()), this);
+ Handle<FixedArray> deferred_on_reject_arr(
+ FixedArray::cast(info->deferred_on_reject()), this);
Handle<FixedArray> tasks_arr = Handle<FixedArray>::cast(tasks);
- for (int i = 0; i < deferred_arr->length(); i++) {
- Handle<Object> argv[] = {promise, value, handle(tasks_arr->get(i), this),
- handle(deferred_arr->get(i), this)};
+ for (int i = 0; i < deferred_promise_arr->length(); i++) {
+ Handle<Object> argv[] = {promise,
+ value,
+ handle(tasks_arr->get(i), this),
+ handle(deferred_promise_arr->get(i), this),
+ handle(deferred_on_resolve_arr->get(i), this),
+ handle(deferred_on_reject_arr->get(i), this)};
*result = Execution::TryCall(this, promise_handle_fn, undefined,
arraysize(argv), argv, maybe_exception);
// If execution is terminating, just bail out.
@@ -3316,7 +3323,12 @@ void Isolate::PromiseReactionJob(Handle<PromiseReactionJobInfo> info,
}
}
} else {
- Handle<Object> argv[] = {promise, value, tasks, deferred};
+ Handle<Object> argv[] = {promise,
+ value,
+ tasks,
+ deferred_promise,
+ handle(info->deferred_on_resolve(), this),
+ handle(info->deferred_on_reject(), this)};
*result = Execution::TryCall(this, promise_handle_fn, undefined,
arraysize(argv), argv, maybe_exception);
}
« no previous file with comments | « src/factory.cc ('k') | src/js/async-await.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698