about summary refs log tree commit diff
path: root/boot/visit
diff options
context:
space:
mode:
Diffstat (limited to 'boot/visit')
-rw-r--r--boot/visit/ir.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/boot/visit/ir.c b/boot/visit/ir.c
index 5317276..6748384 100644
--- a/boot/visit/ir.c
+++ b/boot/visit/ir.c
@@ -321,8 +321,8 @@ void
 walk_expression_call(struct Visit* visit, struct Expression* expr)
 {
     VISIT(visit_expression, expr->value.call.subject);
-    FOR_EACH_ARRAY (struct Expression*, argument, &expr->value.call.arguments)
-        VISIT(visit_expression, *argument);
+    FOR_EACH_ARRAY (struct Call_Argument, argument, &expr->value.call.arguments)
+        VISIT(visit_expression, argument->value);
 }
 
 void
@@ -859,9 +859,10 @@ printer_visit_expression_call(struct Visit* visit, struct Expression* expr)
     PRINTER_PREAMBLE
     PRINT("(call ");
     VISIT(visit_expression, expr->value.call.subject);
-    FOR_EACH_ARRAY (struct Expression*, argument, &expr->value.call.arguments) {
-        PRINT(" ");
-        VISIT(visit_expression, *argument);
+    FOR_EACH_ARRAY (struct Call_Argument, argument, &expr->value.call.arguments) {
+        PRINT(" (slot %lu ", argument->slot);
+        VISIT(visit_expression, argument->value);
+        PRINT(")");
     }
     PRINT(")");
 }
@@ -996,6 +997,18 @@ printer_visit_lower_error(struct Visit* visit, struct Lower_Error* error)
     case LOWER_ERROR_UNKNOWN_COMPOUND_ASSIGN:
         PRINT("(unknown-compound-assign)");
         return;
+    case LOWER_ERROR_UNKNOWN_NAMED_ARGUMENT:
+        PRINT("(unknown-named-argument %s)", string_c_str(error->name));
+        return;
+    case LOWER_ERROR_DUPLICATE_ARGUMENT:
+        PRINT("(duplicate-argument %s)", string_c_str(error->name));
+        return;
+    case LOWER_ERROR_TOO_MANY_ARGUMENTS:
+        PRINT("(too-many-arguments)");
+        return;
+    case LOWER_ERROR_NAMED_ARGUMENT_ON_UNKNOWN_CALLEE:
+        PRINT("(named-argument-on-unknown-callee)");
+        return;
     case LOWER_ERROR_UNIMPLEMENTED:
         PRINT("(unimplemented \"%s\")", string_c_str(error->detail));
         return;