parent
							
								
									6e4dad9acf
								
							
						
					
					
						commit
						aadeb62bbf
					
				|  | @ -60,9 +60,10 @@ fn (mut g Gen) gen_fn_decl(it ast.FnDecl, skip bool) { | |||
| 	} | ||||
| 	mut type_name := g.typ(it.return_type) | ||||
| 	if g.cur_generic_type != 0 { | ||||
| 		// foo<T>() => foo_int(), foo_string() etc
 | ||||
| 		// foo<T>() => foo_T_int(), foo_T_string() etc
 | ||||
| 		gen_name := g.typ(g.cur_generic_type) | ||||
| 		name += '_' + gen_name | ||||
| 		// Using _T_ to differentiate between get<string> and get_string
 | ||||
| 		name += '_T_' + gen_name | ||||
| 	} | ||||
| 	// if g.pref.show_cc && it.is_builtin {
 | ||||
| 	// println(name)
 | ||||
|  | @ -534,8 +535,9 @@ fn (mut g Gen) fn_call(node ast.CallExpr) { | |||
| 		name = c_name(name) | ||||
| 	} | ||||
| 	if node.generic_type != table.void_type && node.generic_type != 0 { | ||||
| 		// `foo<int>()` => `foo_int()`
 | ||||
| 		name += '_' + g.typ(node.generic_type) | ||||
| 		// Using _T_ to differentiate between get<string> and get_string
 | ||||
| 		// `foo<int>()` => `foo_T_int()`
 | ||||
| 		name += '_T_' + g.typ(node.generic_type) | ||||
| 	} | ||||
| 	// TODO2
 | ||||
| 	// cgen shouldn't modify ast nodes, this should be moved
 | ||||
|  |  | |||
|  | @ -0,0 +1,12 @@ | |||
| fn get<T>(typ T) T { | ||||
|    return typ | ||||
| } | ||||
| 
 | ||||
| fn get_string(typ string) string { | ||||
|    return 'boom' | ||||
| } | ||||
| 
 | ||||
| fn test_generic_with_same_type() { | ||||
| 	assert get_string('') == 'boom' | ||||
| 	assert get<string>('hello') == 'hello' | ||||
| } | ||||
		Loading…
	
		Reference in New Issue