stage1 实现部分sema 解析数组
This commit is contained in:
1 parent
8aa7a89c7e
commit
bcd26d3021
6 files changed
+1065
-609
No files matched your search
+21
-10
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user