parent
							
								
									1305ca662f
								
							
						
					
					
						commit
						170282b2af
					
				| 
						 | 
					@ -557,6 +557,13 @@ pub fn (mut c Checker) infer_fn_generic_types(f ast.Fn, mut call_expr ast.CallEx
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				} else if param.typ.has_flag(.variadic) {
 | 
									} else if param.typ.has_flag(.variadic) {
 | 
				
			||||||
					to_set = c.table.mktyp(arg.typ)
 | 
										to_set = c.table.mktyp(arg.typ)
 | 
				
			||||||
 | 
									} else if arg_sym.kind == .struct_ && param.typ.has_flag(.generic) {
 | 
				
			||||||
 | 
										info := arg_sym.info as ast.Struct
 | 
				
			||||||
 | 
										generic_names := info.generic_types.map(c.table.get_type_symbol(it).name)
 | 
				
			||||||
 | 
										if gt_name in generic_names {
 | 
				
			||||||
 | 
											idx := generic_names.index(gt_name)
 | 
				
			||||||
 | 
											typ = info.concrete_types[idx]
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					struct Node<T> {
 | 
				
			||||||
 | 
						data T
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn foo<T>(n Node<T>) string {
 | 
				
			||||||
 | 
						return '$n'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn test_generics_fn_infer_struct() {
 | 
				
			||||||
 | 
						ret1 := foo(Node<int>{})
 | 
				
			||||||
 | 
						println(ret1)
 | 
				
			||||||
 | 
						assert ret1.contains('Node<int>{')
 | 
				
			||||||
 | 
						assert ret1.contains('data: 0')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret2 := foo(Node<byte>{})
 | 
				
			||||||
 | 
						println(ret2)
 | 
				
			||||||
 | 
						assert ret2.contains('Node<byte>{')
 | 
				
			||||||
 | 
						assert ret2.contains('data: 0')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue