mewmewmewmeoow
This commit is contained in:
parent
ea19c28156
commit
e90fe8cadf
1 changed files with 45 additions and 2 deletions
|
@ -39,8 +39,51 @@ enum PawVal *op_unequals(struct PawAST *ast, enum PawVal *lhs,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum PawVal *op_add(struct PawAST *ast, enum PawVal *lhs, enum PawVal *rhs) {
|
enum PawVal *op_add(struct PawAST *ast, enum PawVal *lhs, enum PawVal *rhs) {
|
||||||
return make_pawval_int(ast->mem,
|
float l;
|
||||||
*(int *)val_get_data(lhs) + *(int *)val_get_data(rhs));
|
float r;
|
||||||
|
if (*lhs == PAW_VAL_FLOAT) {
|
||||||
|
l = *(float *)val_get_data(lhs);
|
||||||
|
} else if (*lhs == PAW_VAL_INT) {
|
||||||
|
l = *(int *)val_get_data(lhs);
|
||||||
|
}
|
||||||
|
if (*rhs == PAW_VAL_FLOAT) {
|
||||||
|
r = *(float *)val_get_data(rhs);
|
||||||
|
} else if (*rhs == PAW_VAL_INT) {
|
||||||
|
r = *(int *)val_get_data(rhs);
|
||||||
|
}
|
||||||
|
return make_pawval_float(ast->mem, l + r);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PawVal *op_mul(struct PawAST *ast, enum PawVal *lhs, enum PawVal *rhs) {
|
||||||
|
float l;
|
||||||
|
float r;
|
||||||
|
if (*lhs == PAW_VAL_FLOAT) {
|
||||||
|
l = *(float *)val_get_data(lhs);
|
||||||
|
} else if (*lhs == PAW_VAL_INT) {
|
||||||
|
l = *(int *)val_get_data(lhs);
|
||||||
|
}
|
||||||
|
if (*rhs == PAW_VAL_FLOAT) {
|
||||||
|
r = *(float *)val_get_data(rhs);
|
||||||
|
} else if (*rhs == PAW_VAL_INT) {
|
||||||
|
r = *(int *)val_get_data(rhs);
|
||||||
|
}
|
||||||
|
return make_pawval_float(ast->mem, l * r);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PawVal *op_sub(struct PawAST *ast, enum PawVal *lhs, enum PawVal *rhs) {
|
||||||
|
float l;
|
||||||
|
float r;
|
||||||
|
if (*lhs == PAW_VAL_FLOAT) {
|
||||||
|
l = *(float *)val_get_data(lhs);
|
||||||
|
} else if (*lhs == PAW_VAL_INT) {
|
||||||
|
l = *(int *)val_get_data(lhs);
|
||||||
|
}
|
||||||
|
if (*rhs == PAW_VAL_FLOAT) {
|
||||||
|
r = *(float *)val_get_data(rhs);
|
||||||
|
} else if (*rhs == PAW_VAL_INT) {
|
||||||
|
r = *(int *)val_get_data(rhs);
|
||||||
|
}
|
||||||
|
return make_pawval_float(ast->mem, l - r);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum PawVal *make_pawval_float(struct Mem *mem, float n) {
|
enum PawVal *make_pawval_float(struct Mem *mem, float n) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue