diff options
author | Camil Staps | 2018-04-03 21:14:37 +0200 |
---|---|---|
committer | Camil Staps | 2018-04-03 21:14:37 +0200 |
commit | b3f9bcbc307e3e8d455ccf560a61dc5129174728 (patch) | |
tree | c1a036d82a25452d8ade3ae29310a699aa809ddd /interpreter/code.c | |
parent | Resolve #11: print end result as soon as it is in HNF (diff) |
Store integers without pointers
Diffstat (limited to 'interpreter/code.c')
-rw-r--r-- | interpreter/code.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/interpreter/code.c b/interpreter/code.c index 88f58b7..f047add 100644 --- a/interpreter/code.c +++ b/interpreter/code.c @@ -7,12 +7,11 @@ #include "mem.h" #include "print.h" -void fill_node_int(struct node **node, int i) { +void fill_node_int(struct node **node, INT i) { unsigned int used_count = (*node)->used_count; free_node(*node, used_count, 0); (*node)->kind = NODE_INT; - (*node)->var1 = my_calloc(1, sizeof(int)); - *((int*) (*node)->var1) = i; + (*node)->var1 = (void*) i; use_node(*node, used_count); } @@ -45,63 +44,63 @@ void code_add(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "add on non-ints"); else - fill_node_int(result, *((int*) b->var1) + *((int*) a->var1)); + fill_node_int(result, (INT) b->var1 + (INT) a->var1); } void code_mul(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "mul on non-ints"); else - fill_node_int(result, *((int*) a->var1) * *((int*) b->var1)); + fill_node_int(result, (INT) a->var1 * (INT) b->var1); } void code_sub(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "sub on non-ints"); else - fill_node_int(result, *((int*) b->var1) - *((int*) a->var1)); + fill_node_int(result, (INT) b->var1 - (INT) a->var1); } void code_eq(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "eq on non-ints"); else - fill_node_bool(result, *((int*) a->var1) == *((int*) b->var1)); + fill_node_bool(result, (INT) a->var1 == (INT) b->var1); } void code_gt(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "gt on non-ints"); else - fill_node_bool(result, *((int*) a->var1) > *((int*) b->var1)); + fill_node_bool(result, (INT) a->var1 > (INT) b->var1); } void code_ge(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "ge on non-ints"); else - fill_node_bool(result, *((int*) a->var1) >= *((int*) b->var1)); + fill_node_bool(result, (INT) a->var1 >= (INT) b->var1); } void code_lt(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "lt on non-ints"); else - fill_node_bool(result, *((int*) a->var1) < *((int*) b->var1)); + fill_node_bool(result, (INT) a->var1 < (INT) b->var1); } void code_le(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "le on non-ints"); else - fill_node_bool(result, *((int*) a->var1) <= *((int*) b->var1)); + fill_node_bool(result, (INT) a->var1 <= (INT) b->var1); } void code_ne(struct node **result, struct node *a, struct node *b) { if (a->kind != NODE_INT || b->kind != NODE_INT) fill_node_name(result, "ne on non-ints"); else - fill_node_bool(result, *((int*) a->var1) != *((int*) b->var1)); + fill_node_bool(result, (INT) a->var1 != (INT) b->var1); } struct code_mapping { |