diff options
| author | Mel <mel@rnrd.eu> | 2026-05-24 20:14:29 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2026-05-24 20:14:29 +0200 |
| commit | 2a893246711442dd8407264c05991b44d1d1f66f (patch) | |
| tree | a0d4a621994ebb259331b7082a977e4ae2861bde /boot/visit | |
| parent | f028bc7ef3101facfa004c21f3aa5feb3dc6f107 (diff) | |
| download | catskill-2a893246711442dd8407264c05991b44d1d1f66f.tar.zst catskill-2a893246711442dd8407264c05991b44d1d1f66f.zip | |
Emit IR/C increment/decrement in expression position
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'boot/visit')
| -rw-r--r-- | boot/visit/ir.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/boot/visit/ir.c b/boot/visit/ir.c index 6748384..036307f 100644 --- a/boot/visit/ir.c +++ b/boot/visit/ir.c @@ -62,6 +62,7 @@ struct Visit_Table void (*visit_expression_subscript)(struct Visit* visitor, struct Expression* expr); void (*visit_expression_cast)(struct Visit* visitor, struct Expression* expr); void (*visit_expression_construct)(struct Visit* visitor, struct Expression* expr); + void (*visit_expression_increment_decrement)(struct Visit* visitor, struct Expression* expr); void (*visit_block)(struct Visit* visitor, struct Block* block); void (*visit_type_ref)(struct Visit* visitor, struct Type_Ref* ref); @@ -285,6 +286,9 @@ walk_expression(struct Visit* visit, struct Expression* expr) case EXPRESSION_CONSTRUCT: VISIT(visit_expression_construct, expr); break; + case EXPRESSION_INCREMENT_DECREMENT: + VISIT(visit_expression_increment_decrement, expr); + break; case EXPRESSION_NONE: break; default: @@ -353,6 +357,12 @@ walk_expression_construct(struct Visit* visit, struct Expression* expr) } void +walk_expression_increment_decrement(struct Visit* visit, struct Expression* expr) +{ + VISIT(visit_expression, expr->value.increment_decrement.subject); +} + +void walk_block(struct Visit* visit, struct Block* block) { FOR_EACH_ARRAY (struct Statement*, statement, &block->statements) @@ -402,6 +412,7 @@ struct Visit_Table walk_functions = { .visit_expression_subscript = walk_expression_subscript, .visit_expression_cast = walk_expression_cast, .visit_expression_construct = walk_expression_construct, + .visit_expression_increment_decrement = walk_expression_increment_decrement, .visit_block = walk_block, .visit_type_ref = walk_type_ref, @@ -921,6 +932,17 @@ printer_visit_expression_construct(struct Visit* visit, struct Expression* expr) } void +printer_visit_expression_increment_decrement(struct Visit* visit, struct Expression* expr) +{ + PRINTER_PREAMBLE + + PRINT("(%s-%s ", expr->value.increment_decrement.prefix ? "prefix" : "postfix", + increment_decrement_operation_to_string(expr->value.increment_decrement.operation)); + VISIT(visit_expression, expr->value.increment_decrement.subject); + PRINT(")"); +} + +void printer_visit_block(struct Visit* visit, struct Block* block) { PRINTER_PREAMBLE @@ -1057,6 +1079,7 @@ struct Visit_Table printer_visit_functions = { .visit_expression_subscript = printer_visit_expression_subscript, .visit_expression_cast = printer_visit_expression_cast, .visit_expression_construct = printer_visit_expression_construct, + .visit_expression_increment_decrement = printer_visit_expression_increment_decrement, .visit_block = printer_visit_block, .visit_type_ref = printer_visit_type_ref, |
