mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-01-01 03:14:16 +00:00
bc534a98a5
The purego tag (see https://golang.org/issue/23172) is a community agreed upon signal that a given build environment does not support unsafe. The appengine environment is supposed to respect this tag, but does not properly do so. Add this tag back in until they fix their environment. Change-Id: I9a70062be4339c2e1a93cac31d387698c561b8aa Reviewed-on: https://go-review.googlesource.com/c/154743 Reviewed-by: Damien Neil <dneil@google.com>
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
// Copyright 2018 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build purego appengine
|
|
|
|
package protoreflect
|
|
|
|
import "github.com/golang/protobuf/v2/internal/pragma"
|
|
|
|
type valueType int
|
|
|
|
const (
|
|
nilType valueType = iota
|
|
boolType
|
|
int32Type
|
|
int64Type
|
|
uint32Type
|
|
uint64Type
|
|
float32Type
|
|
float64Type
|
|
stringType
|
|
bytesType
|
|
enumType
|
|
ifaceType
|
|
)
|
|
|
|
// value is a union where only one type can be represented at a time.
|
|
// This uses a distinct field for each type. This is type safe in Go, but
|
|
// occupies more memory than necessary (72B).
|
|
type value struct {
|
|
pragma.DoNotCompare // 0B
|
|
|
|
typ valueType // 8B
|
|
num uint64 // 8B
|
|
str string // 16B
|
|
bin []byte // 24B
|
|
iface interface{} // 16B
|
|
}
|
|
|
|
func valueOfString(v string) Value {
|
|
return Value{typ: stringType, str: v}
|
|
}
|
|
func valueOfBytes(v []byte) Value {
|
|
return Value{typ: bytesType, bin: v}
|
|
}
|
|
func valueOfIface(v interface{}) Value {
|
|
return Value{typ: ifaceType, iface: v}
|
|
}
|
|
|
|
func (v Value) getString() string {
|
|
return v.str
|
|
}
|
|
func (v Value) getBytes() []byte {
|
|
return v.bin
|
|
}
|
|
func (v Value) getIface() interface{} {
|
|
return v.iface
|
|
}
|