aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-08 23:08:12 +0900
committernsfisis <nsfisis@gmail.com>2026-01-09 01:07:52 +0900
commitdbbaf84db126bc9b72c50987aa724b923f6f52f3 (patch)
tree2b306e12a24fe34800d27632278f10d317a8ac9b
parent6dc0d380ed09610e5fabb6f8351b92f25d426931 (diff)
downloadducc-dbbaf84db126bc9b72c50987aa724b923f6f52f3.tar.gz
ducc-dbbaf84db126bc9b72c50987aa724b923f6f52f3.tar.zst
ducc-dbbaf84db126bc9b72c50987aa724b923f6f52f3.zip
feat: evaluate arguments in reverse order
-rw-r--r--src/codegen.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/codegen.c b/src/codegen.c
index 4e93e89..97a9209 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -395,11 +395,12 @@ static void codegen_func_call(CodeGen* g, AstNode* ast) {
}
AstNode* args = ast->node_args;
- for (int i = 0; i < args->node_len; ++i) {
- AstNode* arg = args->node_items + i;
+ // Evaluate arguments in the reverse order (right to left).
+ for (int i = args->node_len - 1; i >= 0; --i) {
+ AstNode* arg = &args->node_items[i];
codegen_expr(g, arg, GenMode_rval);
}
- for (int i = args->node_len - 1; i >= 0; --i) {
+ for (int i = 0; i < args->node_len && i < 6; ++i) {
fprintf(g->out, " pop %s\n", param_reg(i));
}