فهرست منبع

LibJS: Add spec comments to less_than()

Linus Groh 2 سال پیش
والد
کامیت
e53c8ae593
1فایلهای تغییر یافته به همراه12 افزوده شده و 1 حذف شده
  1. 12 1
      Userland/Libraries/LibJS/Runtime/Value.cpp

+ 12 - 1
Userland/Libraries/LibJS/Runtime/Value.cpp

@@ -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);