Propagate polymorphic to lambda
This commit is contained in:
@@ -477,9 +477,12 @@ parse_parameter_list(Arena *arena) {
|
||||
param->name = name->intern_val;
|
||||
param->typespec = parse_expr();
|
||||
set_flag_typespec(param->typespec);
|
||||
|
||||
propagate_polymorphic(param, param->typespec);
|
||||
propagate_polymorphic(param, name);
|
||||
if (is_typespec_polymorphic(param->typespec)) {
|
||||
set_flag(param->flags, AST_TYPE_POLYMORPH);
|
||||
}
|
||||
if (name->kind == TK_Polymorph) {
|
||||
set_flag(param->flags, AST_IDENT_POLYMORPH);
|
||||
}
|
||||
|
||||
if (token_match(TK_Assign)) {
|
||||
param->expr = parse_expr();
|
||||
@@ -608,7 +611,10 @@ parse_expr(S64 min_bp) {
|
||||
switch (token->kind) {
|
||||
case TK_StringLit: left = ast_str(token, token->intern_val); break;
|
||||
case TK_Identifier: left = ast_ident(token, token->intern_val); break;
|
||||
case TK_Polymorph: left = ast_ident(token, token->intern_val); break;
|
||||
case TK_Polymorph: {
|
||||
left = ast_ident(token, token->intern_val);
|
||||
set_flag(left->flags, AST_POLYMORPH);
|
||||
} break;
|
||||
case TK_Integer: left = ast_int(token, token->int_val); break;
|
||||
case TK_UnicodeLit: left = ast_int(token, token->unicode); break;
|
||||
case TK_Float: left = ast_float(token, token->f64_val); break;
|
||||
@@ -624,7 +630,6 @@ parse_expr(S64 min_bp) {
|
||||
case TK_Pointer: {
|
||||
left = ast_expr_unary(token, TK_Pointer, parse_expr(prefix_bp.right));
|
||||
auto unary = (Ast_Unary *)left;
|
||||
propagate_polymorphic(unary, unary->expr);
|
||||
} break;
|
||||
|
||||
// Array subscript -> [32]int
|
||||
@@ -636,7 +641,6 @@ parse_expr(S64 min_bp) {
|
||||
Ast_Array *result = ast_array(token, expr);
|
||||
token_expect(TK_CloseBracket);
|
||||
result->base = parse_expr(prefix_bp.right);
|
||||
propagate_polymorphic(result, result->base);
|
||||
left = result;
|
||||
} break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user