@@ -1632,11 +1632,6 @@ pub fn (mut c Checker) method_call(mut call_expr ast.CallExpr) ast.Type {
1632
1632
c.error ('expected $nr_args arguments, but got $call_expr.args.len ' , unexpected_arguments_pos)
1633
1633
return method.return_type
1634
1634
}
1635
- if method.generic_names.len > 0 && method.return_type.has_flag (.generic) {
1636
- c.check_return_generics_struct (method.return_type, mut call_expr, concrete_types)
1637
- } else {
1638
- call_expr.return_type = method.return_type
1639
- }
1640
1635
mut exp_arg_typ := ast.Type (0 ) // type of 1st arg for special builtin methods
1641
1636
mut param_is_mut := false
1642
1637
mut no_type_promotion := false
@@ -1761,6 +1756,12 @@ pub fn (mut c Checker) method_call(mut call_expr ast.CallExpr) ast.Type {
1761
1756
// no type arguments given in call, attempt implicit instantiation
1762
1757
c.infer_fn_generic_types (method, mut call_expr)
1763
1758
}
1759
+ // resolve return generics struct to concrete type
1760
+ if method.generic_names.len > 0 && method.return_type.has_flag (.generic) {
1761
+ c.check_return_generics_struct (method.return_type, mut call_expr, call_expr.concrete_types)
1762
+ } else {
1763
+ call_expr.return_type = method.return_type
1764
+ }
1764
1765
if call_expr.concrete_types.len > 0 && method.return_type != 0 {
1765
1766
if typ := c.table.resolve_generic_to_concrete (method.return_type, method.generic_names,
1766
1767
call_expr.concrete_types)
@@ -2127,11 +2128,6 @@ pub fn (mut c Checker) fn_call(mut call_expr ast.CallExpr) ast.Type {
2127
2128
call_expr.pos)
2128
2129
return func.return_type
2129
2130
}
2130
- if func.generic_names.len > 0 && func.return_type.has_flag (.generic) {
2131
- c.check_return_generics_struct (func.return_type, mut call_expr, concrete_types)
2132
- } else {
2133
- call_expr.return_type = func.return_type
2134
- }
2135
2131
if func.return_type == ast.void_type && func.ctdefine.len > 0
2136
2132
&& func.ctdefine ! in c.pref.compile_defines {
2137
2133
call_expr.should_be_skipped = true
@@ -2293,6 +2289,12 @@ pub fn (mut c Checker) fn_call(mut call_expr ast.CallExpr) ast.Type {
2293
2289
}
2294
2290
}
2295
2291
}
2292
+ // resolve return generics struct to concrete type
2293
+ if func.generic_names.len > 0 && func.return_type.has_flag (.generic) {
2294
+ c.check_return_generics_struct (func.return_type, mut call_expr, call_expr.concrete_types)
2295
+ } else {
2296
+ call_expr.return_type = func.return_type
2297
+ }
2296
2298
if call_expr.concrete_types.len > 0 && func.return_type != 0 {
2297
2299
if typ := c.table.resolve_generic_to_concrete (func.return_type, func.generic_names,
2298
2300
call_expr.concrete_types)
0 commit comments