@@ -3871,6 +3871,61 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
38713871 native_context ()->set_bound_function_with_constructor_map (*map);
38723872 }
38733873
3874+ { // -- F i n a l i z a t i o n R e g i s t r y
3875+ Handle<JSFunction> finalization_registry_fun = InstallFunction (
3876+ isolate_, global, factory->FinalizationRegistry_string (),
3877+ JS_FINALIZATION_REGISTRY_TYPE, JSFinalizationRegistry::kHeaderSize , 0 ,
3878+ factory->the_hole_value (), Builtins::kFinalizationRegistryConstructor );
3879+ InstallWithIntrinsicDefaultProto (
3880+ isolate_, finalization_registry_fun,
3881+ Context::JS_FINALIZATION_REGISTRY_FUNCTION_INDEX);
3882+
3883+ finalization_registry_fun->shared ().DontAdaptArguments ();
3884+ finalization_registry_fun->shared ().set_length (1 );
3885+
3886+ Handle<JSObject> finalization_registry_prototype (
3887+ JSObject::cast (finalization_registry_fun->instance_prototype ()),
3888+ isolate ());
3889+
3890+ InstallToStringTag (isolate_, finalization_registry_prototype,
3891+ factory->FinalizationRegistry_string ());
3892+
3893+ SimpleInstallFunction (isolate_, finalization_registry_prototype, " register" ,
3894+ Builtins::kFinalizationRegistryRegister , 2 , false );
3895+
3896+ SimpleInstallFunction (isolate_, finalization_registry_prototype,
3897+ " unregister" ,
3898+ Builtins::kFinalizationRegistryUnregister , 1 , false );
3899+
3900+ // The cleanupSome function is created but not exposed, as it is used
3901+ // internally by InvokeFinalizationRegistryCleanupFromTask.
3902+ //
3903+ // It is exposed by FLAG_harmony_weak_refs_with_cleanup_some.
3904+ Handle<JSFunction> cleanup_some_fun = SimpleCreateFunction (
3905+ isolate_, factory->InternalizeUtf8String (" cleanupSome" ),
3906+ Builtins::kFinalizationRegistryPrototypeCleanupSome , 0 , false );
3907+ native_context ()->set_finalization_registry_cleanup_some (*cleanup_some_fun);
3908+ }
3909+
3910+ { // -- W e a k R e f
3911+ Handle<JSFunction> weak_ref_fun = InstallFunction (
3912+ isolate_, global, " WeakRef" , JS_WEAK_REF_TYPE, JSWeakRef::kHeaderSize ,
3913+ 0 , factory->the_hole_value (), Builtins::kWeakRefConstructor );
3914+ InstallWithIntrinsicDefaultProto (isolate_, weak_ref_fun,
3915+ Context::JS_WEAK_REF_FUNCTION_INDEX);
3916+
3917+ weak_ref_fun->shared ().DontAdaptArguments ();
3918+ weak_ref_fun->shared ().set_length (1 );
3919+
3920+ Handle<JSObject> weak_ref_prototype (
3921+ JSObject::cast (weak_ref_fun->instance_prototype ()), isolate ());
3922+
3923+ InstallToStringTag (isolate_, weak_ref_prototype, factory->WeakRef_string ());
3924+
3925+ SimpleInstallFunction (isolate_, weak_ref_prototype, " deref" ,
3926+ Builtins::kWeakRefDeref , 0 , true );
3927+ }
3928+
38743929 { // --- sloppy arguments map
38753930 Handle<String> arguments_string = factory->Arguments_string ();
38763931 Handle<JSFunction> function = CreateFunctionForBuiltinWithPrototype (
@@ -4363,75 +4418,8 @@ void Genesis::InitializeGlobal_harmony_atomics() {
43634418 InstallToStringTag (isolate_, isolate ()->atomics_object (), " Atomics" );
43644419}
43654420
4366- void Genesis::InitializeGlobal_harmony_weak_refs () {
4367- if (!FLAG_harmony_weak_refs) return ;
4368-
4369- Factory* factory = isolate ()->factory ();
4370- Handle<JSGlobalObject> global (native_context ()->global_object (), isolate ());
4371-
4372- {
4373- // Create %FinalizationRegistry%
4374- Handle<JSFunction> finalization_registry_fun = InstallFunction (
4375- isolate (), global, factory->FinalizationRegistry_string (),
4376- JS_FINALIZATION_REGISTRY_TYPE, JSFinalizationRegistry::kHeaderSize , 0 ,
4377- factory->the_hole_value (), Builtins::kFinalizationRegistryConstructor );
4378- InstallWithIntrinsicDefaultProto (
4379- isolate (), finalization_registry_fun,
4380- Context::JS_FINALIZATION_REGISTRY_FUNCTION_INDEX);
4381-
4382- finalization_registry_fun->shared ().DontAdaptArguments ();
4383- finalization_registry_fun->shared ().set_length (1 );
4384-
4385- Handle<JSObject> finalization_registry_prototype (
4386- JSObject::cast (finalization_registry_fun->instance_prototype ()),
4387- isolate ());
4388-
4389- InstallToStringTag (isolate (), finalization_registry_prototype,
4390- factory->FinalizationRegistry_string ());
4391-
4392- SimpleInstallFunction (isolate (), finalization_registry_prototype,
4393- " register" , Builtins::kFinalizationRegistryRegister ,
4394- 2 , false );
4395-
4396- SimpleInstallFunction (isolate (), finalization_registry_prototype,
4397- " unregister" ,
4398- Builtins::kFinalizationRegistryUnregister , 1 , false );
4399-
4400- // The cleanupSome function is created but not exposed, as it is used
4401- // internally by InvokeFinalizationRegistryCleanupFromTask.
4402- //
4403- // It is exposed by FLAG_harmony_weak_refs_with_cleanup_some.
4404- Handle<JSFunction> cleanup_some_fun = SimpleCreateFunction (
4405- isolate (), factory->InternalizeUtf8String (" cleanupSome" ),
4406- Builtins::kFinalizationRegistryPrototypeCleanupSome , 0 , false );
4407- native_context ()->set_finalization_registry_cleanup_some (*cleanup_some_fun);
4408- }
4409- {
4410- // Create %WeakRef%
4411- Handle<JSFunction> weak_ref_fun = InstallFunction (
4412- isolate (), global, factory->WeakRef_string (), JS_WEAK_REF_TYPE,
4413- JSWeakRef::kHeaderSize , 0 , factory->the_hole_value (),
4414- Builtins::kWeakRefConstructor );
4415- InstallWithIntrinsicDefaultProto (isolate (), weak_ref_fun,
4416- Context::JS_WEAK_REF_FUNCTION_INDEX);
4417-
4418- weak_ref_fun->shared ().DontAdaptArguments ();
4419- weak_ref_fun->shared ().set_length (1 );
4420-
4421- Handle<JSObject> weak_ref_prototype (
4422- JSObject::cast (weak_ref_fun->instance_prototype ()), isolate ());
4423-
4424- InstallToStringTag (isolate (), weak_ref_prototype,
4425- factory->WeakRef_string ());
4426-
4427- SimpleInstallFunction (isolate (), weak_ref_prototype, " deref" ,
4428- Builtins::kWeakRefDeref , 0 , true );
4429- }
4430- }
4431-
44324421void Genesis::InitializeGlobal_harmony_weak_refs_with_cleanup_some () {
44334422 if (!FLAG_harmony_weak_refs_with_cleanup_some) return ;
4434- DCHECK (FLAG_harmony_weak_refs);
44354423
44364424 Handle<JSFunction> finalization_registry_fun =
44374425 isolate ()->js_finalization_registry_fun ();
0 commit comments