checker: fix type error in `f<T>(fn (v T))` with multiple different Ts (#10154)
							parent
							
								
									f7cd95472a
								
							
						
					
					
						commit
						be92f81b2e
					
				|  | @ -1211,6 +1211,7 @@ pub fn (mut t Table) resolve_generic_to_concrete(generic_type Type, generic_name | |||
| 				func.return_type = typ | ||||
| 			} | ||||
| 		} | ||||
| 		func.params = func.params.clone() | ||||
| 		for mut param in func.params { | ||||
| 			if param.typ.has_flag(.generic) { | ||||
| 				if typ := t.resolve_generic_to_concrete(param.typ, generic_names, concrete_types, | ||||
|  |  | |||
|  | @ -24,6 +24,14 @@ pub fn consume(data int) int { | |||
| 	return data | ||||
| } | ||||
| 
 | ||||
| pub fn consume_str(data string) string { | ||||
| 	return data | ||||
| } | ||||
| 
 | ||||
| fn call<T>(f fn (T) T, v T) T { | ||||
| 	return f(v) | ||||
| } | ||||
| 
 | ||||
| fn test_generics_with_anon_generics_fn() { | ||||
| 	mut s := MyStruct<int>{ | ||||
| 		arr: [1, 2, 3, 4, 5] | ||||
|  | @ -31,4 +39,9 @@ fn test_generics_with_anon_generics_fn() { | |||
| 	y := s.iterate<int>(consume) | ||||
| 	println(y) | ||||
| 	assert y == 15 | ||||
| 
 | ||||
| 	assert call<int>(consume, 1) == 1 | ||||
| 	assert call<string>(consume_str, '1') == '1' | ||||
| 	assert call(consume, 1) == 1 | ||||
| 	assert call(consume_str, '1') == '1' | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue