about summary refs log tree commit diff
path: root/boot/visit.c
diff options
context:
space:
mode:
authorMel <mel@rnrd.eu>2025-07-05 20:27:08 +0200
committerMel <mel@rnrd.eu>2025-07-05 20:27:08 +0200
commitb71f85a7c3ee9e36b6eab9f113436fa990f6e561 (patch)
treede0dac0dff1802106c97478fce84452224233b36 /boot/visit.c
parentcfbb769306fea6433c1d3e568a4f9742883a0cc9 (diff)
downloadcatskill-b71f85a7c3ee9e36b6eab9f113436fa990f6e561.tar.zst
catskill-b71f85a7c3ee9e36b6eab9f113436fa990f6e561.zip
Try (?) & must (!) expressions
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'boot/visit.c')
-rw-r--r--boot/visit.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/boot/visit.c b/boot/visit.c
index 3cc3e55..c1dd797 100644
--- a/boot/visit.c
+++ b/boot/visit.c
@@ -45,6 +45,8 @@ struct Visit_Table
     void (*visit_expression_subscript)(struct Visit* visitor, struct Expression* expr);
     void (*visit_expression_member)(struct Visit* visitor, struct Expression* expr);
     void (*visit_expression_increment_decrement)(struct Visit* visitor, struct Expression* expr);
+    void (*visit_expression_try)(struct Visit* visitor, struct Expression* expr);
+    void (*visit_expression_must)(struct Visit* visitor, struct Expression* expr);
     void (*visit_expression_function)(struct Visit* visitor, struct Expression* expr);
 
     void (*visit_type_node)(struct Visit* visitor, struct Type_Node* node);
@@ -219,6 +221,12 @@ walk_expression(struct Visit* visit, struct Expression* expression)
     case EXPRESSION_INCREMENT_DECREMENT:
         VISIT(visit_expression_increment_decrement, expression);
         break;
+    case EXPRESSION_TRY:
+        VISIT(visit_expression_try, expression);
+        break;
+    case EXPRESSION_MUST:
+        VISIT(visit_expression_must, expression);
+        break;
     case EXPRESSION_FUNCTION:
         VISIT(visit_expression_function, expression);
         break;
@@ -286,6 +294,10 @@ walk_expression_increment_decrement(struct Visit* visit, struct Expression* expr
     VISIT(visit_expression, expression->value.increment_decrement.subject);
 }
 
+WALK_LEAF_FUNCTION(walk_expression_try, struct Expression*);
+
+WALK_LEAF_FUNCTION(walk_expression_must, struct Expression*);
+
 void
 walk_expression_function(struct Visit* visit, struct Expression* expression)
 {
@@ -815,6 +827,26 @@ printer_visit_expression_increment_decrement(struct Visit* visit, struct Express
 }
 
 void
+printer_visit_expression_try(struct Visit* visit, struct Expression* expr)
+{
+    TREE_PRINTER_PREAMBLE
+
+    PRINT("(try ");
+    VISIT(visit_expression, expr->value.try.expression);
+    PRINT(")");
+}
+
+void
+printer_visit_expression_must(struct Visit* visit, struct Expression* expr)
+{
+    TREE_PRINTER_PREAMBLE
+
+    PRINT("(must ");
+    VISIT(visit_expression, expr->value.must.expression);
+    PRINT(")");
+}
+
+void
 printer_visit_expression_function(struct Visit* visit, struct Expression* expr)
 {
     TREE_PRINTER_PREAMBLE
@@ -1064,6 +1096,8 @@ struct Visit_Table printer_visit_functions = {
     .visit_expression_subscript = printer_visit_expression_subscript,
     .visit_expression_member = printer_visit_expression_member,
     .visit_expression_increment_decrement = printer_visit_expression_increment_decrement,
+    .visit_expression_try = printer_visit_expression_try,
+    .visit_expression_must = printer_visit_expression_must,
     .visit_expression_function = printer_visit_expression_function,
 
     .visit_type_node = printer_visit_type_node,