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

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

Issue 2487053002: [promises] Remove one runtime call to create_resolving_functions (Closed)
Patch Set: rebase Created 4 years, 1 month 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
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 4
5 #include "src/runtime/runtime-utils.h" 5 #include "src/runtime/runtime-utils.h"
6 6
7 #include "src/debug/debug.h" 7 #include "src/debug/debug.h"
8 #include "src/elements.h" 8 #include "src/elements.h"
9 #include "src/promise-utils.h"
9 10
10 namespace v8 { 11 namespace v8 {
11 namespace internal { 12 namespace internal {
12 13
13 namespace { 14 namespace {
14 15
15 void PromiseRejectEvent(Isolate* isolate, Handle<JSReceiver> promise, 16 void PromiseRejectEvent(Isolate* isolate, Handle<JSReceiver> promise,
16 Handle<Object> rejected_promise, Handle<Object> value, 17 Handle<Object> rejected_promise, Handle<Object> value,
17 bool debug_event) { 18 bool debug_event) {
18 if (isolate->debug()->is_active() && debug_event) { 19 if (isolate->debug()->is_active() && debug_event) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 CONVERT_ARG_HANDLE_CHECKED(Object, value, 0); 133 CONVERT_ARG_HANDLE_CHECKED(Object, value, 0);
133 CONVERT_ARG_HANDLE_CHECKED(Object, tasks, 1); 134 CONVERT_ARG_HANDLE_CHECKED(Object, tasks, 1);
134 CONVERT_ARG_HANDLE_CHECKED(Object, deferred, 2); 135 CONVERT_ARG_HANDLE_CHECKED(Object, deferred, 2);
135 CONVERT_ARG_HANDLE_CHECKED(Object, status, 3); 136 CONVERT_ARG_HANDLE_CHECKED(Object, status, 3);
136 EnqueuePromiseReactionJob(isolate, value, tasks, deferred, status); 137 EnqueuePromiseReactionJob(isolate, value, tasks, deferred, status);
137 return isolate->heap()->undefined_value(); 138 return isolate->heap()->undefined_value();
138 } 139 }
139 140
140 RUNTIME_FUNCTION(Runtime_EnqueuePromiseResolveThenableJob) { 141 RUNTIME_FUNCTION(Runtime_EnqueuePromiseResolveThenableJob) {
141 HandleScope scope(isolate); 142 HandleScope scope(isolate);
142 DCHECK(args.length() == 4); 143 DCHECK(args.length() == 3);
143 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, resolution, 0); 144 CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0);
144 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, then, 1); 145 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, resolution, 1);
145 CONVERT_ARG_HANDLE_CHECKED(JSFunction, resolve, 2); 146 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, then, 2);
146 CONVERT_ARG_HANDLE_CHECKED(JSFunction, reject, 3); 147
147 Handle<Object> debug_id; 148 // TODO(gsathya): Add fast path for native promises with unmodified
148 Handle<Object> debug_name; 149 // PromiseThen (which don't need these resolving functions, but
150 // instead can just call resolve/reject directly).
151 Handle<JSFunction> resolve, reject;
152 PromiseUtils::CreateResolvingFunctions(isolate, promise,
153 isolate->factory()->ToBoolean(false),
adamk 2016/11/10 18:10:55 isolate->factory()->false_value()
gsathya 2016/11/11 02:34:38 Done.
154 &resolve, &reject);
155
156 Handle<Object> debug_id, debug_name;
149 if (isolate->debug()->is_active()) { 157 if (isolate->debug()->is_active()) {
150 debug_id = 158 debug_id =
151 handle(Smi::FromInt(isolate->GetNextDebugMicrotaskId()), isolate); 159 handle(Smi::FromInt(isolate->GetNextDebugMicrotaskId()), isolate);
152 debug_name = isolate->factory()->PromiseResolveThenableJob_string(); 160 debug_name = isolate->factory()->PromiseResolveThenableJob_string();
153 isolate->debug()->OnAsyncTaskEvent(isolate->factory()->enqueue_string(), 161 isolate->debug()->OnAsyncTaskEvent(isolate->factory()->enqueue_string(),
154 debug_id, 162 debug_id,
155 Handle<String>::cast(debug_name)); 163 Handle<String>::cast(debug_name));
156 } else { 164 } else {
157 debug_id = isolate->factory()->undefined_value(); 165 debug_id = isolate->factory()->undefined_value();
158 debug_name = isolate->factory()->undefined_value(); 166 debug_name = isolate->factory()->undefined_value();
159 } 167 }
168
160 Handle<PromiseResolveThenableJobInfo> info = 169 Handle<PromiseResolveThenableJobInfo> info =
161 isolate->factory()->NewPromiseResolveThenableJobInfo( 170 isolate->factory()->NewPromiseResolveThenableJobInfo(
162 resolution, then, resolve, reject, debug_id, debug_name); 171 resolution, then, resolve, reject, debug_id, debug_name,
172 isolate->native_context());
163 isolate->EnqueueMicrotask(info); 173 isolate->EnqueueMicrotask(info);
174
164 return isolate->heap()->undefined_value(); 175 return isolate->heap()->undefined_value();
165 } 176 }
166 177
167 RUNTIME_FUNCTION(Runtime_EnqueueMicrotask) { 178 RUNTIME_FUNCTION(Runtime_EnqueueMicrotask) {
168 HandleScope scope(isolate); 179 HandleScope scope(isolate);
169 DCHECK(args.length() == 1); 180 DCHECK(args.length() == 1);
170 CONVERT_ARG_HANDLE_CHECKED(JSFunction, microtask, 0); 181 CONVERT_ARG_HANDLE_CHECKED(JSFunction, microtask, 0);
171 isolate->EnqueueMicrotask(microtask); 182 isolate->EnqueueMicrotask(microtask);
172 return isolate->heap()->undefined_value(); 183 return isolate->heap()->undefined_value();
173 } 184 }
174 185
175 RUNTIME_FUNCTION(Runtime_RunMicrotasks) { 186 RUNTIME_FUNCTION(Runtime_RunMicrotasks) {
176 HandleScope scope(isolate); 187 HandleScope scope(isolate);
177 DCHECK(args.length() == 0); 188 DCHECK(args.length() == 0);
178 isolate->RunMicrotasks(); 189 isolate->RunMicrotasks();
179 return isolate->heap()->undefined_value(); 190 return isolate->heap()->undefined_value();
180 } 191 }
181 192
182 } // namespace internal 193 } // namespace internal
183 } // namespace v8 194 } // namespace v8
OLDNEW
« src/promise-utils.cc ('K') | « src/runtime/runtime.h ('k') | src/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698