diff options
| author | Mel <mel@rnrd.eu> | 2026-05-24 20:01:38 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2026-05-24 20:01:38 +0200 |
| commit | f028bc7ef3101facfa004c21f3aa5feb3dc6f107 (patch) | |
| tree | 3458a0ec69c9552354cb7d3dde38d8f6edd0ad14 /boot/transpile.c | |
| parent | 99d57398863ab1734a9f81c2d336f82dab556383 (diff) | |
| download | catskill-f028bc7ef3101facfa004c21f3aa5feb3dc6f107.tar.zst catskill-f028bc7ef3101facfa004c21f3aa5feb3dc6f107.zip | |
Support named-unnamed call and construction arguments and fields with final resolved order
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'boot/transpile.c')
| -rw-r--r-- | boot/transpile.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/boot/transpile.c b/boot/transpile.c index 9d910b3..d5a718a 100644 --- a/boot/transpile.c +++ b/boot/transpile.c @@ -437,12 +437,19 @@ transpile_visit_expression_call(struct Visit* visit, struct Expression* expressi transpile_emit_expression(visit, expression->value.call.subject, TRANSPILE_PRECEDENCE_POSTFIX); TRANSPILE_WRITE("("); + Array(struct Call_Argument) args = expression->value.call.arguments; + uint max_slot = 0; + FOR_EACH_ARRAY (struct Call_Argument, a, &args) { + if (a->slot > max_slot) max_slot = a->slot; + } bool first = true; - FOR_EACH_ARRAY (struct Expression*, argument, &expression->value.call.arguments) { - if (!first) TRANSPILE_WRITE(", "); - // call arguments are comma-separated, each fresh from precedence 0. - transpile_emit_expression(visit, *argument, 0); - first = false; + for (uint s = 0; s <= max_slot; ++s) { + FOR_EACH_ARRAY (struct Call_Argument, a, &args) { + if (a->slot != s) continue; + if (!first) TRANSPILE_WRITE(", "); + transpile_emit_expression(visit, a->value, 0); + first = false; + } } TRANSPILE_WRITE(")"); } |
