stage2 修复大量AI生成的风格问题 stage1 修复对于vm abi的错误生成
This commit is contained in:
1 parent
0e38858785
commit
76f980654c
40 files changed
+619
-938
No files matched your search
+9
-18
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user