diff options
| author | Mel <mel@rnrd.eu> | 2025-07-05 20:27:08 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2025-07-05 20:27:08 +0200 |
| commit | b71f85a7c3ee9e36b6eab9f113436fa990f6e561 (patch) | |
| tree | de0dac0dff1802106c97478fce84452224233b36 /boot/visit.c | |
| parent | cfbb769306fea6433c1d3e568a4f9742883a0cc9 (diff) | |
| download | catskill-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.c | 34 |
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, |
