forked from mirror/go-json
Fix detection of indirect field
This commit is contained in:
parent
7d4316b94a
commit
f3aded9b12
|
@ -32,6 +32,18 @@ func TestCoverString(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
data interface{}
|
data interface{}
|
||||||
}{
|
}{
|
||||||
|
{
|
||||||
|
name: "PtrHeadStringComplicated",
|
||||||
|
data: &struct {
|
||||||
|
X *struct {
|
||||||
|
A string
|
||||||
|
B []string
|
||||||
|
}
|
||||||
|
}{X: &struct {
|
||||||
|
A string
|
||||||
|
B []string
|
||||||
|
}{A: "hello", B: []string{"a", "b"}}},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "String",
|
name: "String",
|
||||||
data: string("a"),
|
data: string("a"),
|
||||||
|
|
|
@ -1399,7 +1399,15 @@ func compileStruct(ctx *compileContext, isPtr bool) (*Opcode, error) {
|
||||||
valueCode.Indirect = indirect
|
valueCode.Indirect = indirect
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if indirect {
|
||||||
|
// if parent is indirect type, set child indirect property to true
|
||||||
valueCode.Indirect = indirect
|
valueCode.Indirect = indirect
|
||||||
|
} else {
|
||||||
|
// if parent is not indirect type and child have only one field, set child indirect property to false
|
||||||
|
if i == 0 && valueCode.NextField != nil && valueCode.NextField.Op == OpStructEnd {
|
||||||
|
valueCode.Indirect = indirect
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
key := fmt.Sprintf(`"%s":`, tag.Key)
|
key := fmt.Sprintf(`"%s":`, tag.Key)
|
||||||
escapedKey := fmt.Sprintf(`%s:`, string(AppendEscapedString([]byte{}, tag.Key)))
|
escapedKey := fmt.Sprintf(`%s:`, string(AppendEscapedString([]byte{}, tag.Key)))
|
||||||
|
|
Loading…
Reference in New Issue