File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3314,6 +3314,18 @@ fn (mut g Gen) unwrap_receiver_type(node ast.CallExpr) (ast.Type, &ast.TypeSymbo
33143314 if resolved_left_type != 0 {
33153315 left_type = resolved_left_type
33163316 }
3317+ } else if node.left is ast.StructInit {
3318+ if g.cur_fn != unsafe { nil } && g.cur_concrete_types.len > 0 {
3319+ si_typ := if node.left.generic_typ != 0 {
3320+ node.left.generic_typ
3321+ } else {
3322+ node.left.typ
3323+ }
3324+ resolved := g.unwrap_generic (si_typ)
3325+ if resolved != 0 && ! resolved.has_flag (.generic) {
3326+ left_type = resolved
3327+ }
3328+ }
33173329 }
33183330 if left_type == g.unwrap_generic (node.left_type) {
33193331 resolved_left_type := g.type_resolver.get_type_or_default (node.left, node.left_type)
@@ -3462,6 +3474,22 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
34623474 }
34633475 }
34643476 }
3477+ ast.StructInit {
3478+ // In generic contexts, node.left_type may be stale from a previous
3479+ // checker instantiation (the checker overwrites AST types on each pass).
3480+ // Use the struct init's own .typ which preserves the generic flag.
3481+ if g.cur_fn != unsafe { nil } && g.cur_concrete_types.len > 0 {
3482+ si_typ := if node.left.generic_typ != 0 {
3483+ node.left.generic_typ
3484+ } else {
3485+ node.left.typ
3486+ }
3487+ resolved := g.unwrap_generic (si_typ)
3488+ if resolved != 0 && ! resolved.has_flag (.generic) {
3489+ left_type = resolved
3490+ }
3491+ }
3492+ }
34653493 else {}
34663494 }
34673495 if left_type == g.unwrap_generic (node.left_type) {
You can’t perform that action at this time.
0 commit comments