add unary minus operator
This commit is contained in:
parent
ae376b4903
commit
84c1156b9d
|
@ -30,6 +30,7 @@ enum pic_opcode {
|
|||
OP_SUB,
|
||||
OP_MUL,
|
||||
OP_DIV,
|
||||
OP_MINUS,
|
||||
OP_EQ,
|
||||
OP_LT,
|
||||
OP_LE,
|
||||
|
|
17
src/vm.c
17
src/vm.c
|
@ -260,7 +260,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv)
|
|||
&&L_OP_GREF, &&L_OP_GSET, &&L_OP_LREF, &&L_OP_LSET, &&L_OP_CREF, &&L_OP_CSET,
|
||||
&&L_OP_JMP, &&L_OP_JMPIF, &&L_OP_CALL, &&L_OP_TAILCALL, &&L_OP_RET, &&L_OP_LAMBDA,
|
||||
&&L_OP_CONS, &&L_OP_CAR, &&L_OP_CDR, &&L_OP_NILP,
|
||||
&&L_OP_ADD, &&L_OP_SUB, &&L_OP_MUL, &&L_OP_DIV,
|
||||
&&L_OP_ADD, &&L_OP_SUB, &&L_OP_MUL, &&L_OP_DIV, &&L_OP_MINUS,
|
||||
&&L_OP_EQ, &&L_OP_LT, &&L_OP_LE, &&L_OP_STOP
|
||||
};
|
||||
#endif
|
||||
|
@ -577,6 +577,21 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv)
|
|||
NEXT;
|
||||
}
|
||||
|
||||
CASE(OP_MINUS) {
|
||||
pic_value n;
|
||||
n = POP();
|
||||
if (pic_int_p(n)) {
|
||||
PUSH(pic_int_value(-pic_int(n)));
|
||||
}
|
||||
else if (pic_float_p(n)) {
|
||||
PUSH(pic_float_value(-pic_float(n)));
|
||||
}
|
||||
else {
|
||||
pic->errmsg = "unary - got a non-number operand";
|
||||
}
|
||||
NEXT;
|
||||
}
|
||||
|
||||
#define DEFINE_COMP_OP(opcode, op) \
|
||||
CASE(opcode) { \
|
||||
pic_value a, b; \
|
||||
|
|
Loading…
Reference in New Issue