Skip to content

Commit bdda995

Browse files
marjakhCommit Bot
authored andcommitted
Move helper SFIs from NativeContext to Isolate, part 4
There's no need for them to be in NativeContext. This CL moves the rest of the Promise-related SFIs. Bug: v8:10482 Change-Id: I7eb926be14bf44fb3cd01cb96b4769eff1c2911b Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2190752 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Reviewed-by: Georg Neis <neis@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Reviewed-by: Maya Lekova <mslekova@chromium.org> Cr-Commit-Position: refs/heads/master@{#67732}
1 parent fcd917e commit bdda995

14 files changed

Lines changed: 190 additions & 165 deletions

src/builtins/promise-abstract-operations.tq

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -295,14 +295,11 @@ namespace promise {
295295
const map = UnsafeCast<Map>(
296296
nativeContext
297297
[NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]);
298-
const resolveInfo = UnsafeCast<SharedFunctionInfo>(
299-
nativeContext[NativeContextSlot::
300-
PROMISE_CAPABILITY_DEFAULT_RESOLVE_SHARED_FUN_INDEX]);
298+
const resolveInfo = PromiseCapabilityDefaultResolveSharedFunConstant();
299+
301300
const resolve: JSFunction =
302301
AllocateFunctionWithMapAndContext(map, resolveInfo, promiseContext);
303-
const rejectInfo = UnsafeCast<SharedFunctionInfo>(
304-
nativeContext[NativeContextSlot::
305-
PROMISE_CAPABILITY_DEFAULT_REJECT_SHARED_FUN_INDEX]);
302+
const rejectInfo = PromiseCapabilityDefaultRejectSharedFunConstant();
306303
const reject: JSFunction =
307304
AllocateFunctionWithMapAndContext(map, rejectInfo, promiseContext);
308305
return PromiseResolvingFunctions{resolve: resolve, reject: reject};
@@ -329,9 +326,7 @@ namespace promise {
329326
const executorContext =
330327
CreatePromiseCapabilitiesExecutorContext(nativeContext, capability);
331328

332-
const executorInfo = UnsafeCast<SharedFunctionInfo>(
333-
nativeContext[NativeContextSlot::
334-
PROMISE_GET_CAPABILITIES_EXECUTOR_SHARED_FUN]);
329+
const executorInfo = PromiseGetCapabilitiesExecutorSharedFunConstant();
335330
const functionMap = UnsafeCast<Map>(
336331
nativeContext
337332
[NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]);
@@ -543,4 +538,11 @@ namespace promise {
543538
}
544539
return promise;
545540
}
541+
542+
extern macro PromiseCapabilityDefaultRejectSharedFunConstant():
543+
SharedFunctionInfo;
544+
extern macro PromiseCapabilityDefaultResolveSharedFunConstant():
545+
SharedFunctionInfo;
546+
extern macro PromiseGetCapabilitiesExecutorSharedFunConstant():
547+
SharedFunctionInfo;
546548
}

src/builtins/promise-all.tq

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,15 @@ namespace promise {
3838

3939
macro CreatePromiseAllResolveElementFunction(implicit context: Context)(
4040
resolveElementContext: Context, index: Smi, nativeContext: NativeContext,
41-
slotIndex: constexpr NativeContextSlot): JSFunction {
41+
resolveFunction: SharedFunctionInfo): JSFunction {
4242
assert(index > 0);
4343
assert(index < kPropertyArrayHashFieldMax);
4444

4545
const map = UnsafeCast<Map>(
4646
nativeContext
4747
[NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]);
48-
const resolveInfo =
49-
UnsafeCast<SharedFunctionInfo>(nativeContext[slotIndex]);
5048
const resolve = AllocateFunctionWithMapAndContext(
51-
map, resolveInfo, resolveElementContext);
49+
map, resolveFunction, resolveElementContext);
5250

5351
assert(kPropertyArrayNoHashSentinel == 0);
5452
resolve.properties_or_hash = index;
@@ -83,7 +81,7 @@ namespace promise {
8381
index: Smi, _capability: PromiseCapability): Callable {
8482
return CreatePromiseAllResolveElementFunction(
8583
resolveElementContext, index, nativeContext,
86-
NativeContextSlot::PROMISE_ALL_RESOLVE_ELEMENT_SHARED_FUN);
84+
PromiseAllResolveElementSharedFunConstant());
8785
}
8886
}
8987

