feat: 数组类型语法 [T; N] 改为 T[N] 后置语法

This commit is contained in:
2026-06-05 19:48:56 +08:00
parent ab4cc9a28b
commit 175f8a6658
7 changed files with 35 additions and 36 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
fn main() -> i64 {
let arr: [i64; 3] = arr;
let arr: i64[3] = arr;
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
+1 -1
View File
@@ -1,7 +1,7 @@
struct Point { x: i64, y: i64 }
fn main() -> i64 {
let arr: [Point; 2] = arr;
let arr: Point[2] = arr;
arr[0] = Point { x: 10, y: 20 };
arr[1] = Point { x: 30, y: 40 };
print_i64(arr[0].x);
+2 -2
View File
@@ -292,13 +292,13 @@ void test_codegen_array() {
/* 构造 AST:
fn main() -> i64 {
let arr: [i64; 3] = arr;
let arr: i64[3] = arr;
arr[0] = 10;
print_i64(arr[0]);
return 0;
}
*/
// let arr: [i64; 3] = arr;
// let arr: i64[3] = arr;
AstNode* arr_init = ast_make_ident(&a, "arr", loc_at(1, 1));
AstNode* let_stmt = ast_make_let(&a, "arr", TYPE_ARRAY, true, false,
arr_init, NULL, TYPE_I64, NULL, 3, loc_at(1, 1));
+3 -3
View File
@@ -265,7 +265,7 @@ void test_array_ok() {
Arena a = arena_create(1);
size_t tc; ErrorInfo lex_err = {0};
Token* toks = lex(&a,
"fn main() { let arr: [i64; 3] = arr; arr[0]; return; }",
"fn main() { let arr: i64[3] = arr; arr[0]; return; }",
"test", &tc, &lex_err);
ASSERT(toks != NULL);
ErrorInfo parse_err = {0};
@@ -282,7 +282,7 @@ void test_array_index_type_error() {
Arena a = arena_create(1);
size_t tc; ErrorInfo lex_err = {0};
Token* toks = lex(&a,
"fn main() { let arr: [i64; 3] = arr; arr[true]; return; }",
"fn main() { let arr: i64[3] = arr; arr[true]; return; }",
"test", &tc, &lex_err);
ASSERT(toks != NULL);
ErrorInfo parse_err = {0};
@@ -316,7 +316,7 @@ void test_array_assign_ok() {
Arena a = arena_create(1);
size_t tc; ErrorInfo lex_err = {0};
Token* toks = lex(&a,
"fn main() { let arr: [i64; 3] = arr; arr[0] = 42; return; }",
"fn main() { let arr: i64[3] = arr; arr[0] = 42; return; }",
"test", &tc, &lex_err);
ASSERT(toks != NULL);
ErrorInfo parse_err = {0};