sub and mul through judicious (I hope) use of macros.
This commit is contained in:
parent
ecf79b9de0
commit
99fb04397f
|
|
@ -327,25 +327,34 @@ pop_int(JoyList *stack) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
add(JoyList *stack, __attribute__((unused)) JoyList *expression)
|
|
||||||
{
|
|
||||||
mpz_t *a, *b;
|
|
||||||
JoyList node;
|
|
||||||
|
|
||||||
a = pop_int(stack);
|
JoyList
|
||||||
b = pop_int(stack);
|
newIntNode(void) {
|
||||||
|
JoyList node = newJoyList;
|
||||||
node = newJoyList;
|
|
||||||
node->head.kind = joyInt;
|
node->head.kind = joyInt;
|
||||||
mpz_init(node->head.value.i);
|
mpz_init(node->head.value.i);
|
||||||
GC_register_finalizer(node->head.value.i, my_callback, NULL, NULL, NULL);
|
GC_register_finalizer(node->head.value.i, my_callback, NULL, NULL, NULL);
|
||||||
mpz_add(node->head.value.i, *a, *b);
|
return node;
|
||||||
|
|
||||||
node->tail = *stack;
|
|
||||||
*stack = node;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define BINARY_MATH_OP(name) \
|
||||||
|
void \
|
||||||
|
name(JoyList *stack, __attribute__((unused)) JoyList *expression) \
|
||||||
|
{ \
|
||||||
|
mpz_t *a, *b; \
|
||||||
|
JoyList node; \
|
||||||
|
a = pop_int(stack); \
|
||||||
|
b = pop_int(stack); \
|
||||||
|
node = newIntNode(); \
|
||||||
|
mpz_ ## name(node->head.value.i, *a, *b); \
|
||||||
|
node->tail = *stack; \
|
||||||
|
*stack = node; \
|
||||||
|
}
|
||||||
|
|
||||||
|
BINARY_MATH_OP(add)
|
||||||
|
BINARY_MATH_OP(sub)
|
||||||
|
BINARY_MATH_OP(mul)
|
||||||
|
|
||||||
|
|
||||||
void branch(JoyList *stack, JoyList *expression) {stack = expression;}
|
void branch(JoyList *stack, JoyList *expression) {stack = expression;}
|
||||||
void clear(JoyList *stack, JoyList *expression) {stack = expression;}
|
void clear(JoyList *stack, JoyList *expression) {stack = expression;}
|
||||||
|
|
@ -359,9 +368,7 @@ void gt(JoyList *stack, JoyList *expression) {stack = expression;}
|
||||||
void le(JoyList *stack, JoyList *expression) {stack = expression;}
|
void le(JoyList *stack, JoyList *expression) {stack = expression;}
|
||||||
void lt(JoyList *stack, JoyList *expression) {stack = expression;}
|
void lt(JoyList *stack, JoyList *expression) {stack = expression;}
|
||||||
void mod(JoyList *stack, JoyList *expression) {stack = expression;}
|
void mod(JoyList *stack, JoyList *expression) {stack = expression;}
|
||||||
void mul(JoyList *stack, JoyList *expression) {stack = expression;}
|
|
||||||
void neq(JoyList *stack, JoyList *expression) {stack = expression;}
|
void neq(JoyList *stack, JoyList *expression) {stack = expression;}
|
||||||
void sub(JoyList *stack, JoyList *expression) {stack = expression;}
|
|
||||||
void truthy(JoyList *stack, JoyList *expression) {stack = expression;}
|
void truthy(JoyList *stack, JoyList *expression) {stack = expression;}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue