commit 94e13f9cd7b5c8e77650c9d7c5d0a768394a905b
parent c19e4eadc9818ab2b659bb227e5aa67286f3bbd3
Author: m21c <ho*******@gmail.com>
Date: Tue, 23 Jun 2026 05:16:32 +0200
fold: propagate through compounds
Diffstat:
1 file changed, 16 insertions(+), 0 deletions(-)
diff --git a/compiler.c b/compiler.c
@@ -5376,11 +5376,23 @@ foldexpr(Env *env, Node *expr)
return expr;
+ case ACOMPOUND:
+ expr->rhs = foldexpr(env, rhs);
+ return expr;
+
+ case AFIELDINIT:
+ expr->rhs = foldexpr(env, rhs);
+ return expr;
+
case ACOMMA:
expr->lhs = foldexpr(env, lhs);
expr->rhs = foldexpr(env, rhs);
return expr;
+ case KRETURN:
+ expr->rhs = foldexpr(env, rhs);
+ return expr;
+
case KSIZEOF:
case KALIGNOF:
case KLENGTHOF:
@@ -6702,7 +6714,10 @@ codegen(CodeGen *cg, Node *expr)
/* @todo implement c version correctly */
case ASCOPE:
do {
+ Env *env = cg->env;
Node *curr = expr->lhs;
+ if (expr->u.env)
+ cg->env = expr->u.env;
while (curr) {
cgindent(cg);
codegen(cg, curr);
@@ -6711,6 +6726,7 @@ codegen(CodeGen *cg, Node *expr)
else
break;
}
+ cg->env = env;
} while (0);
break;
case AENV: