1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:47:44 +00:00

LibJS: Add spec comments to less_than()

This commit is contained in:
Linus Groh 2022-12-10 00:04:35 +00:00
parent 27ed1f6d5e
commit e53c8ae593

View file

@ -1259,12 +1259,23 @@ ThrowCompletionOr<Value> greater_than_equals(VM& vm, Value lhs, Value rhs)
}
// 13.10 Relational Operators, https://tc39.es/ecma262/#sec-relational-operators
// RelationalExpression : RelationalExpression < ShiftExpression
ThrowCompletionOr<Value> less_than(VM& vm, Value lhs, Value rhs)
{
// 1. Let lref be ? Evaluation of RelationalExpression.
// 2. Let lval be ? GetValue(lref).
// 3. Let rref be ? Evaluation of ShiftExpression.
// 4. Let rval be ? GetValue(rref).
// NOTE: This is handled in the AST or Bytecode interpreter.
// OPTIMIZATION: If both values are i32, we can do a direct comparison without calling into IsLessThan.
if (lhs.is_int32() && rhs.is_int32())
return lhs.as_i32() < rhs.as_i32();
TriState relation = TRY(is_less_than(vm, lhs, rhs, true));
// 5. Let r be ? IsLessThan(lval, rval, true).
auto relation = TRY(is_less_than(vm, lhs, rhs, true));
// 6. If r is undefined, return false. Otherwise, return r.
if (relation == TriState::Unknown)
return Value(false);
return Value(relation == TriState::True);