From f028bc7ef3101facfa004c21f3aa5feb3dc6f107 Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 24 May 2026 20:01:38 +0200 Subject: Support named-unnamed call and construction arguments and fields with final resolved order Signed-off-by: Mel --- boot/transpile.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'boot/transpile.c') 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(")"); } -- cgit 1.4.1