stage1 实现部分sema 解析数组

This commit is contained in:
zzy committed 2026-09-09 20:21:49 +08:00
1 parent 8aa7a89c7e
commit bcd26d3021
6 files changed
+1065 -609

No files matched your search

+21 -10
View File
@@ -349,13 +349,13 @@ static void parse_param_list(parser_t *p, spl_ast_node_ref_vec_t *out) {
if (peek(p) && peek(p)->type == TOK_COMMA)
advance(p);
break;
} else if (t->type == KW_VOID) {
advance(p);
t = peek(p);
if (!t || t->type != TOK_R_PAREN) {
SPL_FATAL(t, "expected ')' after void");
}
break;
// } else if (t->type == KW_VOID) {
// advance(p);
// t = peek(p);
// if (!t || t->type != TOK_R_PAREN) {
// SPL_FATAL(t, "expected ')' after void");
// }
// break;
} else {
SPL_FATAL(t, "unexpected token in parameter list");
break;
@@ -849,9 +849,10 @@ static spl_ast_node_ref_t parse_type_base(parser_t *p) {
(len == 5 && strncmp(name, "usize", 5) == 0) ||
(len == 3 && strncmp(name, "f32", 3) == 0) ||
(len == 3 && strncmp(name, "f64", 3) == 0) ||
(len == 4 && strncmp(name, "bool", 4) == 0) ||
(len == 4 && strncmp(name, "void", 4) == 0) ||
(len == 3 && strncmp(name, "ptr", 3) == 0)) {
(len == 4 && strncmp(name, "bool", 4) == 0)
// (len == 4 && strncmp(name, "void", 4) == 0) ||
// (len == 3 && strncmp(name, "any", 3) == 0)
) {
advance(p);
spl_ast_node_ref_t ref = new_node(p, SPL_AST_TYPE_PATH, bt);
spl_ast_node_t *tp = node_at(p->ast, ref);
@@ -886,6 +887,16 @@ static spl_ast_node_ref_t parse_type_base(parser_t *p) {
return parse_type_comptime_call(p);
}
if (bt->type == KW_ANY) {
advance(p);
spl_ast_node_ref_t ref = new_node(p, SPL_AST_TYPE_PATH, bt);
spl_ast_node_t *tp = node_at(p->ast, ref);
SET_STR_FIELD(p->ast, tp->type_path.name, bt);
vec_init(tp->type_path.generic_args);
vec_free(tag_list);
return ref;
}
vec_free(tag_list);
SPL_FATAL(bt, "unrecognized type");
return 0;