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)
|
mut type_name := g.typ(it.return_type)
|
||||||
if g.cur_generic_type != 0 {
|
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)
|
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 {
|
// if g.pref.show_cc && it.is_builtin {
|
||||||
// println(name)
|
// println(name)
|
||||||
|
@ -534,8 +535,9 @@ fn (mut g Gen) fn_call(node ast.CallExpr) {
|
||||||
name = c_name(name)
|
name = c_name(name)
|
||||||
}
|
}
|
||||||
if node.generic_type != table.void_type && node.generic_type != 0 {
|
if node.generic_type != table.void_type && node.generic_type != 0 {
|
||||||
// `foo<int>()` => `foo_int()`
|
// Using _T_ to differentiate between get<string> and get_string
|
||||||
name += '_' + g.typ(node.generic_type)
|
// `foo<int>()` => `foo_T_int()`
|
||||||
|
name += '_T_' + g.typ(node.generic_type)
|
||||||
}
|
}
|
||||||
// TODO2
|
// TODO2
|
||||||
// cgen shouldn't modify ast nodes, this should be moved
|
// 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