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) {
|
||||
return make_pawval_int(ast->mem,
|
||||
*(int *)val_get_data(lhs) + *(int *)val_get_data(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_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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue