aboutsummaryrefslogtreecommitdiff
path: root/interpreter/print.c
diff options
context:
space:
mode:
Diffstat (limited to 'interpreter/print.c')
-rw-r--r--interpreter/print.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/interpreter/print.c b/interpreter/print.c
index 91e079e..d063142 100644
--- a/interpreter/print.c
+++ b/interpreter/print.c
@@ -40,6 +40,23 @@ void print_token_list(token_list* list) {
}
}
+void print_in_list(expression* expr) {
+ if (!expr->var1)
+ return;
+
+ print_expression(expr->var1);
+
+ if (((expression*) expr->var2)->kind == EXPR_LIST) {
+ if (((expression*) expr->var2)->var1) {
+ printf(",");
+ print_in_list(expr->var2);
+ }
+ } else {
+ printf(":");
+ print_expression(expr->var2);
+ }
+}
+
void print_expression(expression* expr) {
if (!expr)
return;
@@ -56,15 +73,9 @@ void print_expression(expression* expr) {
(void*) expr->var1, *((unsigned char*) expr->var2));
break;
case EXPR_LIST:
- if (!expr->var1) {
- printf("[]");
- } else {
- printf("[");
- print_expression(expr->var1);
- printf(":");
- print_expression(expr->var2);
- printf("]");
- }
+ printf("[");
+ print_in_list(expr);
+ printf("]");
break;
case EXPR_TUPLE:
printf("(");