diff --git a/Libraries/LibJS/AST.cpp b/Libraries/LibJS/AST.cpp index 9ff915d931..da8215f497 100644 --- a/Libraries/LibJS/AST.cpp +++ b/Libraries/LibJS/AST.cpp @@ -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); diff --git a/Libraries/LibJS/Value.cpp b/Libraries/LibJS/Value.cpp index d2e0bfa091..8dfb920196 100644 --- a/Libraries/LibJS/Value.cpp +++ b/Libraries/LibJS/Value.cpp @@ -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(); diff --git a/Libraries/LibJS/Value.h b/Libraries/LibJS/Value.h index 7b232c2a93..51b3982910 100644 --- a/Libraries/LibJS/Value.h +++ b/Libraries/LibJS/Value.h @@ -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&);