aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Symonds <dsymonds@golang.org>2013-09-25 11:54:08 +1000
committerDavid Symonds <dsymonds@golang.org>2013-09-25 11:54:08 +1000
commit4a2eeb5f0114c9bb4797c96249326ff5417f3d15 (patch)
treeaba2d0a08f64b8dec889ceab427705b6ba60b809
parent1cb9013ade0675cdb8d6739dade6cb6717f43b9c (diff)
downloadprotobuf-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.go10
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}
}
}
}