stage1 修复设计问题 实现ast2ir

This commit is contained in:
zzy
2026-08-05 08:14:23 +08:00
parent 8ac59dfaa1
commit 2ccee5f1cf
14 changed files with 3694 additions and 91 deletions

View File

@@ -1,54 +1,54 @@
/* ===== å¤<C3A5>æ<EFBFBD>ç±»åžåµŒå¥—综å<C2BC>ˆæµè¯• =====
* test20_complex — 结构体嵌套、切片、数组、方法、类型别名、枚举等
* 难度5/5
* test20_complex â€?结构体嵌套ã€<C3A3>切片ã€<C3A3>数组ã€<C3A3>æ¹æ³•ã€<C3A3>ç±»åžåˆ«å<C2AB><C3A5>ã€<C3A3>枚举ç­
* 难度�/5
*/
/* ---- 基础结构体 ---- */
/* ---- 基础结构�---- */
type Point = struct {
var x: i32;
var y: i32;
x: i32,
y: i32,
}
/* ---- 嵌套结构体 ---- */
/* ---- 嵌套结构�---- */
type Rect = struct {
var min: Point;
var max: Point;
min: Point,
max: Point,
}
/* ---- 含切片字段的结构体 (核心 bug 测试) ---- */
/* ---- å<EFBFBD>«åˆ‡ç‰‡å­—段的结构ä½?(核心 bug 测试) ---- */
type Buffer = struct {
var data: []u8;
var len: usize;
data: []u8,
len: usize,
}
/* ---- 含数组字段的结构体 ---- */
/* ---- å<EFBFBD>«æ•°ç»„字段的结构ä½?---- */
type MatrixRow = struct {
var items: [4]i32;
items: [4]i32,
}
/* ---- 含指针字段的结构体 ---- */
/* ---- å<EFBFBD>«æŒ‡éˆå­—段的结构ä½?---- */
type Node = struct {
var ptr: *i32;
var val: i32;
ptr: *i32,
val: i32,
}
/* ---- 多层级嵌套:结构体里的结构体里的切片 ---- */
type Bundle = struct {
var name: *u8;
var buf: Buffer;
var row: MatrixRow;
var pt: Point;
name: *u8,
buf: Buffer,
row: MatrixRow,
pt: Point,
}
/* ---- 枚举含数据 ---- */
/* ---- 枚举å<EFBFBD>«æ•°æ<EFBFBD>?---- */
type Status = enum {
Active: i32;
Inactive;
Pending: Point;
}
/* ---- 含方法的结构体 (方法定义在结构体内部) ---- */
/* ---- å<EFBFBD>«æ¹æ³•的结构ä½?(方法定义在结构体内部) ---- */
type Counter = struct {
var val: i32;
val: i32,
fn inc(self: *Counter) i32 {
self.val = self.val + 1;
@@ -70,7 +70,7 @@ type Counter = struct {
}
/* ============================================================
* 测试 1: 切片在结构体内部初始化 (修复的核心 bug)
* 测试 1: 切片在结构体内部åˆ<C3A5>å§åŒ?(ä¿®å¤<C3A5>的核å¿?bug)
* ============================================================ */
fn test_slice_in_struct() i32 {
@@ -85,7 +85,7 @@ fn test_slice_in_struct() i32 {
if b.data[1] != 66 { ret 3; }
if b.data[3] != 68 { ret 4; }
/* Modify through slice verify reflection */
/* Modify through slice �verify reflection */
b.data[0] = 90;
if raw[0] != 90 { ret 5; }
@@ -150,7 +150,7 @@ fn test_nested_struct() i32 {
}
/* ============================================================
* 测试 4: 结构体成员方法 (实例方法调用)
* 测试 4: 结构体æˆ<C3A6>å˜æ¹æ³?(实例方法调用)
* ============================================================ */
fn test_struct_method() i32 {
@@ -161,7 +161,7 @@ fn test_struct_method() i32 {
if r1 != 1 { ret 1; }
if c.val != 1 { ret 2; }
/* 带参数方法调用 c.add(&c, n) */
/* 带å<EFBFBD>æ•°æ¹æ³•è°ƒç”?c.add(&c, n) */
var r2: i32 = c.add(&c, 5);
if r2 != 6 { ret 3; }
if c.val != 6 { ret 4; }
@@ -193,7 +193,7 @@ fn test_ptr_in_struct() i32 {
v = 100;
if n.ptr[0] != 100 { ret 3; }
/* 通过指针在结构体内修改 */
/* 通过指针在结构体内修�*/
n.ptr[0] = 200;
if v != 200 { ret 4; }
@@ -201,7 +201,7 @@ fn test_ptr_in_struct() i32 {
}
/* ============================================================
* 测试 6: 多层级复杂嵌套
* 测试 6: 多å±çº§å¤<C3A5>æ<EFBFBD>嵌å¥?
* ============================================================ */
fn test_complex_nesting() i32 {
@@ -289,7 +289,7 @@ fn test_enum_complex() i32 {
}
/* ============================================================
* 主函数
* 主函�
* ============================================================ */
fn main() i32 {