goprotobuf: remove unsafe buffer scratch allocator
This is part of the work towards making protobufs run on App Engine.
By the way, it's faster now.
Before:
proto_test.BenchmarkUnmarshal 20000 87053 ns/op
After:
proto_test.BenchmarkUnmarshal 20000 84825 ns/op
R=dsymonds, rsc, ken, r
CC=golang-dev
http://codereview.appspot.com/5310048
diff --git a/proto/extensions.go b/proto/extensions.go
index d329b90..f1c52cc 100644
--- a/proto/extensions.go
+++ b/proto/extensions.go
@@ -31,7 +31,6 @@
package proto
-
/*
* Types and routines for supporting protocol buffer extensions.
*/
@@ -200,14 +199,11 @@
props.Init(t, "irrelevant_name", extension.Tag, 0)
base := unsafe.New(t)
- var sbase uintptr
if t.Elem().Kind() == reflect.Struct {
- // props.dec will be dec_struct_message, which does not refer to sbase.
+ // props.dec will be dec_struct_message.
*(*unsafe.Pointer)(base) = unsafe.New(t.Elem())
- } else {
- sbase = uintptr(unsafe.New(t.Elem()))
}
- if err := props.dec(o, props, uintptr(base), sbase); err != nil {
+ if err := props.dec(o, props, uintptr(base)); err != nil {
return nil, err
}
return unsafe.Unreflect(t, base), nil