LibJS: Make SharedFunctionInstanceData GC-allocated

This commit is contained in:
Andreas Kling 2025-10-26 11:09:09 +01:00 committed by Andreas Kling
parent b77f658c83
commit 3a38040c82
Notes: github-actions[bot] 2025-10-27 20:15:53 +00:00
4 changed files with 38 additions and 20 deletions

View file

@ -34,8 +34,13 @@ enum class ConstructorKind : u8 {
Derived,
};
class SharedFunctionInstanceData : public RefCounted<SharedFunctionInstanceData> {
class SharedFunctionInstanceData final : public GC::Cell {
GC_CELL(SharedFunctionInstanceData, GC::Cell);
GC_DECLARE_ALLOCATOR(SharedFunctionInstanceData);
public:
virtual ~SharedFunctionInstanceData() override;
SharedFunctionInstanceData(
VM& vm,
FunctionKind,
@ -96,6 +101,9 @@ public:
Variant<PropertyKey, PrivateName, Empty> m_class_field_initializer_name; // [[ClassFieldInitializerName]]
ConstructorKind m_constructor_kind : 1 { ConstructorKind::Base }; // [[ConstructorKind]]
bool m_is_class_constructor : 1 { false }; // [[IsClassConstructor]]
private:
virtual void visit_edges(Visitor&) override;
};
// 10.2 ECMAScript Function Objects, https://tc39.es/ecma262/#sec-ecmascript-function-objects
@ -184,7 +192,7 @@ public:
private:
ECMAScriptFunctionObject(
NonnullRefPtr<SharedFunctionInstanceData>,
GC::Ref<SharedFunctionInstanceData>,
Environment* parent_environment,
PrivateEnvironment* private_environment,
Object& prototype);
@ -202,7 +210,7 @@ private:
void prepare_for_ordinary_call(VM&, ExecutionContext& callee_context, Object* new_target);
void ordinary_call_bind_this(VM&, ExecutionContext&, Value this_argument);
NonnullRefPtr<SharedFunctionInstanceData> m_shared_data;
GC::Ref<SharedFunctionInstanceData> m_shared_data;
GC::Ptr<PrimitiveString> m_name_string;