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/transpile.c | |
| 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/transpile.c')
| -rw-r--r-- | boot/transpile.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/boot/transpile.c b/boot/transpile.c index d5a718a..0627bcb 100644 --- a/boot/transpile.c +++ b/boot/transpile.c @@ -505,6 +505,26 @@ transpile_visit_expression_construct(struct Visit* visit, struct Expression* exp TRANSPILE_WRITE("}"); } +void +transpile_visit_expression_increment_decrement(struct Visit* visit, struct Expression* expression) +{ + TRANSPILE_PREAMBLE + + const ascii* op = + expression->value.increment_decrement.operation == INCREMENT_DECREMENT_INCREMENT + ? "++" + : "--"; + if (expression->value.increment_decrement.prefix) { + TRANSPILE_WRITE("%s", op); + transpile_emit_expression( + visit, expression->value.increment_decrement.subject, TRANSPILE_PRECEDENCE_UNARY); + } else { + transpile_emit_expression( + visit, expression->value.increment_decrement.subject, TRANSPILE_PRECEDENCE_POSTFIX); + TRANSPILE_WRITE("%s", op); + } +} + // statements always emit their own indentation and trailing newline. // the dispatcher writes the indentation then routes via normal statement apparatus. void @@ -684,6 +704,7 @@ struct Visit_Table transpile_body_visit_functions = { .visit_expression_subscript = transpile_visit_expression_subscript, .visit_expression_cast = transpile_visit_expression_cast, .visit_expression_construct = transpile_visit_expression_construct, + .visit_expression_increment_decrement = transpile_visit_expression_increment_decrement, }; // walk a lowered translation unit and emit c source into the transpiler's output. |
