diff --git a/src/vm/expr.cc b/src/vm/expr.cc index 39faf71..56b04cc 100644 --- a/src/vm/expr.cc +++ b/src/vm/expr.cc @@ -24,25 +24,25 @@ static int init_ = []() { BIN_OP(Sum, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); }; BIN_OP(Sum, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); }; - BIN_OP(Subtraction, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); }; - BIN_OP(Subtraction, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); }; - BIN_OP(Subtraction, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); }; - BIN_OP(Subtraction, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); }; + BIN_OP(Subtraction, Integer, Integer) { return Value::createInteger(a.as_integer() - b.as_integer()); }; + BIN_OP(Subtraction, Integer, Float) { return Value::createFloat((float) a.as_integer() - b.as_float()); }; + BIN_OP(Subtraction, Float, Integer) { return Value::createFloat(a.as_float() - (float) b.as_integer()); }; + BIN_OP(Subtraction, Float, Float) { return Value::createFloat(a.as_float() - b.as_float()); }; - BIN_OP(Multiplication, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); }; - BIN_OP(Multiplication, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); }; - BIN_OP(Multiplication, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); }; - BIN_OP(Multiplication, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); }; + BIN_OP(Multiplication, Integer, Integer) { return Value::createInteger(a.as_integer() * b.as_integer()); }; + BIN_OP(Multiplication, Integer, Float) { return Value::createFloat((float) a.as_integer() * b.as_float()); }; + BIN_OP(Multiplication, Float, Integer) { return Value::createFloat(a.as_float() * (float) b.as_integer()); }; + BIN_OP(Multiplication, Float, Float) { return Value::createFloat(a.as_float() * b.as_float()); }; - BIN_OP(Division, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); }; - BIN_OP(Division, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); }; - BIN_OP(Division, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); }; - BIN_OP(Division, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); }; + BIN_OP(Division, Integer, Integer) { return Value::createFloat((float) a.as_integer() / (float) b.as_integer()); }; + BIN_OP(Division, Integer, Float) { return Value::createFloat((float) a.as_integer() / b.as_float()); }; + BIN_OP(Division, Float, Integer) { return Value::createFloat(a.as_float() / (float) b.as_integer()); }; + BIN_OP(Division, Float, Float) { return Value::createFloat(a.as_float() / b.as_float()); }; - BIN_OP(IntegerDivision, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); }; - BIN_OP(IntegerDivision, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); }; - BIN_OP(IntegerDivision, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); }; - BIN_OP(IntegerDivision, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); }; + BIN_OP(IntegerDivision, Integer, Integer) { return Value::createInteger(a.as_integer() / b.as_integer()); }; + BIN_OP(IntegerDivision, Integer, Float) { return Value::createInteger(a.as_integer() / (int32_t) b.as_float()); }; + BIN_OP(IntegerDivision, Float, Integer) { return Value::createInteger((int32_t) a.as_float() / b.as_integer()); }; + BIN_OP(IntegerDivision, Float, Float) { return Value::createInteger((int32_t) a.as_float() / (int32_t) b.as_float()); }; BIN_OP(Equality, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); }; BIN_OP(Equality, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };