Aria

A low-level systems programming language
git clone git://git.m21c.me/Aria.git
Log | Files | Refs | README | LICENSE

commit 94e13f9cd7b5c8e77650c9d7c5d0a768394a905b
parent c19e4eadc9818ab2b659bb227e5aa67286f3bbd3
Author: m21c <ho*******@gmail.com>
Date:   Tue, 23 Jun 2026 05:16:32 +0200

fold: propagate through compounds

Diffstat:
Mcompiler.c | 16++++++++++++++++
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: