Polymorphs, recursice typespec tagging

This commit is contained in:
Krzosa Karol
2023-04-01 10:11:12 +02:00
parent 5fb4999ca8
commit db3790016d
4 changed files with 137 additions and 63 deletions

View File

@@ -476,7 +476,7 @@ parse_parameter_list(Arena *arena) {
Ast_Decl *param = ast_new(Ast_Decl, AST_VAR, name, AST_DECL);
param->name = name->intern_val;
param->typespec = parse_expr();
set_flag(param->typespec->flags, AST_TYPESPEC);
set_flag_typespec(param->typespec);
propagate_polymorphic(param, param->typespec);
propagate_polymorphic(param, name);
@@ -506,7 +506,8 @@ parse_lambda(Token *token) {
if (token_match(TK_Colon)) {
do {
Ast_Expr *typespec = parse_expr();
set_flag(typespec->flags, AST_TYPESPEC);
set_flag_typespec(typespec);
ret.add(typespec);
} while (token_match(TK_Comma));
}
@@ -743,7 +744,7 @@ parse_struct(Token *pos, Ast_Kind kind) {
token_expect(TK_Colon);
Ast_Expr *typespec = parse_expr();
set_flag(typespec->flags, AST_TYPESPEC);
set_flag_typespec(typespec);
Ast_Decl *decl = ast_var(token, typespec, token->intern_val, 0);
set_flag(decl->flags, AST_AGGREGATE_CHILD);
@@ -967,7 +968,8 @@ parse_decl(B32 is_global) {
else if (token_match(TK_Identifier, TK_Colon)) {
Ast_Expr *typespec = parse_expr();
set_flag(typespec->flags, AST_TYPESPEC);
set_flag_typespec(typespec);
Ast_Expr *expr = parse_assign_expr();
if (token_match_pound(pctx->intern_foreign))
set_flag(flags, AST_FOREIGN);