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

Side by Side Diff: src/runtime/runtime-promise.cc

Issue 2589113002: [api] add API for Promise status and result. (Closed)
Patch Set: addressed comments Created 3 years, 12 months 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 unified diff | Download patch
« no previous file with comments | « src/objects.cc ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 #include "src/runtime/runtime-utils.h" 4 #include "src/runtime/runtime-utils.h"
5 5
6 #include "src/debug/debug.h" 6 #include "src/debug/debug.h"
7 #include "src/elements.h" 7 #include "src/elements.h"
8 #include "src/promise-utils.h" 8 #include "src/promise-utils.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 promise->set_result(*result); 102 promise->set_result(*result);
103 promise->set_deferred(isolate->heap()->undefined_value()); 103 promise->set_deferred(isolate->heap()->undefined_value());
104 promise->set_fulfill_reactions(isolate->heap()->undefined_value()); 104 promise->set_fulfill_reactions(isolate->heap()->undefined_value());
105 promise->set_reject_reactions(isolate->heap()->undefined_value()); 105 promise->set_reject_reactions(isolate->heap()->undefined_value());
106 } 106 }
107 107
108 void PromiseFulfill(Isolate* isolate, Handle<JSPromise> promise, 108 void PromiseFulfill(Isolate* isolate, Handle<JSPromise> promise,
109 Handle<Smi> status, Handle<Object> value) { 109 Handle<Smi> status, Handle<Object> value) {
110 // Check if there are any callbacks. 110 // Check if there are any callbacks.
111 if (!promise->deferred()->IsUndefined(isolate)) { 111 if (!promise->deferred()->IsUndefined(isolate)) {
112 Handle<Object> tasks((status->value() == kPromiseFulfilled) 112 Handle<Object> tasks((status->value() == v8::Promise::kFulfilled)
113 ? promise->fulfill_reactions() 113 ? promise->fulfill_reactions()
114 : promise->reject_reactions(), 114 : promise->reject_reactions(),
115 isolate); 115 isolate);
116 Handle<Object> deferred(promise->deferred(), isolate); 116 Handle<Object> deferred(promise->deferred(), isolate);
117 EnqueuePromiseReactionJob(isolate, promise, value, tasks, deferred, status); 117 EnqueuePromiseReactionJob(isolate, promise, value, tasks, deferred, status);
118 } 118 }
119 119
120 PromiseSet(isolate, promise, status->value(), value); 120 PromiseSet(isolate, promise, status->value(), value);
121 } 121 }
122 122
123 } // namespace 123 } // namespace
124 124
125 RUNTIME_FUNCTION(Runtime_PromiseReject) { 125 RUNTIME_FUNCTION(Runtime_PromiseReject) {
126 DCHECK(args.length() == 3); 126 DCHECK(args.length() == 3);
127 HandleScope scope(isolate); 127 HandleScope scope(isolate);
128 CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0); 128 CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
129 CONVERT_ARG_HANDLE_CHECKED(Object, reason, 1); 129 CONVERT_ARG_HANDLE_CHECKED(Object, reason, 1);
130 CONVERT_BOOLEAN_ARG_CHECKED(debug_event, 2); 130 CONVERT_BOOLEAN_ARG_CHECKED(debug_event, 2);
131 131
132 PromiseRejectEvent(isolate, promise, promise, reason, debug_event); 132 PromiseRejectEvent(isolate, promise, promise, reason, debug_event);
133 133
134 Handle<Smi> status(Smi::FromInt(kPromiseRejected), isolate); 134 Handle<Smi> status(Smi::FromInt(v8::Promise::kRejected), isolate);
135 PromiseFulfill(isolate, promise, status, reason); 135 PromiseFulfill(isolate, promise, status, reason);
136 return isolate->heap()->undefined_value(); 136 return isolate->heap()->undefined_value();
137 } 137 }
138 138
139 RUNTIME_FUNCTION(Runtime_PromiseFulfill) { 139 RUNTIME_FUNCTION(Runtime_PromiseFulfill) {
140 DCHECK(args.length() == 3); 140 DCHECK(args.length() == 3);
141 HandleScope scope(isolate); 141 HandleScope scope(isolate);
142 CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0); 142 CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
143 CONVERT_ARG_HANDLE_CHECKED(Smi, status, 1); 143 CONVERT_ARG_HANDLE_CHECKED(Smi, status, 1);
144 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); 144 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2);
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 HandleScope scope(isolate); 318 HandleScope scope(isolate);
319 DCHECK_EQ(1, args.length()); 319 DCHECK_EQ(1, args.length());
320 CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0); 320 CONVERT_ARG_HANDLE_CHECKED(JSPromise, promise, 0);
321 isolate->RunPromiseHook(PromiseHookType::kAfter, promise, 321 isolate->RunPromiseHook(PromiseHookType::kAfter, promise,
322 isolate->factory()->undefined_value()); 322 isolate->factory()->undefined_value());
323 return isolate->heap()->undefined_value(); 323 return isolate->heap()->undefined_value();
324 } 324 }
325 325
326 } // namespace internal 326 } // namespace internal
327 } // namespace v8 327 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698