cgen: fix other generic pointer cases (#10834)
parent
51dd8304bb
commit
ec47cda386
|
@ -581,7 +581,7 @@ fn (mut g Gen) base_type(t ast.Type) string {
|
||||||
if t.has_flag(.shared_f) {
|
if t.has_flag(.shared_f) {
|
||||||
styp = g.find_or_register_shared(t, styp)
|
styp = g.find_or_register_shared(t, styp)
|
||||||
}
|
}
|
||||||
nr_muls := t.nr_muls()
|
nr_muls := g.unwrap_generic(t).nr_muls()
|
||||||
if nr_muls > 0 {
|
if nr_muls > 0 {
|
||||||
styp += strings.repeat(`*`, nr_muls)
|
styp += strings.repeat(`*`, nr_muls)
|
||||||
}
|
}
|
||||||
|
@ -596,11 +596,7 @@ fn (mut g Gen) generic_fn_name(types []ast.Type, before string, is_decl bool) st
|
||||||
// `foo<int>()` => `foo_T_int()`
|
// `foo<int>()` => `foo_T_int()`
|
||||||
mut name := before + '_T'
|
mut name := before + '_T'
|
||||||
for typ in types {
|
for typ in types {
|
||||||
nr_muls := typ.nr_muls()
|
name += '_' + strings.repeat_string('__ptr__', typ.nr_muls()) + g.typ(typ.set_nr_muls(0))
|
||||||
if is_decl && nr_muls > 0 {
|
|
||||||
name = strings.repeat(`*`, nr_muls) + name
|
|
||||||
}
|
|
||||||
name += '_' + strings.repeat_string('__ptr__', nr_muls) + g.typ(typ.set_nr_muls(0))
|
|
||||||
}
|
}
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,10 @@ fn test_identity() {
|
||||||
})['a'] == 'b'
|
})['a'] == 'b'
|
||||||
|
|
||||||
assert simple<simplemodule.Data>(simplemodule.Data{ value: 8 }).value == 8
|
assert simple<simplemodule.Data>(simplemodule.Data{ value: 8 }).value == 8
|
||||||
assert simple<&simplemodule.Data>(&simplemodule.Data{ value: 123 }).value == 123
|
x := &simplemodule.Data{
|
||||||
|
value: 123
|
||||||
|
}
|
||||||
|
assert simple<&simplemodule.Data>(x).value == 123
|
||||||
}
|
}
|
||||||
|
|
||||||
fn plus<T>(xxx T, b T) T {
|
fn plus<T>(xxx T, b T) T {
|
||||||
|
|
Loading…
Reference in New Issue