1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 19:58:11 +00:00

LibJS: Don't use Handle<Value> for JS::Object private fields

There's no reason to use handles here, we can just mark private element
values from objects that store them.
This commit is contained in:
Andreas Kling 2023-12-09 11:05:25 +01:00
parent 6a4e3d9002
commit 463931384d
4 changed files with 22 additions and 14 deletions

View file

@ -201,13 +201,13 @@ ThrowCompletionOr<ClassElement::ClassValue> ClassMethod::class_element_evaluatio
switch (kind()) {
case Kind::Method:
set_function_name();
return ClassValue { PrivateElement { private_name, PrivateElement::Kind::Method, make_handle(method_value) } };
return ClassValue { PrivateElement { private_name, PrivateElement::Kind::Method, method_value } };
case Kind::Getter:
set_function_name("get");
return ClassValue { PrivateElement { private_name, PrivateElement::Kind::Accessor, make_handle(Value(Accessor::create(vm, &method_function, nullptr))) } };
return ClassValue { PrivateElement { private_name, PrivateElement::Kind::Accessor, Value(Accessor::create(vm, &method_function, nullptr)) } };
case Kind::Setter:
set_function_name("set");
return ClassValue { PrivateElement { private_name, PrivateElement::Kind::Accessor, make_handle(Value(Accessor::create(vm, nullptr, &method_function))) } };
return ClassValue { PrivateElement { private_name, PrivateElement::Kind::Accessor, Value(Accessor::create(vm, nullptr, &method_function)) } };
default:
VERIFY_NOT_REACHED();
}
@ -392,11 +392,11 @@ ThrowCompletionOr<ECMAScriptFunctionObject*> ClassExpression::create_class_const
if (existing.key == private_element.key) {
VERIFY(existing.kind == PrivateElement::Kind::Accessor);
VERIFY(private_element.kind == PrivateElement::Kind::Accessor);
auto& accessor = private_element.value.value().as_accessor();
auto& accessor = private_element.value.as_accessor();
if (!accessor.getter())
existing.value.value().as_accessor().set_setter(accessor.setter());
existing.value.as_accessor().set_setter(accessor.setter());
else
existing.value.value().as_accessor().set_getter(accessor.getter());
existing.value.as_accessor().set_getter(accessor.getter());
added_to_existing = true;
}
}