stage2 修复大量AI生成的风格问题 stage1 修复对于vm abi的错误生成

This commit is contained in:
zzy committed 2026-10-03 15:05:55 +08:00
1 parent 0e38858785
commit 76f980654c
40 files changed
+619 -938

No files matched your search

+9 -18
View File
@@ -1,22 +1,16 @@
// Expect retcode = 0
// comptime / const 求值的**接口 seam**(本轮只占位,不实现求值)。
//
// 目标:把「编译期求值」从 sema 主体里隔离出来,将来接一个解释器(可直接复用
// VM 或 AST 求值器)时不动 sema 结构。sema 只在 comptime 语句 / const 初始化 /
// @import 等点调用这里;未实现时统一返回 NotConst(= 放弃折叠,不报错)。
//
// 分块编译相关:eval 未来的产物是「编译期生成的声明」,统一经 DeclSink 登记,
// 由驱动在固定点循环里插入并触发重跑;eval 自己不直接改 sema 表,避免重入。
// comptime/const 求值的接口 seam:sema 只在此调用,未实现时返回 NotConst(放弃折叠、
// 不报错)。编译期生成的声明经 DeclSink 登记,不改 sema 表。
type .{ .Error } = @import("utils/error.spl");
type .{ .Vec } = @import("utils/vec.spl");
type Ast = @import("./ast.spl");
type Diag = @import("./diag.spl");
// 编译期值:占位。未来扩展为 BigInt / 聚合 / 类型句柄等。
// 编译期值(当前仅标量)。
type EvalValue = enum {
Int: usize, // TODO: BigInt
Int: usize,
Bool: bool,
}
@@ -36,14 +30,13 @@ type DeclSinkResult = enum {
Err: Error,
}
// 求值上下文(借用 sink 与 diag;本轮不持有所有权)。
// 求值上下文:sink/diag 均借用,不持有所有权。
type Eval = @self;
sink: *DeclSink, // 借用,可为 null
diag: *Diag, // 借用,可为 null
enabled: bool, // false = 完全不求值(等价旧行为)
enabled: bool, // false = 完全不求值
// ---- DeclSink ----
fn sink_new(): DeclSinkResult {
var s = DeclSink { .items = Vec.blank(@sizeof(usize), @alignof(usize)) };
@@ -66,7 +59,6 @@ fn sink_len(self: *DeclSink): usize {
ret self.items.len;
}
// ---- Eval ----
fn new(sink: *DeclSink, diag: *Diag, enabled: bool): Eval {
ret Eval {
@@ -80,25 +72,24 @@ fn is_enabled(self: *Eval): bool {
ret self.enabled;
}
// 求值一个表达式。本轮一律 NotConst(可由调用方作为「放弃折叠」处理)。
// 求值表达式:当前一律 NotConst(调用方按“放弃折叠”处理)。
fn eval_expr(self: *Eval, ast: *Ast, ref: usize): EvalOutcome {
if !self.enabled { ret .NotConst; }
ret .NotConst;
}
// 执行一个 comptime 块(可能产生声明,登记到 sink)。本轮不做。
// 执行 comptime 块;当前不实现,直接 NotConst。
fn run_block(self: *Eval, ast: *Ast, ref: usize): EvalOutcome {
if !self.enabled { ret .NotConst; }
ret .NotConst;
}
// 顶层 const 初始化求值。本轮不做。
// 顶层 const 初始化求值;当前不实现。
fn eval_const_init(self: *Eval, ast: *Ast, ref: usize): EvalOutcome {
if !self.enabled { ret .NotConst; }
ret .NotConst;
}
// ---- 测试 ----
fn test_sink() {
var sink: DeclSink = undefined;