You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Instead of doing return, insert an `if` block to skip emitting zero fields.
This also allows the check to be inserted at any level.
Fixes#376
Emitted code:
```Go
// MarshalMsg implements msgp.Marshaler
func (z TypeSamples) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize())
o = msgp.AppendArrayHeader(o, uint32(len(z)))
for zb0004 := range z {
// check for omitted fields
zb0001Len := uint32(2)
var zb0001Mask uint8 /* 2 bits */
_ = zb0001Mask
if z[zb0004].K == 0 {
zb0001Len--
zb0001Mask |= 0x1
}
if z[zb0004].V == 0 {
zb0001Len--
zb0001Mask |= 0x2
}
// variable map header, size zb0001Len
o = append(o, 0x80|uint8(zb0001Len))
// skip if no fields are to be emitted
if zb0001Len != 0 {
if (zb0001Mask & 0x1) == 0 { // if not omitted
// string "k"
o = append(o, 0xa1, 0x6b)
o = msgp.AppendUint32(o, z[zb0004].K)
}
if (zb0001Mask & 0x2) == 0 { // if not omitted
// string "v"
o = append(o, 0xa1, 0x76)
o = msgp.AppendUint32(o, z[zb0004].V)
}
}
}
return
}
```
If only 1 field, the check is omitted (and there is similar behavior on clearomitted).
0 commit comments