Browse Source

codec: put defer calls in closure - as runtime optimizes defer with no params

Ugorji Nwoke 7 years ago
parent
commit
f623015d6c
2 changed files with 2 additions and 2 deletions
  1. 1 1
      codec/decode.go
  2. 1 1
      codec/encode.go

+ 1 - 1
codec/decode.go

@@ -2402,7 +2402,7 @@ func (d *Decoder) naked() *decNaked {
 // Note: we allow nil values in the stream anywhere except for map keys.
 // A nil value in the encoded stream where a map key is expected is treated as an error.
 func (d *Decoder) Decode(v interface{}) (err error) {
-	defer d.deferred(&err)
+	defer func() { d.deferred(&err) }() // put in closure, as runtime optimizes defer with no params
 	d.MustDecode(v)
 	return
 }

+ 1 - 1
codec/encode.go

@@ -1224,7 +1224,7 @@ func (e *Encoder) ResetBytes(out *[]byte) {
 // Some formats support symbols (e.g. binc) and will properly encode the string
 // only once in the stream, and use a tag to refer to it thereafter.
 func (e *Encoder) Encode(v interface{}) (err error) {
-	defer e.deferred(&err)
+	defer func() { e.deferred(&err) }() // put in closure, as runtime optimizes defer with no params
 	e.MustEncode(v)
 	return
 }