1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:57:35 +00:00

LibJS: Implement the GetV() abstract operation

Like Get(), but with any value instead of an object - it's calling
ToObject() for us and passes the value to [[Get]]() as the receiver.

This will be used in GetMethod() (and a couple of other places, which
can be updated over time).

I also tried something new here: adding the three steps from the spec as
inline comments :^)
This commit is contained in:
Linus Groh 2021-06-26 19:17:28 +01:00
parent dbda5a9a4c
commit 31f5797e89
2 changed files with 18 additions and 0 deletions

View file

@ -789,6 +789,22 @@ double Value::to_integer_or_infinity(GlobalObject& global_object) const
return integer;
}
// 7.3.3 GetV ( V, P ), https://tc39.es/ecma262/#sec-getv
Value Value::get(GlobalObject& global_object, PropertyName const& property_name) const
{
auto& vm = global_object.vm();
// 1. Assert: IsPropertyKey(P) is true.
// 2. Let O be ? ToObject(V).
auto* object = to_object(global_object);
if (vm.exception())
return {};
// 3. Return ? O.[[Get]](P, V).
return object->get(property_name, *this);
}
// 13.10 Relational Operators, https://tc39.es/ecma262/#sec-relational-operators
Value greater_than(GlobalObject& global_object, Value lhs, Value rhs)
{