@@ -101,7 +99,7 @@ namespace promise {
10199
index: Smi, _capability: PromiseCapability): Callable {
102100
return CreatePromiseAllResolveElementFunction(
103101
resolveElementContext, index, nativeContext,
104-
NativeContextSlot::PROMISE_ALL_SETTLED_RESOLVE_ELEMENT_SHARED_FUN);
102+
PromiseAllSettledResolveElementSharedFunConstant());
105103
}
106104
}
107105

@@ -111,7 +109,7 @@ namespace promise {
111109
index: Smi, _capability: PromiseCapability): Callable {
112110
return CreatePromiseAllResolveElementFunction(
113111
resolveElementContext, index, nativeContext,
114-
NativeContextSlot::PROMISE_ALL_SETTLED_REJECT_ELEMENT_SHARED_FUN);
112+
PromiseAllSettledRejectElementSharedFunConstant());
115113
}
116114
}
117115

@@ -373,4 +371,11 @@ namespace promise {
373371
receiver, iterable, PromiseAllSettledResolveElementFunctor{},
374372
PromiseAllSettledRejectElementFunctor{});
375373
}
374+
375+
extern macro PromiseAllResolveElementSharedFunConstant(): SharedFunctionInfo;
376+
extern macro PromiseAllSettledRejectElementSharedFunConstant():
377+
SharedFunctionInfo;
378+
extern macro PromiseAllSettledResolveElementSharedFunConstant():
379+
SharedFunctionInfo;
380+
376381
}

src/builtins/promise-any.tq

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,7 @@ namespace promise {
4949
const map = UnsafeCast<Map>(
5050
nativeContext
5151
[NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]);
52-
const rejectInfo = UnsafeCast<SharedFunctionInfo>(
53-
nativeContext
54-
[NativeContextSlot::PROMISE_ANY_REJECT_ELEMENT_SHARED_FUN]);
52+
const rejectInfo = PromiseAnyRejectElementSharedFunConstant();
5553
const reject = AllocateFunctionWithMapAndContext(
5654
map, rejectInfo, rejectElementContext);
5755
assert(kPropertyArrayNoHashSentinel == 0);
@@ -372,4 +370,6 @@ namespace promise {
372370
obj.errors = errorsArray;
373371
return obj;
374372
}
373+
374+
extern macro PromiseAnyRejectElementSharedFunConstant(): SharedFunctionInfo;
375375
}

