Skip to content

Commit

Permalink
json: fix default struct field initialization with long array (vlang#…
Browse files Browse the repository at this point in the history
  • Loading branch information
felipensp authored Jan 3, 2025
1 parent f821c65 commit 5eecd04
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
20 changes: 20 additions & 0 deletions vlib/json/tests/json_decode_struct_default_test.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import json

struct Bar {
b []int = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}

struct Foo {
Bar
a []int = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}

fn test_main() {
str := json.encode(Foo{})
assert json.decode(Foo, str)!.str() == 'Foo{
Bar: Bar{
b: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}'
}
3 changes: 1 addition & 2 deletions vlib/v/gen/c/json.v
Original file line number Diff line number Diff line change
Expand Up @@ -848,8 +848,7 @@ fn (mut g Gen) gen_struct_enc_dec(utyp ast.Type, type_info ast.TypeInfo, styp st
if field.has_default_expr {
dec.writeln('\t} else {')
default_str := g.expr_string_opt(field.typ, field.default_expr)
lines := default_str.count('\n')
if lines > 1 {
if default_str.count(';\n') > 1 {
dec.writeln(default_str.all_before_last('\n'))
dec.writeln('\t\t${prefix}${op}${c_name(field.name)} = ${default_str.all_after_last('\n')};')
} else {
Expand Down

0 comments on commit 5eecd04

Please sign in to comment.