cgen: fix array/fixed_array_rune_str (#7881)
parent
c137a79666
commit
10e7045bee
|
@ -214,6 +214,8 @@ fn (mut g Gen) gen_str_for_array(info table.Array, styp string, str_fn_name stri
|
||||||
}
|
}
|
||||||
} else if sym.kind in [.f32, .f64] {
|
} else if sym.kind in [.f32, .f64] {
|
||||||
g.auto_str_funcs.writeln('\t\tstring x = _STR("%g", 1, it);')
|
g.auto_str_funcs.writeln('\t\tstring x = _STR("%g", 1, it);')
|
||||||
|
} else if sym.kind == .rune {
|
||||||
|
g.auto_str_funcs.writeln('\t\tstring x = _STR("`%.*s\\000`", 2, ${elem_str_fn_name}(it));')
|
||||||
} else {
|
} else {
|
||||||
// There is a custom .str() method, so use it.
|
// There is a custom .str() method, so use it.
|
||||||
// NB: we need to take account of whether the user has defined
|
// NB: we need to take account of whether the user has defined
|
||||||
|
@ -280,6 +282,8 @@ fn (mut g Gen) gen_str_for_array_fixed(info table.ArrayFixed, styp string, str_f
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("%g", 1, a[i]));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("%g", 1, a[i]));')
|
||||||
} else if sym.kind == .string {
|
} else if sym.kind == .string {
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, a[i]));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, a[i]));')
|
||||||
|
} else if sym.kind == .rune {
|
||||||
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("`%.*s\\000`", 2, ${elem_str_fn_name}(a[i])));')
|
||||||
} else {
|
} else {
|
||||||
if (str_method_expects_ptr && is_elem_ptr) || (!str_method_expects_ptr && !is_elem_ptr) {
|
if (str_method_expects_ptr && is_elem_ptr) || (!str_method_expects_ptr && !is_elem_ptr) {
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${elem_str_fn_name}(a[i]));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${elem_str_fn_name}(a[i]));')
|
||||||
|
@ -328,9 +332,7 @@ fn (mut g Gen) gen_str_for_map(info table.Map, styp string, str_fn_name string)
|
||||||
if key_sym.kind == .string {
|
if key_sym.kind == .string {
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, key));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, key));')
|
||||||
} else if key_sym.kind == .rune {
|
} else if key_sym.kind == .rune {
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, tos3("`"));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("`%.*s\\000`", 2, ${key_str_fn_name}(key)));')
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${key_str_fn_name}(key));')
|
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, tos3("`"));')
|
|
||||||
} else {
|
} else {
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${key_str_fn_name}(key));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${key_str_fn_name}(key));')
|
||||||
}
|
}
|
||||||
|
@ -346,9 +348,7 @@ fn (mut g Gen) gen_str_for_map(info table.Map, styp string, str_fn_name string)
|
||||||
} else if val_sym.kind in [.f32, .f64] {
|
} else if val_sym.kind in [.f32, .f64] {
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("%g", 1, it));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("%g", 1, it));')
|
||||||
} else if val_sym.kind == .rune {
|
} else if val_sym.kind == .rune {
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, tos3("`"));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("`%.*s\\000`", 2, ${elem_str_fn_name}(it)));')
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${elem_str_fn_name}(it));')
|
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, tos3("`"));')
|
|
||||||
} else {
|
} else {
|
||||||
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${elem_str_fn_name}(it));')
|
g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${elem_str_fn_name}(it));')
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,10 +42,10 @@ fn test_array_of_ints() {
|
||||||
assert '$c2' == '[11, 22, 33]'
|
assert '$c2' == '[11, 22, 33]'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_array_of_bytes() {
|
fn test_array_of_runes() {
|
||||||
aa := [`a`, `b`, `c`]
|
aa := [`a`, `b`, `c`]
|
||||||
assert aa.str() == '[a, b, c]'
|
assert aa.str() == '[`a`, `b`, `c`]'
|
||||||
assert '$aa' == '[a, b, c]'
|
assert '$aa' == '[`a`, `b`, `c`]'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_array_of_strings() {
|
fn test_array_of_strings() {
|
||||||
|
@ -128,10 +128,10 @@ fn test_fixed_array_of_ints() {
|
||||||
assert '$c2' == '[11, 22, 33]'
|
assert '$c2' == '[11, 22, 33]'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_fixed_array_of_bytes() {
|
fn test_fixed_array_of_runes() {
|
||||||
aa := [`a`, `b`, `c`]!!
|
aa := [`a`, `b`, `c`]!!
|
||||||
assert aa.str() == '[a, b, c]'
|
assert aa.str() == '[`a`, `b`, `c`]'
|
||||||
assert '$aa' == '[a, b, c]'
|
assert '$aa' == '[`a`, `b`, `c`]'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_fixed_array_of_strings() {
|
fn test_fixed_array_of_strings() {
|
||||||
|
|
|
@ -67,9 +67,9 @@ fn test_array_of_ints_interpolation() {
|
||||||
assert '$c2' == '[11, 22, 33]'
|
assert '$c2' == '[11, 22, 33]'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_array_of_bytes_interpolation() {
|
fn test_array_of_runes_interpolation() {
|
||||||
aa := [`a`, `b`, `c`]
|
aa := [`a`, `b`, `c`]
|
||||||
assert '$aa' == '[a, b, c]'
|
assert '$aa' == '[`a`, `b`, `c`]'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_array_of_strings_interpolation() {
|
fn test_array_of_strings_interpolation() {
|
||||||
|
|
Loading…
Reference in New Issue