src/codegen/code-stub-assembler.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,27 @@ enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol };
6565
V(MapIteratorProtector, map_iterator_protector, MapIteratorProtector) \
6666
V(NoElementsProtector, no_elements_protector, NoElementsProtector) \
6767
V(NumberStringCache, number_string_cache, NumberStringCache) \
68+
V(PromiseAllResolveElementSharedFun, promise_all_resolve_element_shared_fun, \
69+
PromiseAllResolveElementSharedFun) \
70+
V(PromiseAllSettledRejectElementSharedFun, \
71+
promise_all_settled_reject_element_shared_fun, \
72+
PromiseAllSettledRejectElementSharedFun) \
73+
V(PromiseAllSettledResolveElementSharedFun, \
74+
promise_all_settled_resolve_element_shared_fun, \
75+
PromiseAllSettledResolveElementSharedFun) \
76+
V(PromiseAnyRejectElementSharedFun, promise_any_reject_element_shared_fun, \
77+
PromiseAnyRejectElementSharedFun) \
78+
V(PromiseCapabilityDefaultRejectSharedFun, \
79+
promise_capability_default_reject_shared_fun, \
80+
PromiseCapabilityDefaultRejectSharedFun) \
81+
V(PromiseCapabilityDefaultResolveSharedFun, \
82+
promise_capability_default_resolve_shared_fun, \
83+
PromiseCapabilityDefaultResolveSharedFun) \
6884
V(PromiseCatchFinallySharedFun, promise_catch_finally_shared_fun, \
6985
PromiseCatchFinallySharedFun) \
86+
V(PromiseGetCapabilitiesExecutorSharedFun, \
87+
promise_get_capabilities_executor_shared_fun, \
88+
PromiseGetCapabilitiesExecutorSharedFun) \
7089
V(PromiseResolveProtector, promise_resolve_protector, \
7190
PromiseResolveProtector) \
7291
V(PromiseSpeciesProtector, promise_species_protector, \

src/compiler/heap-refs.h

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -385,43 +385,41 @@ class ContextRef : public HeapObjectRef {
385385
base::Optional<ScopeInfoRef> scope_info() const;
386386
};
387387

388-
#define BROKER_COMPULSORY_NATIVE_CONTEXT_FIELDS(V) \
389-
V(JSFunction, array_function) \
390-
V(JSFunction, boolean_function) \
391-
V(JSFunction, bigint_function) \
392-
V(JSFunction, number_function) \
393-
V(JSFunction, object_function) \
394-
V(JSFunction, promise_function) \
395-
V(JSFunction, promise_then) \
396-
V(JSFunction, regexp_function) \
397-
V(JSFunction, string_function) \
398-
V(JSFunction, symbol_function) \
399-
V(JSGlobalObject, global_object) \
400-
V(JSGlobalProxy, global_proxy_object) \
401-
V(JSObject, promise_prototype) \
402-
V(Map, block_context_map) \
403-
V(Map, bound_function_with_constructor_map) \
404-
V(Map, bound_function_without_constructor_map) \
405-
V(Map, catch_context_map) \
406-
V(Map, eval_context_map) \
407-
V(Map, fast_aliased_arguments_map) \
408-
V(Map, function_context_map) \
409-
V(Map, initial_array_iterator_map) \
410-
V(Map, initial_string_iterator_map) \
411-
V(Map, iterator_result_map) \
412-
V(Map, js_array_holey_double_elements_map) \
413-
V(Map, js_array_holey_elements_map) \
414-
V(Map, js_array_holey_smi_elements_map) \
415-
V(Map, js_array_packed_double_elements_map) \
416-
V(Map, js_array_packed_elements_map) \
417-
V(Map, js_array_packed_smi_elements_map) \
418-
V(Map, sloppy_arguments_map) \
419-
V(Map, slow_object_with_null_prototype_map) \
420-
V(Map, strict_arguments_map) \
421-
V(Map, with_context_map) \
422-
V(ScriptContextTable, script_context_table) \
423-
V(SharedFunctionInfo, promise_capability_default_reject_shared_fun) \
424-
V(SharedFunctionInfo, promise_capability_default_resolve_shared_fun)
388+
#define BROKER_COMPULSORY_NATIVE_CONTEXT_FIELDS(V) \
389+
V(JSFunction, array_function) \
390+
V(JSFunction, boolean_function) \
391+
V(JSFunction, bigint_function) \
392+
V(JSFunction, number_function) \
393+
V(JSFunction, object_function) \
394+
V(JSFunction, promise_function) \
395+
V(JSFunction, promise_then) \
396+
V(JSFunction, regexp_function) \
397+
V(JSFunction, string_function) \
398+
V(JSFunction, symbol_function) \
399+
V(JSGlobalObject, global_object) \
400+
V(JSGlobalProxy, global_proxy_object) \
401+
V(JSObject, promise_prototype) \
402+
V(Map, block_context_map) \
403+
V(Map, bound_function_with_constructor_map) \
404+
V(Map, bound_function_without_constructor_map) \
405+
V(Map, catch_context_map) \
406+
V(Map, eval_context_map) \
407+
V(Map, fast_aliased_arguments_map) \
408+
V(Map, function_context_map) \
409+
V(Map, initial_array_iterator_map) \
410+
V(Map, initial_string_iterator_map) \
411+
V(Map, iterator_result_map) \
412+
V(Map, js_array_holey_double_elements_map) \
413+
V(Map, js_array_holey_elements_map) \
414+
V(Map, js_array_holey_smi_elements_map) \
415+
V(Map, js_array_packed_double_elements_map) \
416+
V(Map, js_array_packed_elements_map) \
417+
V(Map, js_array_packed_smi_elements_map) \
418+
V(Map, sloppy_arguments_map) \
419+
V(Map, slow_object_with_null_prototype_map) \
420+
V(Map, strict_arguments_map) \
421+
V(Map, with_context_map) \
422+
V(ScriptContextTable, script_context_table)
425423

426424
// Those are set by Bootstrapper::ExportFromRuntime, which may not yet have
427425
// happened when Turbofan is invoked via --always-opt.

src/compiler/js-call-reducer.cc

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -781,8 +781,9 @@ class IteratingArrayBuiltinReducerAssembler : public JSCallReducerAssembler {
781781

782782
class PromiseBuiltinReducerAssembler : public JSCallReducerAssembler {
783783
public:
784-
PromiseBuiltinReducerAssembler(JSGraph* jsgraph, Zone* zone, Node* node)
785-
: JSCallReducerAssembler(jsgraph, zone, node) {
784+
PromiseBuiltinReducerAssembler(JSGraph* jsgraph, Zone* zone, Node* node,
785+
JSHeapBroker* broker)
786+
: JSCallReducerAssembler(jsgraph, zone, node), broker_(broker) {
786787
DCHECK_EQ(IrOpcode::kJSConstruct, node->opcode());
787788
}
788789

@@ -864,6 +865,8 @@ class PromiseBuiltinReducerAssembler : public JSCallReducerAssembler {
864865
effect(), control()));
865866
});
866867
}
868+
869+
JSHeapBroker* const broker_;
867870
};
868871

