Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix omitempty on aliased types #377

Merged
merged 2 commits into from
Oct 29, 2024

Commits on Oct 29, 2024

  1. Fix omitempty on aliased types

    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 tinylib#376
    
    Emitted code:
    
    ```
    // MarshalMsg implements msgp.Marshaler
    func (z TypeSample) MarshalMsg(b []byte) (o []byte, err error) {
    	o = msgp.Require(b, z.Msgsize())
    	// check for omitted fields
    	zb0001Len := uint32(2)
    	var zb0001Mask uint8 /* 2 bits */
    	_ = zb0001Mask
    	if z.K == 0 {
    		zb0001Len--
    		zb0001Mask |= 0x1
    	}
    	if z.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.K)
    		}
    		if (zb0001Mask & 0x2) == 0 { // if not omitted
    			// string "v"
    			o = append(o, 0xa1, 0x76)
    			o = msgp.AppendUint32(o, z.V)
    		}
    	}
    	return
    }
    ```
    
    If only 1 field, the check is omitted (and there is similar behavior on clearomitted).
    klauspost committed Oct 29, 2024
    Configuration menu
    Copy the full SHA
    ef7633c View commit details
    Browse the repository at this point in the history
  2. Lower case comment

    klauspost committed Oct 29, 2024
    Configuration menu
    Copy the full SHA
    41d5a7e View commit details
    Browse the repository at this point in the history