feat: let mut + 赋值语句 — while 循环可修改变量
- lexer: 新增 TOK_MUT 关键字 - ast: AST_ASSIGN_STMT 节点 + let_stmt.is_mut 标志 - parser: ‘let mut’ 前缀识别 + ‘ident = expr;’ 赋值语句 - sema: Symbol.is_mut 可变性检查(不可变变量赋值报错) - codegen: AST_ASSIGN_STMT → store 指令 - 新增集成测试 06_mut_while.l(while 循环 + 计数器) 基于 Codex 分析报告 P0 建议。
This commit is contained in:
@@ -229,6 +229,15 @@ static void codegen_stmt(CgCtx* ctx, AstNode* node) {
|
||||
break;
|
||||
}
|
||||
|
||||
case AST_ASSIGN_STMT: {
|
||||
LLVMValueRef ptr = find_var(ctx, node->as.assign_stmt.name);
|
||||
if (!ptr) return;
|
||||
LLVMValueRef val = codegen_expr(ctx, node->as.assign_stmt.value);
|
||||
if (!val) return;
|
||||
LLVMBuildStore(ctx->builder, val, ptr);
|
||||
break;
|
||||
}
|
||||
|
||||
case AST_EXPR_STMT:
|
||||
codegen_expr(ctx, node->as.expr_stmt.expr);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user