stage1 修复设计问题 实现ast2ir
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user