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