869872
class FastApiCallReducerAssembler : public JSCallReducerAssembler {
@@ -2101,12 +2104,19 @@ TNode<Object> PromiseBuiltinReducerAssembler::ReducePromiseConstructor(
21012104
TrueConstant());
21022105

21032106
// Allocate closures for the resolve and reject cases.
2104-
TNode<JSFunction> resolve = CreateClosureFromBuiltinSharedFunctionInfo(
2105-
native_context.promise_capability_default_resolve_shared_fun(),
2106-
promise_context);
2107-
TNode<JSFunction> reject = CreateClosureFromBuiltinSharedFunctionInfo(
2108-
native_context.promise_capability_default_reject_shared_fun(),
2109-
promise_context);
2107+
SharedFunctionInfoRef resolve_sfi(
2108+
broker_, broker_->isolate()
2109+
->factory()
2110+
->promise_capability_default_resolve_shared_fun());
2111+
TNode<JSFunction> resolve =
2112+
CreateClosureFromBuiltinSharedFunctionInfo(resolve_sfi, promise_context);
2113+
2114+
SharedFunctionInfoRef reject_sfi(
2115+
broker_, broker_->isolate()
2116+
->factory()
2117+
->promise_capability_default_reject_shared_fun());
2118+
TNode<JSFunction> reject =
2119+
CreateClosureFromBuiltinSharedFunctionInfo(reject_sfi, promise_context);
21102120

21112121
FrameState lazy_with_catch_frame_state =
21122122
PromiseConstructorLazyWithCatchFrameState(
@@ -6210,7 +6220,7 @@ Reduction JSCallReducer::ReduceStringPrototypeConcat(Node* node) {
62106220

62116221
Reduction JSCallReducer::ReducePromiseConstructor(Node* node) {
62126222
DisallowHeapAccessIf no_heap_access(should_disallow_heap_access());
6213-
PromiseBuiltinReducerAssembler a(jsgraph(), temp_zone(), node);
6223+
PromiseBuiltinReducerAssembler a(jsgraph(), temp_zone(), node, broker());
62146224

62156225
// We only inline when we have the executor.
62166226
if (a.ConstructArity() < 1) return NoChange();

src/compiler/serializer-for-background-compilation.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2442,6 +2442,17 @@ void SerializerForBackgroundCompilation::ProcessBuiltinCall(
24422442
kMissingArgumentsAreUnknown, result_hints);
24432443
}
24442444
}
2445+
SharedFunctionInfoRef(
2446+
broker(), broker()
2447+
->isolate()
2448+
->factory()
2449+
->promise_capability_default_reject_shared_fun());
2450+
SharedFunctionInfoRef(
2451+
broker(), broker()
2452+
->isolate()
2453+
->factory()
2454+
->promise_capability_default_resolve_shared_fun());
2455+
24452456
break;
24462457
case Builtins::kFunctionPrototypeCall:
24472458
if (arguments.size() >= 1) {

src/heap/setup-heap-internal.cc

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,6 +1051,29 @@ void Heap::CreateInitialObjects() {
10511051
set_async_iterator_value_unwrap_shared_fun(*info);
10521052
}
10531053

1054+
// Promises:
1055+
{
1056+
Handle<SharedFunctionInfo> info = CreateSharedFunctionInfo(
1057+
isolate_, Builtins::kPromiseCapabilityDefaultResolve, 1,
1058+
FunctionKind::kConciseMethod);
1059+
info->set_native(true);
1060+
info->set_function_map_index(
1061+
Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX);
1062+
set_promise_capability_default_resolve_shared_fun(*info);
1063+
1064+
info = CreateSharedFunctionInfo(isolate_,
1065+
Builtins::kPromiseCapabilityDefaultReject,
1066+
1, FunctionKind::kConciseMethod);
1067+
info->set_native(true);
1068+
info->set_function_map_index(
1069+
Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX);
1070+
set_promise_capability_default_reject_shared_fun(*info);
1071+
1072+
info = CreateSharedFunctionInfo(
1073+
isolate_, Builtins::kPromiseGetCapabilitiesExecutor, 2);
1074+
set_promise_get_capabilities_executor_shared_fun(*info);
1075+
}
1076+
10541077
// Promises / finally:
10551078
{
10561079
Handle<SharedFunctionInfo> info =
@@ -1071,6 +1094,25 @@ void Heap::CreateInitialObjects() {
10711094
0);
10721095
set_promise_thrower_finally_shared_fun(*info);
10731096
}
1097+
1098+
// Promise combinators:
1099+
{
1100+
Handle<SharedFunctionInfo> info = CreateSharedFunctionInfo(
1101+
isolate_, Builtins::kPromiseAllResolveElementClosure, 1);
1102+
set_promise_all_resolve_element_shared_fun(*info);
1103+
1104+
info = CreateSharedFunctionInfo(
1105+
isolate_, Builtins::kPromiseAllSettledResolveElementClosure, 1);
1106+
set_promise_all_settled_resolve_element_shared_fun(*info);
1107+
1108+
info = CreateSharedFunctionInfo(
1109+
isolate_, Builtins::kPromiseAllSettledRejectElementClosure, 1);
1110+
set_promise_all_settled_reject_element_shared_fun(*info);
1111+
1112+
info = CreateSharedFunctionInfo(
1113+
isolate_, Builtins::kPromiseAnyRejectElementClosure, 1);
1114+
set_promise_any_reject_element_shared_fun(*info);
1115+
}
10741116
}
10751117

10761118
void Heap::CreateInternalAccessorInfoObjects() {

0 commit comments

Comments
 (0)