.
This commit is contained in:
2
.idea/tyche.iml
generated
2
.idea/tyche.iml
generated
@@ -1,2 +1,2 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
<module classpath="CIDR" type="CPP_MODULE" version="4" />
|
||||||
@@ -20,40 +20,75 @@ static int init_ = []() {
|
|||||||
#define BIN_OP(op, t1, t2) binary_ops[(size_t) BinaryOperationType::op][(size_t) Type::t1][(size_t) Type::t2] = [](Value const& b, Value const& a)
|
#define BIN_OP(op, t1, t2) binary_ops[(size_t) BinaryOperationType::op][(size_t) Type::t1][(size_t) Type::t2] = [](Value const& b, Value const& a)
|
||||||
|
|
||||||
BIN_OP(Sum, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
BIN_OP(Sum, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(Sum, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
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, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, 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, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, 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, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, 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, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
|
|
||||||
BIN_OP(Equality, Integer, Integer) { return Value::CreateIntegerFromBool(a.as_integer() == b.as_integer()); };
|
BIN_OP(Equality, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
|
|
||||||
BIN_OP(Inequality, Integer, Integer) { return Value::CreateIntegerFromBool(a.as_integer() != b.as_integer()); };
|
BIN_OP(Inequality, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
|
|
||||||
BIN_OP(LessThan, Integer, Integer) { return Value::CreateIntegerFromBool(a.as_integer() < b.as_integer()); };
|
BIN_OP(LessThan, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
|
|
||||||
BIN_OP(LessThanOrEquals, Integer, Integer) { return Value::CreateIntegerFromBool(a.as_integer() <= b.as_integer()); };
|
BIN_OP(LessThanOrEquals, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
|
|
||||||
BIN_OP(GreaterThan, Integer, Integer) { return Value::CreateIntegerFromBool(a.as_integer() > b.as_integer()); };
|
BIN_OP(GreaterThan, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
|
|
||||||
BIN_OP(GreaterThanOrEquals, Integer, Integer) { return Value::CreateIntegerFromBool(a.as_integer() >= b.as_integer()); };
|
BIN_OP(GreaterThanOrEquals, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
|
|
||||||
BIN_OP(BitwiseAnd, Integer, Integer) { return Value::createInteger(a.as_integer() & b.as_integer()); };
|
BIN_OP(Power, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
|
|
||||||
BIN_OP(BitwiseOr, Integer, Integer) { return Value::createInteger(a.as_integer() | b.as_integer()); };
|
BIN_OP(Modulo, Integer, Integer) { return Value::createInteger(a.as_integer() + b.as_integer()); };
|
||||||
|
BIN_OP(, Integer, Float) { return Value::createFloat((float) a.as_integer() + b.as_float()); };
|
||||||
BIN_OP(BitwiseXor, Integer, Integer) { return Value::createInteger(a.as_integer() ^ b.as_integer()); };
|
BIN_OP(, Float, Integer) { return Value::createFloat(a.as_float() + (float) b.as_integer()); };
|
||||||
|
BIN_OP(, Float, Float) { return Value::createFloat(a.as_float() + b.as_float()); };
|
||||||
BIN_OP(Power, Integer, Integer) { return Value::createInteger((int32_t) powl(a.as_integer(), b.as_integer())); };
|
|
||||||
|
|
||||||
BIN_OP(ShiftLeft, Integer, Integer) { return Value::createInteger(a.as_integer() << b.as_integer()); };
|
BIN_OP(ShiftLeft, Integer, Integer) { return Value::createInteger(a.as_integer() << b.as_integer()); };
|
||||||
|
|
||||||
BIN_OP(ShiftRight, Integer, Integer) { return Value::createInteger(a.as_integer() >> b.as_integer()); };
|
BIN_OP(ShiftRight, Integer, Integer) { return Value::createInteger(a.as_integer() >> b.as_integer()); };
|
||||||
|
BIN_OP(BitwiseAnd, Integer, Integer) { return Value::createInteger(a.as_integer() & b.as_integer()); };
|
||||||
BIN_OP(Modulo, Integer, Integer) { return Value::createInteger(a.as_integer() % b.as_integer()); };
|
BIN_OP(BitwiseOr, Integer, Integer) { return Value::createInteger(a.as_integer() | b.as_integer()); };
|
||||||
|
BIN_OP(BitwiseXor, Integer, Integer) { return Value::createInteger(a.as_integer() ^ b.as_integer()); };
|
||||||
|
|
||||||
#undef BIN_OP
|
#undef BIN_OP
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ namespace tyche::vm {
|
|||||||
|
|
||||||
enum class BinaryOperationType
|
enum class BinaryOperationType
|
||||||
{
|
{
|
||||||
Sum, Subtraction, Multiplication, Division, IntegerDivision, Equality, Inequality, LessThan, LessThanOrEquals,
|
Sum, Subtraction, Multiplication, Division, IntegerDivision,
|
||||||
GreaterThan, GreaterThanOrEquals, BitwiseAnd, BitwiseOr, BitwiseXor, Power, ShiftLeft, ShiftRight, Modulo,
|
Equality, Inequality, LessThan, LessThanOrEquals,
|
||||||
|
GreaterThan, GreaterThanOrEquals, Power, Modulo,
|
||||||
|
BitwiseAnd, BitwiseOr, BitwiseXor, ShiftLeft, ShiftRight,
|
||||||
COUNT
|
COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user