diff options
author | David Symonds <dsymonds@golang.org> | 2013-09-25 11:54:08 +1000 |
---|---|---|
committer | David Symonds <dsymonds@golang.org> | 2013-09-25 11:54:08 +1000 |
commit | 4a2eeb5f0114c9bb4797c96249326ff5417f3d15 (patch) | |
tree | aba2d0a08f64b8dec889ceab427705b6ba60b809 | |
parent | 1cb9013ade0675cdb8d6739dade6cb6717f43b9c (diff) | |
download | protobuf-4a2eeb5f0114c9bb4797c96249326ff5417f3d15.tar.gz |
goprotobuf: Fix performance regression in proto encoding for the common case where we get ErrNil.
R=r
CC=golang-dev
https://codereview.appspot.com/13882044
-rw-r--r-- | proto/encode.go | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/proto/encode.go b/proto/encode.go index d49ab84..1cc62e9 100644 --- a/proto/encode.go +++ b/proto/encode.go @@ -587,11 +587,13 @@ func (o *Buffer) enc_struct(t reflect.Type, prop *StructProperties, base structP p := prop.Prop[i] if p.enc != nil { err := p.enc(o, p, base) - if err != nil && !state.shouldContinue(err, p) { - if err != ErrNil { + if err != nil { + if err == ErrNil { + if p.Required && state.err == nil { + state.err = &ErrRequiredNotSet{p.Name} + } + } else if !state.shouldContinue(err, p) { return err - } else if p.Required && state.err == nil { - state.err = &ErrRequiredNotSet{p.Name} } } } |