parent
252074836b
commit
4878077c62
|
@ -530,12 +530,12 @@ fn (mut g Gen) gen_str_for_struct(info table.Struct, styp string, str_fn_name st
|
||||||
}
|
}
|
||||||
|
|
||||||
fn struct_auto_str_func(sym table.TypeSymbol, field_type table.Type, fn_name string, field_name string) string {
|
fn struct_auto_str_func(sym table.TypeSymbol, field_type table.Type, fn_name string, field_name string) string {
|
||||||
has_custom_str := sym.has_method('str')
|
has_custom_str, expects_ptr, _ := sym.str_method_info()
|
||||||
if sym.kind in [.enum_, .interface_] {
|
if sym.kind in [.enum_, .interface_] {
|
||||||
return '${fn_name}(it.${c_name(field_name)})'
|
return '${fn_name}(it.${c_name(field_name)})'
|
||||||
} else if sym.kind == .struct_ {
|
} else if sym.kind == .struct_ {
|
||||||
mut obj := 'it.${c_name(field_name)}'
|
mut obj := 'it.${c_name(field_name)}'
|
||||||
if field_type.is_ptr() {
|
if field_type.is_ptr() && !expects_ptr {
|
||||||
obj = '*$obj'
|
obj = '*$obj'
|
||||||
}
|
}
|
||||||
if has_custom_str {
|
if has_custom_str {
|
||||||
|
@ -553,7 +553,8 @@ fn struct_auto_str_func(sym table.TypeSymbol, field_type table.Type, fn_name str
|
||||||
mut method_str := 'it.${c_name(field_name)}'
|
mut method_str := 'it.${c_name(field_name)}'
|
||||||
if sym.kind == .bool {
|
if sym.kind == .bool {
|
||||||
method_str += ' ? _SLIT("true") : _SLIT("false")'
|
method_str += ' ? _SLIT("true") : _SLIT("false")'
|
||||||
} else if (field_type.is_int() || field_type.is_float()) && field_type.is_ptr() {
|
} else if (field_type.is_int() || field_type.is_float()) && field_type.is_ptr()
|
||||||
|
&& !expects_ptr {
|
||||||
// ptr int can be "nil", so this needs to be castet to a string
|
// ptr int can be "nil", so this needs to be castet to a string
|
||||||
fmt := if sym.kind in [.f32, .f64] {
|
fmt := if sym.kind in [.f32, .f64] {
|
||||||
'%g\\000'
|
'%g\\000'
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
struct Foo {
|
||||||
|
bar int
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (f &Foo) str() string {
|
||||||
|
return '${f.bar}'
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Bar {
|
||||||
|
foo &Foo
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_interpolation_with_custom_ref_str() {
|
||||||
|
foo := Foo{}
|
||||||
|
bar := Bar { &foo }
|
||||||
|
println(bar)
|
||||||
|
assert '$bar'.contains('Bar{')
|
||||||
|
assert '$bar'.contains('foo: &0')
|
||||||
|
assert '$bar'.contains('}')
|
||||||
|
}
|
Loading…
Reference in New Issue