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

Unified Diff: src/runtime/runtime-promise.cc

Issue 2554013002: Revert of Create JSPromise (Closed)
Patch Set: 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/runtime/runtime-debug.cc ('k') | test/cctest/test-inobject-slack-tracking.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/runtime/runtime-promise.cc
diff --git a/src/runtime/runtime-promise.cc b/src/runtime/runtime-promise.cc
index 236582be02b818315104489207acb8b6ea612a48..b528ff7137a91d6620952316c08b730b3aaa747e 100644
--- a/src/runtime/runtime-promise.cc
+++ b/src/runtime/runtime-promise.cc
@@ -1,6 +1,7 @@
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+
#include "src/runtime/runtime-utils.h"
#include "src/debug/debug.h"
@@ -65,17 +66,10 @@
Handle<Object> debug_name = isolate->factory()->undefined_value();
if (isolate->debug()->is_active()) {
MaybeHandle<Object> maybe_result;
- Handle<Object> deferred_obj(deferred);
-
- if (deferred->IsFixedArray()) {
- deferred_obj = isolate->factory()->undefined_value();
- }
-
- Handle<Object> argv[] = {deferred_obj, status};
+ Handle<Object> argv[] = {deferred, status};
maybe_result = Execution::TryCall(
isolate, isolate->promise_debug_get_info(),
isolate->factory()->undefined_value(), arraysize(argv), argv);
-
Handle<Object> result;
if ((maybe_result).ToHandle(&result)) {
CHECK(result->IsJSArray());
@@ -94,50 +88,42 @@
isolate->EnqueueMicrotask(info);
}
-void PromiseSet(Handle<JSPromise> promise, int status, Handle<Object> result) {
- promise->set_status(status);
- promise->set_result(*result);
- // TODO(gsathya): reset reactions?
-}
-
-void PromiseFulfill(Isolate* isolate, Handle<JSPromise> promise,
- Handle<Smi> status, Handle<Object> value) {
- // Check if there are any callbacks.
- if (!promise->deferred()->IsUndefined(isolate)) {
- Handle<Object> tasks((status->value() == kPromiseFulfilled)
- ? promise->fulfill_reactions()
- : promise->reject_reactions(),
- isolate);
- Handle<Object> deferred(promise->deferred(), isolate);
+void PromiseFulfill(Isolate* isolate, Handle<JSReceiver> promise,
+ Handle<Smi> status, Handle<Object> value,
+ Handle<Symbol> reaction) {
+ Handle<Object> tasks = JSReceiver::GetDataProperty(promise, reaction);
+ if (!tasks->IsUndefined(isolate)) {
+ Handle<Object> deferred = JSReceiver::GetDataProperty(
+ promise, isolate->factory()->promise_deferred_reaction_symbol());
EnqueuePromiseReactionJob(isolate, value, tasks, deferred, status);
}
-
- PromiseSet(promise, status->value(), value);
-}
-
+}
} // namespace
RUNTIME_FUNCTION(Runtime_PromiseReject) {
DCHECK(args.length() == 3);
HandleScope scope(isolate);
- CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
+ CONVERT_ARG_HANDLE_CHECKED(JSReceiver, promise, 0);
CONVERT_ARG_HANDLE_CHECKED(Object, reason, 1);
CONVERT_BOOLEAN_ARG_CHECKED(debug_event, 2);
PromiseRejectEvent(isolate, promise, promise, reason, debug_event);
- Handle<Smi> status(Smi::FromInt(kPromiseRejected), isolate);
- PromiseFulfill(isolate, promise, status, reason);
+ Handle<Smi> status = handle(Smi::FromInt(kPromiseRejected), isolate);
+ Handle<Symbol> reaction =
+ isolate->factory()->promise_reject_reactions_symbol();
+ PromiseFulfill(isolate, promise, status, reason, reaction);
return isolate->heap()->undefined_value();
}
RUNTIME_FUNCTION(Runtime_PromiseFulfill) {
- DCHECK(args.length() == 3);
- HandleScope scope(isolate);
- CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
+ DCHECK(args.length() == 4);
+ HandleScope scope(isolate);
+ CONVERT_ARG_HANDLE_CHECKED(JSReceiver, promise, 0);
CONVERT_ARG_HANDLE_CHECKED(Smi, status, 1);
CONVERT_ARG_HANDLE_CHECKED(Object, value, 2);
- PromiseFulfill(isolate, promise, status, value);
+ CONVERT_ARG_HANDLE_CHECKED(Symbol, reaction, 3);
+ PromiseFulfill(isolate, promise, status, value, reaction);
return isolate->heap()->undefined_value();
}
@@ -206,7 +192,6 @@
RUNTIME_FUNCTION(Runtime_CreateResolvingFunctions) {
HandleScope scope(isolate);
CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0);
- DCHECK(args.length() == 1);
Handle<JSFunction> resolve, reject;
PromiseUtils::CreateResolvingFunctions(
@@ -219,58 +204,5 @@
return *result;
}
-RUNTIME_FUNCTION(Runtime_PromiseStatus) {
- HandleScope scope(isolate);
- DCHECK(args.length() == 1);
- CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
-
- return Smi::FromInt(promise->status());
-}
-
-RUNTIME_FUNCTION(Runtime_PromiseResult) {
- HandleScope scope(isolate);
- DCHECK(args.length() == 1);
- CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
- return promise->result();
-}
-
-RUNTIME_FUNCTION(Runtime_PromiseDeferred) {
- HandleScope scope(isolate);
- DCHECK(args.length() == 1);
- CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
-
- Handle<Object> deferred(promise->deferred(), isolate);
- if (deferred->IsUndefined(isolate)) {
- return isolate->heap()->undefined_value();
- }
-
- if (deferred->IsJSObject()) {
- return *deferred;
- }
-
- DCHECK(deferred->IsFixedArray());
- return *isolate->factory()->NewJSArrayWithElements(
- Handle<FixedArray>::cast(deferred));
-}
-
-RUNTIME_FUNCTION(Runtime_PromiseRejectReactions) {
- HandleScope scope(isolate);
- DCHECK(args.length() == 1);
- CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
-
- Handle<Object> reject_reactions(promise->reject_reactions(), isolate);
- if (reject_reactions->IsUndefined(isolate)) {
- return isolate->heap()->undefined_value();
- }
-
- if (reject_reactions->IsJSObject()) {
- return *reject_reactions;
- }
-
- DCHECK(reject_reactions->IsFixedArray());
- return *isolate->factory()->NewJSArrayWithElements(
- Handle<FixedArray>::cast(reject_reactions));
-}
-
} // namespace internal
} // namespace v8
« no previous file with comments | « src/runtime/runtime-debug.cc ('k') | test/cctest/test-inobject-slack-tracking.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698