static void eval_add(opstack ** stack, const void *userdata) { /* (int, int) -> int */ int a = opop_i(stack); int b = opop_i(stack); opush_i(stack, a + b); unused_arg(userdata); }
static void eval_eq(opstack ** stack, const void *userdata) { /* (int, int) -> int */ int a = opop_i(stack); int b = opop_i(stack); int rval = (a == b) ? 1 : 0; opush_i(stack, rval); unused_arg(userdata); }
static void eval_lt(opstack ** stack, const void *userdata) { /* (int, int) -> int */ int a = opop_i(stack); int b = opop_i(stack); int rval = (b < a) ? 1 : 0; opush_i(stack, rval); unused(userdata); }
static void eval_if(opstack ** stack, const void *userdata) { /* (int, int) -> int */ void *a = opop_v(stack); void *b = opop_v(stack); int cond = opop_i(stack); opush_v(stack, cond ? b : a); unused_arg(userdata); }
static void eval_int(opstack ** stack, const void *userdata) { int i = opop_i(stack); const char *c = itoa10(i); size_t len = strlen(c); variant var; var.v = strcpy(balloc(len + 1), c); opush(stack, var); }