1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 19:15:09 +00:00

LibJS: Handle "receiver" argument in Reflect.{get,set}()

This commit is contained in:
Linus Groh 2020-06-25 14:00:13 +01:00 committed by Andreas Kling
parent f08aa6324e
commit afcfea2001
7 changed files with 60 additions and 17 deletions

View file

@ -178,14 +178,16 @@ JS_DEFINE_NATIVE_FUNCTION(ReflectObject::delete_property)
JS_DEFINE_NATIVE_FUNCTION(ReflectObject::get)
{
// FIXME: There's a third argument, receiver, for getters - use it once we have those.
auto* target = get_target_object_from(interpreter, "get");
if (!target)
return {};
auto property_key = interpreter.argument(1).to_string(interpreter);
if (interpreter.exception())
return {};
return target->get(property_key).value_or(js_undefined());
Value receiver = {};
if (interpreter.argument_count() > 2)
receiver = interpreter.argument(2);
return target->get(property_key, receiver).value_or(js_undefined());
}
JS_DEFINE_NATIVE_FUNCTION(ReflectObject::get_own_property_descriptor)
@ -244,7 +246,6 @@ JS_DEFINE_NATIVE_FUNCTION(ReflectObject::prevent_extensions)
JS_DEFINE_NATIVE_FUNCTION(ReflectObject::set)
{
// FIXME: There's a fourth argument, receiver, for setters - use it once we have those.
auto* target = get_target_object_from(interpreter, "set");
if (!target)
return {};
@ -252,7 +253,10 @@ JS_DEFINE_NATIVE_FUNCTION(ReflectObject::set)
if (interpreter.exception())
return {};
auto value = interpreter.argument(2);
return Value(target->put(property_key, value));
Value receiver = {};
if (interpreter.argument_count() > 3)
receiver = interpreter.argument(3);
return Value(target->put(property_key, value, receiver));
}
JS_DEFINE_NATIVE_FUNCTION(ReflectObject::set_prototype_of)