Commit bdda9953 authored by Marja Hölttä's avatar Marja Hölttä Committed by Commit Bot

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: 's avatarIgor Sheludko <ishell@chromium.org>
Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67732}
parent fcd917e0
...@@ -295,14 +295,11 @@ namespace promise { ...@@ -295,14 +295,11 @@ namespace promise {
const map = UnsafeCast<Map>( const map = UnsafeCast<Map>(
nativeContext nativeContext
[NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]); [NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]);
const resolveInfo = UnsafeCast<SharedFunctionInfo>( const resolveInfo = PromiseCapabilityDefaultResolveSharedFunConstant();
nativeContext[NativeContextSlot::
PROMISE_CAPABILITY_DEFAULT_RESOLVE_SHARED_FUN_INDEX]);
const resolve: JSFunction = const resolve: JSFunction =
AllocateFunctionWithMapAndContext(map, resolveInfo, promiseContext); AllocateFunctionWithMapAndContext(map, resolveInfo, promiseContext);
const rejectInfo = UnsafeCast<SharedFunctionInfo>( const rejectInfo = PromiseCapabilityDefaultRejectSharedFunConstant();
nativeContext[NativeContextSlot::
PROMISE_CAPABILITY_DEFAULT_REJECT_SHARED_FUN_INDEX]);
const reject: JSFunction = const reject: JSFunction =
AllocateFunctionWithMapAndContext(map, rejectInfo, promiseContext); AllocateFunctionWithMapAndContext(map, rejectInfo, promiseContext);
return PromiseResolvingFunctions{resolve: resolve, reject: reject}; return PromiseResolvingFunctions{resolve: resolve, reject: reject};
...@@ -329,9 +326,7 @@ namespace promise { ...@@ -329,9 +326,7 @@ namespace promise {
const executorContext = const executorContext =
CreatePromiseCapabilitiesExecutorContext(nativeContext, capability); CreatePromiseCapabilitiesExecutorContext(nativeContext, capability);
const executorInfo = UnsafeCast<SharedFunctionInfo>( const executorInfo = PromiseGetCapabilitiesExecutorSharedFunConstant();
nativeContext[NativeContextSlot::
PROMISE_GET_CAPABILITIES_EXECUTOR_SHARED_FUN]);
const functionMap = UnsafeCast<Map>( const functionMap = UnsafeCast<Map>(
nativeContext nativeContext
[NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]); [NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]);
...@@ -543,4 +538,11 @@ namespace promise { ...@@ -543,4 +538,11 @@ namespace promise {
} }
return promise; return promise;
} }
extern macro PromiseCapabilityDefaultRejectSharedFunConstant():
SharedFunctionInfo;
extern macro PromiseCapabilityDefaultResolveSharedFunConstant():
SharedFunctionInfo;
extern macro PromiseGetCapabilitiesExecutorSharedFunConstant():
SharedFunctionInfo;
} }
...@@ -38,17 +38,15 @@ namespace promise { ...@@ -38,17 +38,15 @@ namespace promise {
macro CreatePromiseAllResolveElementFunction(implicit context: Context)( macro CreatePromiseAllResolveElementFunction(implicit context: Context)(
resolveElementContext: Context, index: Smi, nativeContext: NativeContext, resolveElementContext: Context, index: Smi, nativeContext: NativeContext,
slotIndex: constexpr NativeContextSlot): JSFunction { resolveFunction: SharedFunctionInfo): JSFunction {
assert(index > 0); assert(index > 0);
assert(index < kPropertyArrayHashFieldMax); assert(index < kPropertyArrayHashFieldMax);
const map = UnsafeCast<Map>( const map = UnsafeCast<Map>(
nativeContext nativeContext
[NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]); [NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]);
const resolveInfo =
UnsafeCast<SharedFunctionInfo>(nativeContext[slotIndex]);
const resolve = AllocateFunctionWithMapAndContext( const resolve = AllocateFunctionWithMapAndContext(
map, resolveInfo, resolveElementContext); map, resolveFunction, resolveElementContext);
assert(kPropertyArrayNoHashSentinel == 0); assert(kPropertyArrayNoHashSentinel == 0);
resolve.properties_or_hash = index; resolve.properties_or_hash = index;
...@@ -83,7 +81,7 @@ namespace promise { ...@@ -83,7 +81,7 @@ namespace promise {
index: Smi, _capability: PromiseCapability): Callable { index: Smi, _capability: PromiseCapability): Callable {
return CreatePromiseAllResolveElementFunction( return CreatePromiseAllResolveElementFunction(
resolveElementContext, index, nativeContext, resolveElementContext, index, nativeContext,
NativeContextSlot::PROMISE_ALL_RESOLVE_ELEMENT_SHARED_FUN); PromiseAllResolveElementSharedFunConstant());
} }
} }
...@@ -101,7 +99,7 @@ namespace promise { ...@@ -101,7 +99,7 @@ namespace promise {
index: Smi, _capability: PromiseCapability): Callable { index: Smi, _capability: PromiseCapability): Callable {
return CreatePromiseAllResolveElementFunction( return CreatePromiseAllResolveElementFunction(
resolveElementContext, index, nativeContext, resolveElementContext, index, nativeContext,
NativeContextSlot::PROMISE_ALL_SETTLED_RESOLVE_ELEMENT_SHARED_FUN); PromiseAllSettledResolveElementSharedFunConstant());
} }
} }
...@@ -111,7 +109,7 @@ namespace promise { ...@@ -111,7 +109,7 @@ namespace promise {
index: Smi, _capability: PromiseCapability): Callable { index: Smi, _capability: PromiseCapability): Callable {
return CreatePromiseAllResolveElementFunction( return CreatePromiseAllResolveElementFunction(
resolveElementContext, index, nativeContext, resolveElementContext, index, nativeContext,
NativeContextSlot::PROMISE_ALL_SETTLED_REJECT_ELEMENT_SHARED_FUN); PromiseAllSettledRejectElementSharedFunConstant());
} }
} }
...@@ -373,4 +371,11 @@ namespace promise { ...@@ -373,4 +371,11 @@ namespace promise {
receiver, iterable, PromiseAllSettledResolveElementFunctor{}, receiver, iterable, PromiseAllSettledResolveElementFunctor{},
PromiseAllSettledRejectElementFunctor{}); PromiseAllSettledRejectElementFunctor{});
} }
extern macro PromiseAllResolveElementSharedFunConstant(): SharedFunctionInfo;
extern macro PromiseAllSettledRejectElementSharedFunConstant():
SharedFunctionInfo;
extern macro PromiseAllSettledResolveElementSharedFunConstant():
SharedFunctionInfo;
} }
...@@ -49,9 +49,7 @@ namespace promise { ...@@ -49,9 +49,7 @@ namespace promise {
const map = UnsafeCast<Map>( const map = UnsafeCast<Map>(
nativeContext nativeContext
[NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]); [NativeContextSlot::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX]);
const rejectInfo = UnsafeCast<SharedFunctionInfo>( const rejectInfo = PromiseAnyRejectElementSharedFunConstant();
nativeContext
[NativeContextSlot::PROMISE_ANY_REJECT_ELEMENT_SHARED_FUN]);
const reject = AllocateFunctionWithMapAndContext( const reject = AllocateFunctionWithMapAndContext(
map, rejectInfo, rejectElementContext); map, rejectInfo, rejectElementContext);
assert(kPropertyArrayNoHashSentinel == 0); assert(kPropertyArrayNoHashSentinel == 0);
...@@ -372,4 +370,6 @@ namespace promise { ...@@ -372,4 +370,6 @@ namespace promise {
obj.errors = errorsArray; obj.errors = errorsArray;
return obj; return obj;
} }
extern macro PromiseAnyRejectElementSharedFunConstant(): SharedFunctionInfo;
} }
...@@ -65,8 +65,27 @@ enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol }; ...@@ -65,8 +65,27 @@ enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol };
V(MapIteratorProtector, map_iterator_protector, MapIteratorProtector) \ V(MapIteratorProtector, map_iterator_protector, MapIteratorProtector) \
V(NoElementsProtector, no_elements_protector, NoElementsProtector) \ V(NoElementsProtector, no_elements_protector, NoElementsProtector) \
V(NumberStringCache, number_string_cache, NumberStringCache) \ V(NumberStringCache, number_string_cache, NumberStringCache) \
V(PromiseAllResolveElementSharedFun, promise_all_resolve_element_shared_fun, \
PromiseAllResolveElementSharedFun) \
V(PromiseAllSettledRejectElementSharedFun, \
promise_all_settled_reject_element_shared_fun, \
PromiseAllSettledRejectElementSharedFun) \
V(PromiseAllSettledResolveElementSharedFun, \
promise_all_settled_resolve_element_shared_fun, \
PromiseAllSettledResolveElementSharedFun) \
V(PromiseAnyRejectElementSharedFun, promise_any_reject_element_shared_fun, \
PromiseAnyRejectElementSharedFun) \
V(PromiseCapabilityDefaultRejectSharedFun, \
promise_capability_default_reject_shared_fun, \
PromiseCapabilityDefaultRejectSharedFun) \
V(PromiseCapabilityDefaultResolveSharedFun, \
promise_capability_default_resolve_shared_fun, \
PromiseCapabilityDefaultResolveSharedFun) \
V(PromiseCatchFinallySharedFun, promise_catch_finally_shared_fun, \ V(PromiseCatchFinallySharedFun, promise_catch_finally_shared_fun, \
PromiseCatchFinallySharedFun) \ PromiseCatchFinallySharedFun) \
V(PromiseGetCapabilitiesExecutorSharedFun, \
promise_get_capabilities_executor_shared_fun, \
PromiseGetCapabilitiesExecutorSharedFun) \
V(PromiseResolveProtector, promise_resolve_protector, \ V(PromiseResolveProtector, promise_resolve_protector, \
PromiseResolveProtector) \ PromiseResolveProtector) \
V(PromiseSpeciesProtector, promise_species_protector, \ V(PromiseSpeciesProtector, promise_species_protector, \
......
...@@ -385,43 +385,41 @@ class ContextRef : public HeapObjectRef { ...@@ -385,43 +385,41 @@ class ContextRef : public HeapObjectRef {
base::Optional<ScopeInfoRef> scope_info() const; base::Optional<ScopeInfoRef> scope_info() const;
}; };
#define BROKER_COMPULSORY_NATIVE_CONTEXT_FIELDS(V) \ #define BROKER_COMPULSORY_NATIVE_CONTEXT_FIELDS(V) \
V(JSFunction, array_function) \ V(JSFunction, array_function) \
V(JSFunction, boolean_function) \ V(JSFunction, boolean_function) \
V(JSFunction, bigint_function) \ V(JSFunction, bigint_function) \
V(JSFunction, number_function) \ V(JSFunction, number_function) \
V(JSFunction, object_function) \ V(JSFunction, object_function) \
V(JSFunction, promise_function) \ V(JSFunction, promise_function) \
V(JSFunction, promise_then) \ V(JSFunction, promise_then) \
V(JSFunction, regexp_function) \ V(JSFunction, regexp_function) \
V(JSFunction, string_function) \ V(JSFunction, string_function) \
V(JSFunction, symbol_function) \ V(JSFunction, symbol_function) \
V(JSGlobalObject, global_object) \ V(JSGlobalObject, global_object) \
V(JSGlobalProxy, global_proxy_object) \ V(JSGlobalProxy, global_proxy_object) \
V(JSObject, promise_prototype) \ V(JSObject, promise_prototype) \
V(Map, block_context_map) \ V(Map, block_context_map) \
V(Map, bound_function_with_constructor_map) \ V(Map, bound_function_with_constructor_map) \
V(Map, bound_function_without_constructor_map) \ V(Map, bound_function_without_constructor_map) \
V(Map, catch_context_map) \ V(Map, catch_context_map) \
V(Map, eval_context_map) \ V(Map, eval_context_map) \
V(Map, fast_aliased_arguments_map) \ V(Map, fast_aliased_arguments_map) \
V(Map, function_context_map) \ V(Map, function_context_map) \
V(Map, initial_array_iterator_map) \ V(Map, initial_array_iterator_map) \
V(Map, initial_string_iterator_map) \ V(Map, initial_string_iterator_map) \
V(Map, iterator_result_map) \ V(Map, iterator_result_map) \
V(Map, js_array_holey_double_elements_map) \ V(Map, js_array_holey_double_elements_map) \
V(Map, js_array_holey_elements_map) \ V(Map, js_array_holey_elements_map) \
V(Map, js_array_holey_smi_elements_map) \ V(Map, js_array_holey_smi_elements_map) \
V(Map, js_array_packed_double_elements_map) \ V(Map, js_array_packed_double_elements_map) \
V(Map, js_array_packed_elements_map) \ V(Map, js_array_packed_elements_map) \
V(Map, js_array_packed_smi_elements_map) \ V(Map, js_array_packed_smi_elements_map) \
V(Map, sloppy_arguments_map) \ V(Map, sloppy_arguments_map) \
V(Map, slow_object_with_null_prototype_map) \ V(Map, slow_object_with_null_prototype_map) \
V(Map, strict_arguments_map) \ V(Map, strict_arguments_map) \
V(Map, with_context_map) \ V(Map, with_context_map) \
V(ScriptContextTable, script_context_table) \ V(ScriptContextTable, script_context_table)
V(SharedFunctionInfo, promise_capability_default_reject_shared_fun) \
V(SharedFunctionInfo, promise_capability_default_resolve_shared_fun)
// Those are set by Bootstrapper::ExportFromRuntime, which may not yet have // Those are set by Bootstrapper::ExportFromRuntime, which may not yet have
// happened when Turbofan is invoked via --always-opt. // happened when Turbofan is invoked via --always-opt.
......
...@@ -781,8 +781,9 @@ class IteratingArrayBuiltinReducerAssembler : public JSCallReducerAssembler { ...@@ -781,8 +781,9 @@ class IteratingArrayBuiltinReducerAssembler : public JSCallReducerAssembler {
class PromiseBuiltinReducerAssembler : public JSCallReducerAssembler { class PromiseBuiltinReducerAssembler : public JSCallReducerAssembler {
public: public:
PromiseBuiltinReducerAssembler(JSGraph* jsgraph, Zone* zone, Node* node) PromiseBuiltinReducerAssembler(JSGraph* jsgraph, Zone* zone, Node* node,
: JSCallReducerAssembler(jsgraph, zone, node) { JSHeapBroker* broker)
: JSCallReducerAssembler(jsgraph, zone, node), broker_(broker) {
DCHECK_EQ(IrOpcode::kJSConstruct, node->opcode()); DCHECK_EQ(IrOpcode::kJSConstruct, node->opcode());
} }
...@@ -864,6 +865,8 @@ class PromiseBuiltinReducerAssembler : public JSCallReducerAssembler { ...@@ -864,6 +865,8 @@ class PromiseBuiltinReducerAssembler : public JSCallReducerAssembler {
effect(), control())); effect(), control()));
}); });
} }
JSHeapBroker* const broker_;
}; };
class FastApiCallReducerAssembler : public JSCallReducerAssembler { class FastApiCallReducerAssembler : public JSCallReducerAssembler {
...@@ -2101,12 +2104,19 @@ TNode<Object> PromiseBuiltinReducerAssembler::ReducePromiseConstructor( ...@@ -2101,12 +2104,19 @@ TNode<Object> PromiseBuiltinReducerAssembler::ReducePromiseConstructor(
TrueConstant()); TrueConstant());
// Allocate closures for the resolve and reject cases. // Allocate closures for the resolve and reject cases.
TNode<JSFunction> resolve = CreateClosureFromBuiltinSharedFunctionInfo( SharedFunctionInfoRef resolve_sfi(
native_context.promise_capability_default_resolve_shared_fun(), broker_, broker_->isolate()
promise_context); ->factory()
TNode<JSFunction> reject = CreateClosureFromBuiltinSharedFunctionInfo( ->promise_capability_default_resolve_shared_fun());
native_context.promise_capability_default_reject_shared_fun(), TNode<JSFunction> resolve =
promise_context); CreateClosureFromBuiltinSharedFunctionInfo(resolve_sfi, promise_context);
SharedFunctionInfoRef reject_sfi(
broker_, broker_->isolate()
->factory()
->promise_capability_default_reject_shared_fun());
TNode<JSFunction> reject =
CreateClosureFromBuiltinSharedFunctionInfo(reject_sfi, promise_context);
FrameState lazy_with_catch_frame_state = FrameState lazy_with_catch_frame_state =
PromiseConstructorLazyWithCatchFrameState( PromiseConstructorLazyWithCatchFrameState(
...@@ -6210,7 +6220,7 @@ Reduction JSCallReducer::ReduceStringPrototypeConcat(Node* node) { ...@@ -6210,7 +6220,7 @@ Reduction JSCallReducer::ReduceStringPrototypeConcat(Node* node) {
Reduction JSCallReducer::ReducePromiseConstructor(Node* node) { Reduction JSCallReducer::ReducePromiseConstructor(Node* node) {
DisallowHeapAccessIf no_heap_access(should_disallow_heap_access()); DisallowHeapAccessIf no_heap_access(should_disallow_heap_access());
PromiseBuiltinReducerAssembler a(jsgraph(), temp_zone(), node); PromiseBuiltinReducerAssembler a(jsgraph(), temp_zone(), node, broker());
// We only inline when we have the executor. // We only inline when we have the executor.
if (a.ConstructArity() < 1) return NoChange(); if (a.ConstructArity() < 1) return NoChange();
......
...@@ -2442,6 +2442,17 @@ void SerializerForBackgroundCompilation::ProcessBuiltinCall( ...@@ -2442,6 +2442,17 @@ void SerializerForBackgroundCompilation::ProcessBuiltinCall(
kMissingArgumentsAreUnknown, result_hints); kMissingArgumentsAreUnknown, result_hints);
} }
} }
SharedFunctionInfoRef(
broker(), broker()
->isolate()
->factory()
->promise_capability_default_reject_shared_fun());
SharedFunctionInfoRef(
broker(), broker()
->isolate()
->factory()
->promise_capability_default_resolve_shared_fun());
break; break;
case Builtins::kFunctionPrototypeCall: case Builtins::kFunctionPrototypeCall:
if (arguments.size() >= 1) { if (arguments.size() >= 1) {
......
...@@ -1051,6 +1051,29 @@ void Heap::CreateInitialObjects() { ...@@ -1051,6 +1051,29 @@ void Heap::CreateInitialObjects() {
set_async_iterator_value_unwrap_shared_fun(*info); set_async_iterator_value_unwrap_shared_fun(*info);
} }
// Promises:
{
Handle<SharedFunctionInfo> info = CreateSharedFunctionInfo(
isolate_, Builtins::kPromiseCapabilityDefaultResolve, 1,
FunctionKind::kConciseMethod);
info->set_native(true);
info->set_function_map_index(
Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX);
set_promise_capability_default_resolve_shared_fun(*info);
info = CreateSharedFunctionInfo(isolate_,
Builtins::kPromiseCapabilityDefaultReject,
1, FunctionKind::kConciseMethod);
info->set_native(true);
info->set_function_map_index(
Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX);
set_promise_capability_default_reject_shared_fun(*info);
info = CreateSharedFunctionInfo(
isolate_, Builtins::kPromiseGetCapabilitiesExecutor, 2);
set_promise_get_capabilities_executor_shared_fun(*info);
}
// Promises / finally: // Promises / finally:
{ {
Handle<SharedFunctionInfo> info = Handle<SharedFunctionInfo> info =
...@@ -1071,6 +1094,25 @@ void Heap::CreateInitialObjects() { ...@@ -1071,6 +1094,25 @@ void Heap::CreateInitialObjects() {
0); 0);
set_promise_thrower_finally_shared_fun(*info); set_promise_thrower_finally_shared_fun(*info);
} }
// Promise combinators:
{
Handle<SharedFunctionInfo> info = CreateSharedFunctionInfo(
isolate_, Builtins::kPromiseAllResolveElementClosure, 1);
set_promise_all_resolve_element_shared_fun(*info);
info = CreateSharedFunctionInfo(
isolate_, Builtins::kPromiseAllSettledResolveElementClosure, 1);
set_promise_all_settled_resolve_element_shared_fun(*info);
info = CreateSharedFunctionInfo(
isolate_, Builtins::kPromiseAllSettledRejectElementClosure, 1);
set_promise_all_settled_reject_element_shared_fun(*info);
info = CreateSharedFunctionInfo(
isolate_, Builtins::kPromiseAnyRejectElementClosure, 1);
set_promise_any_reject_element_shared_fun(*info);
}
} }
void Heap::CreateInternalAccessorInfoObjects() { void Heap::CreateInternalAccessorInfoObjects() {
......
...@@ -368,8 +368,7 @@ void Bootstrapper::DetachGlobal(Handle<Context> env) { ...@@ -368,8 +368,7 @@ void Bootstrapper::DetachGlobal(Handle<Context> env) {
namespace { namespace {
// FIXME(marja): Remove SimpleCreateSharedFunctionInfo and // FIXME(marja): Remove SimpleCreateSharedFunctionInfo when migration to
// SimpleCreateBuiltinSharedFunctionInfo when migration to
// setup-heap-internal.cc is complete (see v8:10482). // setup-heap-internal.cc is complete (see v8:10482).
V8_NOINLINE Handle<SharedFunctionInfo> SimpleCreateSharedFunctionInfo( V8_NOINLINE Handle<SharedFunctionInfo> SimpleCreateSharedFunctionInfo(
Isolate* isolate, Builtins::Name builtin_id, Handle<String> name, int len, Isolate* isolate, Builtins::Name builtin_id, Handle<String> name, int len,
...@@ -382,16 +381,6 @@ V8_NOINLINE Handle<SharedFunctionInfo> SimpleCreateSharedFunctionInfo( ...@@ -382,16 +381,6 @@ V8_NOINLINE Handle<SharedFunctionInfo> SimpleCreateSharedFunctionInfo(
return shared; return shared;
} }
V8_NOINLINE Handle<SharedFunctionInfo> SimpleCreateBuiltinSharedFunctionInfo(
Isolate* isolate, Builtins::Name builtin_id, Handle<String> name, int len) {
Handle<SharedFunctionInfo> shared =
isolate->factory()->NewSharedFunctionInfoForBuiltin(name, builtin_id,
kNormalFunction);
shared->set_internal_formal_parameter_count(len);
shared->set_length(len);
return shared;
}
V8_NOINLINE Handle<JSFunction> CreateFunction( V8_NOINLINE Handle<JSFunction> CreateFunction(
Isolate* isolate, Handle<String> name, InstanceType type, int instance_size, Isolate* isolate, Handle<String> name, InstanceType type, int instance_size,
int inobject_properties, Handle<HeapObject> prototype, int inobject_properties, Handle<HeapObject> prototype,
...@@ -2298,13 +2287,6 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, ...@@ -2298,13 +2287,6 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
} }
{
Handle<SharedFunctionInfo> info = SimpleCreateBuiltinSharedFunctionInfo(
isolate_, Builtins::kPromiseGetCapabilitiesExecutor,
factory->empty_string(), 2);
native_context()->set_promise_get_capabilities_executor_shared_fun(*info);
}
{ // -- P r o m i s e { // -- P r o m i s e
Handle<JSFunction> promise_fun = InstallFunction( Handle<JSFunction> promise_fun = InstallFunction(
isolate_, global, "Promise", JS_PROMISE_TYPE, isolate_, global, "Promise", JS_PROMISE_TYPE,
...@@ -2356,32 +2338,6 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, ...@@ -2356,32 +2338,6 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
Handle<Map> prototype_map(prototype->map(), isolate()); Handle<Map> prototype_map(prototype->map(), isolate());
Map::SetShouldBeFastPrototypeMap(prototype_map, true, isolate_); Map::SetShouldBeFastPrototypeMap(prototype_map, true, isolate_);
{
Handle<SharedFunctionInfo> info = SimpleCreateSharedFunctionInfo(
isolate_, Builtins::kPromiseCapabilityDefaultResolve,
factory->empty_string(), 1, FunctionKind::kConciseMethod);
info->set_native(true);
info->set_function_map_index(
Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX);
native_context()->set_promise_capability_default_resolve_shared_fun(
*info);
info = SimpleCreateSharedFunctionInfo(
isolate_, Builtins::kPromiseCapabilityDefaultReject,
factory->empty_string(), 1, FunctionKind::kConciseMethod);
info->set_native(true);
info->set_function_map_index(
Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX);
native_context()->set_promise_capability_default_reject_shared_fun(*info);
}
{
Handle<SharedFunctionInfo> info = SimpleCreateSharedFunctionInfo(
isolate_, Builtins::kPromiseAllResolveElementClosure,
factory->empty_string(), 1);
native_context()->set_promise_all_resolve_element_shared_fun(*info);
}
DCHECK(promise_fun->HasFastProperties()); DCHECK(promise_fun->HasFastProperties());
} }
...@@ -4319,13 +4275,6 @@ void Genesis::InitializeGlobal_harmony_promise_any() { ...@@ -4319,13 +4275,6 @@ void Genesis::InitializeGlobal_harmony_promise_any() {
JSObject::DefineAccessor(prototype, factory->errors_string(), getter, JSObject::DefineAccessor(prototype, factory->errors_string(), getter,
factory->undefined_value(), DONT_ENUM); factory->undefined_value(), DONT_ENUM);
{
Handle<SharedFunctionInfo> info = SimpleCreateSharedFunctionInfo(
isolate_, Builtins::kPromiseAnyRejectElementClosure,
factory->empty_string(), 1);
native_context()->set_promise_any_reject_element_shared_fun(*info);
}
Handle<JSFunction> promise_fun( Handle<JSFunction> promise_fun(
JSFunction::cast( JSFunction::cast(
isolate()->native_context()->get(Context::PROMISE_FUNCTION_INDEX)), isolate()->native_context()->get(Context::PROMISE_FUNCTION_INDEX)),
...@@ -4340,20 +4289,6 @@ void Genesis::InitializeGlobal_harmony_promise_all_settled() { ...@@ -4340,20 +4289,6 @@ void Genesis::InitializeGlobal_harmony_promise_all_settled() {
if (!FLAG_harmony_promise_all_settled) return; if (!FLAG_harmony_promise_all_settled) return;
SimpleInstallFunction(isolate(), isolate()->promise_function(), "allSettled", SimpleInstallFunction(isolate(), isolate()->promise_function(), "allSettled",
Builtins::kPromiseAllSettled, 1, true); Builtins::kPromiseAllSettled, 1, true);
Factory* factory = isolate()->factory();
{
Handle<SharedFunctionInfo> info = SimpleCreateSharedFunctionInfo(
isolate_, Builtins::kPromiseAllSettledResolveElementClosure,
factory->empty_string(), 1);
native_context()->set_promise_all_settled_resolve_element_shared_fun(*info);
}
{
Handle<SharedFunctionInfo> info = SimpleCreateSharedFunctionInfo(
isolate_, Builtins::kPromiseAllSettledRejectElementClosure,
factory->empty_string(), 1);
native_context()->set_promise_all_settled_reject_element_shared_fun(*info);
}
} }
void Genesis::InitializeGlobal_harmony_regexp_match_indices() { void Genesis::InitializeGlobal_harmony_regexp_match_indices() {
......
...@@ -201,20 +201,6 @@ enum ContextLookupFlags { ...@@ -201,20 +201,6 @@ enum ContextLookupFlags {
V(PROXY_MAP_INDEX, Map, proxy_map) \ V(PROXY_MAP_INDEX, Map, proxy_map) \
V(PROXY_REVOCABLE_RESULT_MAP_INDEX, Map, proxy_revocable_result_map) \ V(PROXY_REVOCABLE_RESULT_MAP_INDEX, Map, proxy_revocable_result_map) \
V(PROXY_REVOKE_SHARED_FUN, SharedFunctionInfo, proxy_revoke_shared_fun) \ V(PROXY_REVOKE_SHARED_FUN, SharedFunctionInfo, proxy_revoke_shared_fun) \
V(PROMISE_GET_CAPABILITIES_EXECUTOR_SHARED_FUN, SharedFunctionInfo, \
promise_get_capabilities_executor_shared_fun) \
V(PROMISE_CAPABILITY_DEFAULT_REJECT_SHARED_FUN_INDEX, SharedFunctionInfo, \
promise_capability_default_reject_shared_fun) \
V(PROMISE_CAPABILITY_DEFAULT_RESOLVE_SHARED_FUN_INDEX, SharedFunctionInfo, \
promise_capability_default_resolve_shared_fun) \
V(PROMISE_ALL_RESOLVE_ELEMENT_SHARED_FUN, SharedFunctionInfo, \
promise_all_resolve_element_shared_fun) \
V(PROMISE_ALL_SETTLED_RESOLVE_ELEMENT_SHARED_FUN, SharedFunctionInfo, \
promise_all_settled_resolve_element_shared_fun) \
V(PROMISE_ALL_SETTLED_REJECT_ELEMENT_SHARED_FUN, SharedFunctionInfo, \
promise_all_settled_reject_element_shared_fun) \
V(PROMISE_ANY_REJECT_ELEMENT_SHARED_FUN, SharedFunctionInfo, \
promise_any_reject_element_shared_fun) \
V(PROMISE_PROTOTYPE_INDEX, JSObject, promise_prototype) \ V(PROMISE_PROTOTYPE_INDEX, JSObject, promise_prototype) \
V(REGEXP_EXEC_FUNCTION_INDEX, JSFunction, regexp_exec_function) \ V(REGEXP_EXEC_FUNCTION_INDEX, JSFunction, regexp_exec_function) \
V(REGEXP_FUNCTION_INDEX, JSFunction, regexp_function) \ V(REGEXP_FUNCTION_INDEX, JSFunction, regexp_function) \
......
...@@ -48,13 +48,6 @@ extern enum NativeContextSlot extends intptr constexpr 'Context::Field' { ...@@ -48,13 +48,6 @@ extern enum NativeContextSlot extends intptr constexpr 'Context::Field' {
PROMISE_FUNCTION_INDEX, PROMISE_FUNCTION_INDEX,
PROMISE_THEN_INDEX, PROMISE_THEN_INDEX,
PROMISE_ALL_RESOLVE_ELEMENT_SHARED_FUN,
PROMISE_ALL_SETTLED_REJECT_ELEMENT_SHARED_FUN,
PROMISE_ALL_SETTLED_RESOLVE_ELEMENT_SHARED_FUN,
PROMISE_ANY_REJECT_ELEMENT_SHARED_FUN,
PROMISE_CAPABILITY_DEFAULT_RESOLVE_SHARED_FUN_INDEX,
PROMISE_CAPABILITY_DEFAULT_REJECT_SHARED_FUN_INDEX,
PROMISE_GET_CAPABILITIES_EXECUTOR_SHARED_FUN,
PROMISE_PROTOTYPE_INDEX, PROMISE_PROTOTYPE_INDEX,
STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX,
......
...@@ -252,8 +252,22 @@ class Symbol; ...@@ -252,8 +252,22 @@ class Symbol;
AsyncGeneratorReturnClosedResolveSharedFun) \ AsyncGeneratorReturnClosedResolveSharedFun) \
V(SharedFunctionInfo, async_iterator_value_unwrap_shared_fun, \ V(SharedFunctionInfo, async_iterator_value_unwrap_shared_fun, \
AsyncIteratorValueUnwrapSharedFun) \ AsyncIteratorValueUnwrapSharedFun) \
V(SharedFunctionInfo, promise_all_resolve_element_shared_fun, \
PromiseAllResolveElementSharedFun) \
V(SharedFunctionInfo, promise_all_settled_resolve_element_shared_fun, \
PromiseAllSettledResolveElementSharedFun) \
V(SharedFunctionInfo, promise_all_settled_reject_element_shared_fun, \
PromiseAllSettledRejectElementSharedFun) \
V(SharedFunctionInfo, promise_any_reject_element_shared_fun, \
PromiseAnyRejectElementSharedFun) \
V(SharedFunctionInfo, promise_capability_default_reject_shared_fun, \
PromiseCapabilityDefaultRejectSharedFun) \
V(SharedFunctionInfo, promise_capability_default_resolve_shared_fun, \
PromiseCapabilityDefaultResolveSharedFun) \
V(SharedFunctionInfo, promise_catch_finally_shared_fun, \ V(SharedFunctionInfo, promise_catch_finally_shared_fun, \
PromiseCatchFinallySharedFun) \ PromiseCatchFinallySharedFun) \
V(SharedFunctionInfo, promise_get_capabilities_executor_shared_fun, \
PromiseGetCapabilitiesExecutorSharedFun) \
V(SharedFunctionInfo, promise_then_finally_shared_fun, \ V(SharedFunctionInfo, promise_then_finally_shared_fun, \
PromiseThenFinallySharedFun) \ PromiseThenFinallySharedFun) \
V(SharedFunctionInfo, promise_thrower_finally_shared_fun, \ V(SharedFunctionInfo, promise_thrower_finally_shared_fun, \
......
...@@ -2686,9 +2686,8 @@ TEST(AllocateFunctionWithMapAndContext) { ...@@ -2686,9 +2686,8 @@ TEST(AllocateFunctionWithMapAndContext) {
m.NewJSPromise(context, m.UndefinedConstant()); m.NewJSPromise(context, m.UndefinedConstant());
TNode<Context> promise_context = m.CreatePromiseResolvingFunctionsContext( TNode<Context> promise_context = m.CreatePromiseResolvingFunctionsContext(
context, promise, m.BooleanConstant(false), native_context); context, promise, m.BooleanConstant(false), native_context);
TNode<Object> resolve_info = m.LoadContextElement( TNode<Object> resolve_info =
native_context, m.PromiseCapabilityDefaultResolveSharedFunConstant();
Context::PROMISE_CAPABILITY_DEFAULT_RESOLVE_SHARED_FUN_INDEX);
const TNode<Object> map = m.LoadContextElement( const TNode<Object> map = m.LoadContextElement(
native_context, Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX); native_context, Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX);
const TNode<JSFunction> resolve = m.AllocateFunctionWithMapAndContext( const TNode<JSFunction> resolve = m.AllocateFunctionWithMapAndContext(
...@@ -2705,9 +2704,11 @@ TEST(AllocateFunctionWithMapAndContext) { ...@@ -2705,9 +2704,11 @@ TEST(AllocateFunctionWithMapAndContext) {
CHECK_EQ(ReadOnlyRoots(isolate).empty_fixed_array(), fun->elements()); CHECK_EQ(ReadOnlyRoots(isolate).empty_fixed_array(), fun->elements());
CHECK_EQ(isolate->heap()->many_closures_cell(), fun->raw_feedback_cell()); CHECK_EQ(isolate->heap()->many_closures_cell(), fun->raw_feedback_cell());
CHECK(!fun->has_prototype_slot()); CHECK(!fun->has_prototype_slot());
CHECK_EQ(*isolate->promise_capability_default_resolve_shared_fun(), CHECK_EQ(*isolate->factory()->promise_capability_default_resolve_shared_fun(),
fun->shared()); fun->shared());
CHECK_EQ(isolate->promise_capability_default_resolve_shared_fun()->GetCode(), CHECK_EQ(isolate->factory()
->promise_capability_default_resolve_shared_fun()
->GetCode(),
fun->code()); fun->code());
} }
...@@ -2769,10 +2770,12 @@ TEST(NewPromiseCapability) { ...@@ -2769,10 +2770,12 @@ TEST(NewPromiseCapability) {
CHECK(result->promise().IsJSPromise()); CHECK(result->promise().IsJSPromise());
CHECK(result->resolve().IsJSFunction()); CHECK(result->resolve().IsJSFunction());
CHECK(result->reject().IsJSFunction()); CHECK(result->reject().IsJSFunction());
CHECK_EQ(*isolate->promise_capability_default_reject_shared_fun(), CHECK_EQ(
JSFunction::cast(result->reject()).shared()); *isolate->factory()->promise_capability_default_reject_shared_fun(),
CHECK_EQ(*isolate->promise_capability_default_resolve_shared_fun(), JSFunction::cast(result->reject()).shared());
JSFunction::cast(result->resolve()).shared()); CHECK_EQ(
*isolate->factory()->promise_capability_default_resolve_shared_fun(),
JSFunction::cast(result->resolve()).shared());
Handle<JSFunction> callbacks[] = { Handle<JSFunction> callbacks[] = {
handle(JSFunction::cast(result->resolve()), isolate), handle(JSFunction::cast(result->resolve()), isolate),
......
...@@ -445,10 +445,17 @@ KNOWN_OBJECTS = { ...@@ -445,10 +445,17 @@ KNOWN_OBJECTS = {
("old_space", 0x01691): "AsyncGeneratorReturnClosedRejectSharedFun", ("old_space", 0x01691): "AsyncGeneratorReturnClosedRejectSharedFun",
("old_space", 0x016b9): "AsyncGeneratorReturnClosedResolveSharedFun", ("old_space", 0x016b9): "AsyncGeneratorReturnClosedResolveSharedFun",
("old_space", 0x016e1): "AsyncIteratorValueUnwrapSharedFun", ("old_space", 0x016e1): "AsyncIteratorValueUnwrapSharedFun",
("old_space", 0x01709): "PromiseCatchFinallySharedFun", ("old_space", 0x01709): "PromiseAllResolveElementSharedFun",
("old_space", 0x01731): "PromiseThenFinallySharedFun", ("old_space", 0x01731): "PromiseAllSettledResolveElementSharedFun",
("old_space", 0x01759): "PromiseThrowerFinallySharedFun", ("old_space", 0x01759): "PromiseAllSettledRejectElementSharedFun",
("old_space", 0x01781): "PromiseValueThunkFinallySharedFun", ("old_space", 0x01781): "PromiseAnyRejectElementSharedFun",
("old_space", 0x017a9): "PromiseCapabilityDefaultRejectSharedFun",
("old_space", 0x017d1): "PromiseCapabilityDefaultResolveSharedFun",
("old_space", 0x017f9): "PromiseCatchFinallySharedFun",
("old_space", 0x01821): "PromiseGetCapabilitiesExecutorSharedFun",
("old_space", 0x01849): "PromiseThenFinallySharedFun",
("old_space", 0x01871): "PromiseThrowerFinallySharedFun",
("old_space", 0x01899): "PromiseValueThunkFinallySharedFun",
} }
# Lower 32 bits of first page addresses for various heap spaces. # Lower 32 bits of first page addresses for various heap spaces.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment