LibJS: Forgot to move add/sub/typed_eq to Value.cpp

This commit is contained in:
Andreas Kling 2020-03-11 12:16:26 +01:00
parent f3a9eba987
commit 0d42097cf1
Notes: sideshowbarker 2024-07-19 08:45:54 +09:00
3 changed files with 43 additions and 37 deletions

View file

@ -91,43 +91,6 @@ Value WhileStatement::execute(Interpreter& interpreter) const
return last_value;
}
Value add(Value lhs, Value rhs)
{
ASSERT(lhs.is_number());
ASSERT(rhs.is_number());
return Value(lhs.as_double() + rhs.as_double());
}
Value sub(Value lhs, Value rhs)
{
ASSERT(lhs.is_number());
ASSERT(rhs.is_number());
return Value(lhs.as_double() - rhs.as_double());
}
const Value typed_eq(const Value lhs, const Value rhs)
{
if (rhs.type() != lhs.type())
return Value(false);
switch (lhs.type()) {
case Value::Type::Undefined:
return Value(true);
case Value::Type::Null:
return Value(true);
case Value::Type::Number:
return Value(lhs.as_double() == rhs.as_double());
case Value::Type::String:
return Value(lhs.as_string() == rhs.as_string());
case Value::Type::Boolean:
return Value(lhs.as_bool() == rhs.as_bool());
case Value::Type::Object:
return Value(lhs.as_object() == rhs.as_object());
}
ASSERT_NOT_REACHED();
}
Value BinaryExpression::execute(Interpreter& interpreter) const
{
auto lhs_result = m_lhs->execute(interpreter);

View file

@ -144,6 +144,46 @@ Value right_shift(Value lhs, Value rhs)
return Value((i32)lhs.as_double() >> (i32)rhs.as_double());
}
Value add(Value lhs, Value rhs)
{
ASSERT(lhs.is_number());
ASSERT(rhs.is_number());
return Value(lhs.as_double() + rhs.as_double());
}
Value sub(Value lhs, Value rhs)
{
ASSERT(lhs.is_number());
ASSERT(rhs.is_number());
return Value(lhs.as_double() - rhs.as_double());
}
Value typed_eq(Value lhs, Value rhs)
{
if (rhs.type() != lhs.type())
return Value(false);
switch (lhs.type()) {
case Value::Type::Undefined:
return Value(true);
case Value::Type::Null:
return Value(true);
case Value::Type::Number:
return Value(lhs.as_double() == rhs.as_double());
case Value::Type::String:
return Value(lhs.as_string() == rhs.as_string());
case Value::Type::Boolean:
return Value(lhs.as_bool() == rhs.as_bool());
case Value::Type::Object:
return Value(lhs.as_object() == rhs.as_object());
}
ASSERT_NOT_REACHED();
}
const LogStream& operator<<(const LogStream& stream, const Value& value)
{
return stream << value.to_string();

View file

@ -166,6 +166,9 @@ Value bitwise_xor(Value lhs, Value rhs);
Value bitwise_not(Value);
Value left_shift(Value lhs, Value rhs);
Value right_shift(Value lhs, Value rhs);
Value add(Value lhs, Value rhs);
Value sub(Value lhs, Value rhs);
Value typed_eq(Value lhs, Value rhs);
const LogStream& operator<<(const LogStream&, const Value&);