forked from mirror/go-json
Merge pull request #319 from goccy/feature/fix-encoding-head-offset
Fix encoding of MarshalText/MarshalJSON operation with head offset
This commit is contained in:
commit
1978ac1e52
|
@ -2308,3 +2308,34 @@ func TestMarshalIndent(t *testing.T) {
|
||||||
t.Fatalf("expected: %q but got %q", expected, got)
|
t.Fatalf("expected: %q but got %q", expected, got)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type issue318Embedded struct {
|
||||||
|
_ [64]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type issue318 struct {
|
||||||
|
issue318Embedded `json:"-"`
|
||||||
|
ID issue318MarshalText `json:"id,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type issue318MarshalText struct {
|
||||||
|
ID string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i issue318MarshalText) MarshalText() ([]byte, error) {
|
||||||
|
return []byte(i.ID), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIssue318(t *testing.T) {
|
||||||
|
v := issue318{
|
||||||
|
ID: issue318MarshalText{ID: "1"},
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(v)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
expected := `{"id":"1"}`
|
||||||
|
if string(b) != expected {
|
||||||
|
t.Fatalf("failed to encode. expected %s but got %s", expected, string(b))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -705,14 +705,15 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
u64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)
|
p += uintptr(code.Offset)
|
||||||
|
u64 := ptrToUint64(p, code.NumBitSize)
|
||||||
v := u64 & ((1 << code.NumBitSize) - 1)
|
v := u64 & ((1 << code.NumBitSize) - 1)
|
||||||
if v == 0 {
|
if v == 0 {
|
||||||
code = code.NextField
|
code = code.NextField
|
||||||
} else {
|
} else {
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendInt(ctx, b, p+uintptr(code.Offset), code)
|
b = appendInt(ctx, b, p, code)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendComma(ctx, b)
|
b = appendComma(ctx, b)
|
||||||
code = code.Next
|
code = code.Next
|
||||||
|
@ -2953,9 +2954,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -2994,9 +2996,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iface := ptrToInterface(code, p)
|
iface := ptrToInterface(code, p)
|
||||||
|
@ -3114,9 +3117,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -3155,9 +3159,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
|
|
@ -705,14 +705,15 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
u64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)
|
p += uintptr(code.Offset)
|
||||||
|
u64 := ptrToUint64(p, code.NumBitSize)
|
||||||
v := u64 & ((1 << code.NumBitSize) - 1)
|
v := u64 & ((1 << code.NumBitSize) - 1)
|
||||||
if v == 0 {
|
if v == 0 {
|
||||||
code = code.NextField
|
code = code.NextField
|
||||||
} else {
|
} else {
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendInt(ctx, b, p+uintptr(code.Offset), code)
|
b = appendInt(ctx, b, p, code)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendComma(ctx, b)
|
b = appendComma(ctx, b)
|
||||||
code = code.Next
|
code = code.Next
|
||||||
|
@ -2953,9 +2954,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -2994,9 +2996,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iface := ptrToInterface(code, p)
|
iface := ptrToInterface(code, p)
|
||||||
|
@ -3114,9 +3117,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -3155,9 +3159,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
|
|
@ -705,14 +705,15 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
u64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)
|
p += uintptr(code.Offset)
|
||||||
|
u64 := ptrToUint64(p, code.NumBitSize)
|
||||||
v := u64 & ((1 << code.NumBitSize) - 1)
|
v := u64 & ((1 << code.NumBitSize) - 1)
|
||||||
if v == 0 {
|
if v == 0 {
|
||||||
code = code.NextField
|
code = code.NextField
|
||||||
} else {
|
} else {
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendInt(ctx, b, p+uintptr(code.Offset), code)
|
b = appendInt(ctx, b, p, code)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendComma(ctx, b)
|
b = appendComma(ctx, b)
|
||||||
code = code.Next
|
code = code.Next
|
||||||
|
@ -2953,9 +2954,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -2994,9 +2996,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iface := ptrToInterface(code, p)
|
iface := ptrToInterface(code, p)
|
||||||
|
@ -3114,9 +3117,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -3155,9 +3159,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
|
|
@ -705,14 +705,15 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
u64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)
|
p += uintptr(code.Offset)
|
||||||
|
u64 := ptrToUint64(p, code.NumBitSize)
|
||||||
v := u64 & ((1 << code.NumBitSize) - 1)
|
v := u64 & ((1 << code.NumBitSize) - 1)
|
||||||
if v == 0 {
|
if v == 0 {
|
||||||
code = code.NextField
|
code = code.NextField
|
||||||
} else {
|
} else {
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendInt(ctx, b, p+uintptr(code.Offset), code)
|
b = appendInt(ctx, b, p, code)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendComma(ctx, b)
|
b = appendComma(ctx, b)
|
||||||
code = code.Next
|
code = code.Next
|
||||||
|
@ -2953,9 +2954,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -2994,9 +2996,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iface := ptrToInterface(code, p)
|
iface := ptrToInterface(code, p)
|
||||||
|
@ -3114,9 +3117,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -3155,9 +3159,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
|
|
@ -705,14 +705,15 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
u64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)
|
p += uintptr(code.Offset)
|
||||||
|
u64 := ptrToUint64(p, code.NumBitSize)
|
||||||
v := u64 & ((1 << code.NumBitSize) - 1)
|
v := u64 & ((1 << code.NumBitSize) - 1)
|
||||||
if v == 0 {
|
if v == 0 {
|
||||||
code = code.NextField
|
code = code.NextField
|
||||||
} else {
|
} else {
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendInt(ctx, b, p+uintptr(code.Offset), code)
|
b = appendInt(ctx, b, p, code)
|
||||||
b = append(b, '"')
|
b = append(b, '"')
|
||||||
b = appendComma(ctx, b)
|
b = appendComma(ctx, b)
|
||||||
code = code.Next
|
code = code.Next
|
||||||
|
@ -2953,9 +2954,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -2994,9 +2996,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iface := ptrToInterface(code, p)
|
iface := ptrToInterface(code, p)
|
||||||
|
@ -3114,9 +3117,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
b = appendStructKey(ctx, code, b)
|
b = appendStructKey(ctx, code, b)
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
@ -3155,9 +3159,10 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
||||||
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
if code.Flags&encoder.AnonymousHeadFlags == 0 {
|
||||||
b = appendStructHead(ctx, b)
|
b = appendStructHead(ctx, b)
|
||||||
}
|
}
|
||||||
|
p += uintptr(code.Offset)
|
||||||
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
if (code.Flags & encoder.IsNilableTypeFlags) != 0 {
|
||||||
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
if (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {
|
||||||
p = ptrToPtr(p + uintptr(code.Offset))
|
p = ptrToPtr(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
if p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {
|
||||||
|
|
Loading…
Reference in New Issue