mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 00:08:11 +00:00
LibJS: Implement multiplication and division operators
This commit is contained in:
parent
9f3f0d9983
commit
fdf7f81ba9
5 changed files with 34 additions and 1 deletions
|
@ -115,6 +115,10 @@ Value BinaryExpression::execute(Interpreter& interpreter) const
|
|||
return add(lhs_result, rhs_result);
|
||||
case BinaryOp::Minus:
|
||||
return sub(lhs_result, rhs_result);
|
||||
case BinaryOp::Asterisk:
|
||||
return mul(lhs_result, rhs_result);
|
||||
case BinaryOp::Slash:
|
||||
return div(lhs_result, rhs_result);
|
||||
case BinaryOp::TypedEquals:
|
||||
return typed_eq(lhs_result, rhs_result);
|
||||
case BinaryOp::TypedInequals:
|
||||
|
@ -194,6 +198,12 @@ void BinaryExpression::dump(int indent) const
|
|||
case BinaryOp::Minus:
|
||||
op_string = "-";
|
||||
break;
|
||||
case BinaryOp::Asterisk:
|
||||
op_string = "*";
|
||||
break;
|
||||
case BinaryOp::Slash:
|
||||
op_string = "/";
|
||||
break;
|
||||
case BinaryOp::TypedEquals:
|
||||
op_string = "===";
|
||||
break;
|
||||
|
|
|
@ -214,6 +214,8 @@ private:
|
|||
enum class BinaryOp {
|
||||
Plus,
|
||||
Minus,
|
||||
Asterisk,
|
||||
Slash,
|
||||
TypedEquals,
|
||||
TypedInequals,
|
||||
GreaterThan,
|
||||
|
|
|
@ -127,6 +127,12 @@ NonnullOwnPtr<Expression> Parser::parse_secondary_expression(NonnullOwnPtr<Expre
|
|||
case TokenType::Minus:
|
||||
consume();
|
||||
return make<BinaryExpression>(BinaryOp::Minus, move(lhs), parse_expression());
|
||||
case TokenType::Asterisk:
|
||||
consume();
|
||||
return make<BinaryExpression>(BinaryOp::Asterisk, move(lhs), parse_expression());
|
||||
case TokenType::Slash:
|
||||
consume();
|
||||
return make<BinaryExpression>(BinaryOp::Slash, move(lhs), parse_expression());
|
||||
case TokenType::ParenOpen:
|
||||
return parse_call_expression(move(lhs));
|
||||
case TokenType::Equals:
|
||||
|
|
|
@ -145,7 +145,6 @@ Value right_shift(Value lhs, Value rhs)
|
|||
}
|
||||
|
||||
Value add(Value lhs, Value rhs)
|
||||
|
||||
{
|
||||
ASSERT(lhs.is_number());
|
||||
ASSERT(rhs.is_number());
|
||||
|
@ -159,6 +158,20 @@ Value sub(Value lhs, Value rhs)
|
|||
return Value(lhs.as_double() - rhs.as_double());
|
||||
}
|
||||
|
||||
Value mul(Value lhs, Value rhs)
|
||||
{
|
||||
ASSERT(lhs.is_number());
|
||||
ASSERT(rhs.is_number());
|
||||
return Value(lhs.as_double() * rhs.as_double());
|
||||
}
|
||||
|
||||
Value div(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())
|
||||
|
|
|
@ -168,6 +168,8 @@ 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 mul(Value lhs, Value rhs);
|
||||
Value div(Value lhs, Value rhs);
|
||||
Value typed_eq(Value lhs, Value rhs);
|
||||
|
||||
const LogStream& operator<<(const LogStream&, const Value&);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue