aboutsummaryrefslogtreecommitdiff
path: root/interpreter/syntax.c
diff options
context:
space:
mode:
Diffstat (limited to 'interpreter/syntax.c')
-rw-r--r--interpreter/syntax.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/interpreter/syntax.c b/interpreter/syntax.c
index 7a0dd39..1722761 100644
--- a/interpreter/syntax.c
+++ b/interpreter/syntax.c
@@ -41,6 +41,11 @@ void cpy_expression(expression* dst, expression* src) {
dst->var1 = my_calloc(1, strlen((char*) src->var1) + 1);
strcpy(dst->var1, src->var1);
break;
+ case EXPR_CODE:
+ dst->var1 = src->var1;
+ dst->var2 = my_calloc(1, sizeof(unsigned char));
+ *((unsigned char*) dst->var2) = *((unsigned char*) src->var2);
+ break;
case EXPR_LIST:
if (!src->var1)
break;
@@ -61,6 +66,7 @@ unsigned eq_expression(expression* a, expression* b) {
switch (a->kind) {
case EXPR_INT: return *((int*) a->var1) == *((int*) b->var1);
case EXPR_NAME: return !strcmp(a->var1, b->var1);
+ case EXPR_CODE: return a->var1 == b->var1;
case EXPR_TUPLE:
case EXPR_LIST:
case EXPR_APP:
@@ -139,6 +145,9 @@ void free_expression(expression* expr) {
case EXPR_NAME:
my_free(expr->var1);
break;
+ case EXPR_CODE:
+ my_free(expr->var2);
+ break;
case EXPR_LIST:
case EXPR_TUPLE:
case EXPR_APP: