all: use typed variant of protoreflect.ValueOf

Change-Id: I7479632b57e7c8efade12a2eb2b855e9c321adb1
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/196037
Reviewed-by: Damien Neil <dneil@google.com>
This commit is contained in:
Joe Tsai 2019-09-17 13:38:48 -07:00
parent 705acadcc7
commit 84177c9bf3
16 changed files with 179 additions and 186 deletions

View File

@ -24,14 +24,7 @@ import (
var benchV1 = flag.Bool("v1", false, "benchmark the v1 implementation") var benchV1 = flag.Bool("v1", false, "benchmark the v1 implementation")
const ( const maxRecurseLevel = 3
boolValue = true
intValue = 1 << 30
floatValue = 3.14159265
strValue = "hello world"
maxRecurseLevel = 3
)
func makeProto() *tpb.TestAllTypes { func makeProto() *tpb.TestAllTypes {
m := &tpb.TestAllTypes{} m := &tpb.TestAllTypes{}
@ -72,34 +65,34 @@ func setScalarField(m pref.Message, fd pref.FieldDescriptor, level int) {
func scalarField(kind pref.Kind) pref.Value { func scalarField(kind pref.Kind) pref.Value {
switch kind { switch kind {
case pref.BoolKind: case pref.BoolKind:
return pref.ValueOf(boolValue) return pref.ValueOfBool(true)
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
return pref.ValueOf(int32(intValue)) return pref.ValueOfInt32(1 << 30)
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
return pref.ValueOf(int64(intValue)) return pref.ValueOfInt64(1 << 30)
case pref.Uint32Kind, pref.Fixed32Kind: case pref.Uint32Kind, pref.Fixed32Kind:
return pref.ValueOf(uint32(intValue)) return pref.ValueOfUint32(1 << 30)
case pref.Uint64Kind, pref.Fixed64Kind: case pref.Uint64Kind, pref.Fixed64Kind:
return pref.ValueOf(uint64(intValue)) return pref.ValueOfUint64(1 << 30)
case pref.FloatKind: case pref.FloatKind:
return pref.ValueOf(float32(floatValue)) return pref.ValueOfFloat32(3.14159265)
case pref.DoubleKind: case pref.DoubleKind:
return pref.ValueOf(float64(floatValue)) return pref.ValueOfFloat64(3.14159265)
case pref.BytesKind: case pref.BytesKind:
return pref.ValueOf([]byte(strValue)) return pref.ValueOfBytes([]byte("hello world"))
case pref.StringKind: case pref.StringKind:
return pref.ValueOf(strValue) return pref.ValueOfString("hello world")
case pref.EnumKind: case pref.EnumKind:
return pref.ValueOf(pref.EnumNumber(42)) return pref.ValueOfEnum(42)
} }
panic(fmt.Sprintf("FieldDescriptor.Kind %v is not valid", kind)) panic(fmt.Sprintf("FieldDescriptor.Kind %v is not valid", kind))

View File

@ -345,7 +345,7 @@ func unmarshalBool(jval json.Value) (pref.Value, error) {
return pref.Value{}, unexpectedJSONError{jval} return pref.Value{}, unexpectedJSONError{jval}
} }
b, err := jval.Bool() b, err := jval.Bool()
return pref.ValueOf(b), err return pref.ValueOfBool(b), err
} }
func unmarshalInt(jval json.Value, bitSize int) (pref.Value, error) { func unmarshalInt(jval json.Value, bitSize int) (pref.Value, error) {
@ -375,9 +375,9 @@ func getInt(jval json.Value, bitSize int) (pref.Value, error) {
return pref.Value{}, err return pref.Value{}, err
} }
if bitSize == 32 { if bitSize == 32 {
return pref.ValueOf(int32(n)), nil return pref.ValueOfInt32(int32(n)), nil
} }
return pref.ValueOf(n), nil return pref.ValueOfInt64(n), nil
} }
func unmarshalUint(jval json.Value, bitSize int) (pref.Value, error) { func unmarshalUint(jval json.Value, bitSize int) (pref.Value, error) {
@ -407,9 +407,9 @@ func getUint(jval json.Value, bitSize int) (pref.Value, error) {
return pref.Value{}, err return pref.Value{}, err
} }
if bitSize == 32 { if bitSize == 32 {
return pref.ValueOf(uint32(n)), nil return pref.ValueOfUint32(uint32(n)), nil
} }
return pref.ValueOf(n), nil return pref.ValueOfUint64(n), nil
} }
func unmarshalFloat(jval json.Value, bitSize int) (pref.Value, error) { func unmarshalFloat(jval json.Value, bitSize int) (pref.Value, error) {
@ -422,19 +422,19 @@ func unmarshalFloat(jval json.Value, bitSize int) (pref.Value, error) {
switch s { switch s {
case "NaN": case "NaN":
if bitSize == 32 { if bitSize == 32 {
return pref.ValueOf(float32(math.NaN())), nil return pref.ValueOfFloat32(float32(math.NaN())), nil
} }
return pref.ValueOf(math.NaN()), nil return pref.ValueOfFloat64(math.NaN()), nil
case "Infinity": case "Infinity":
if bitSize == 32 { if bitSize == 32 {
return pref.ValueOf(float32(math.Inf(+1))), nil return pref.ValueOfFloat32(float32(math.Inf(+1))), nil
} }
return pref.ValueOf(math.Inf(+1)), nil return pref.ValueOfFloat64(math.Inf(+1)), nil
case "-Infinity": case "-Infinity":
if bitSize == 32 { if bitSize == 32 {
return pref.ValueOf(float32(math.Inf(-1))), nil return pref.ValueOfFloat32(float32(math.Inf(-1))), nil
} }
return pref.ValueOf(math.Inf(-1)), nil return pref.ValueOfFloat64(math.Inf(-1)), nil
} }
// Decode number from string. // Decode number from string.
if len(s) != len(strings.TrimSpace(s)) { if len(s) != len(strings.TrimSpace(s)) {
@ -456,16 +456,16 @@ func getFloat(jval json.Value, bitSize int) (pref.Value, error) {
return pref.Value{}, err return pref.Value{}, err
} }
if bitSize == 32 { if bitSize == 32 {
return pref.ValueOf(float32(n)), nil return pref.ValueOfFloat32(float32(n)), nil
} }
return pref.ValueOf(n), nil return pref.ValueOfFloat64(n), nil
} }
func unmarshalString(jval json.Value) (pref.Value, error) { func unmarshalString(jval json.Value) (pref.Value, error) {
if jval.Type() != json.String { if jval.Type() != json.String {
return pref.Value{}, unexpectedJSONError{jval} return pref.Value{}, unexpectedJSONError{jval}
} }
return pref.ValueOf(jval.String()), nil return pref.ValueOfString(jval.String()), nil
} }
func unmarshalBytes(jval json.Value) (pref.Value, error) { func unmarshalBytes(jval json.Value) (pref.Value, error) {
@ -485,7 +485,7 @@ func unmarshalBytes(jval json.Value) (pref.Value, error) {
if err != nil { if err != nil {
return pref.Value{}, err return pref.Value{}, err
} }
return pref.ValueOf(b), nil return pref.ValueOfBytes(b), nil
} }
func unmarshalEnum(jval json.Value, fd pref.FieldDescriptor) (pref.Value, error) { func unmarshalEnum(jval json.Value, fd pref.FieldDescriptor) (pref.Value, error) {
@ -494,7 +494,7 @@ func unmarshalEnum(jval json.Value, fd pref.FieldDescriptor) (pref.Value, error)
// Lookup EnumNumber based on name. // Lookup EnumNumber based on name.
s := jval.String() s := jval.String()
if enumVal := fd.Enum().Values().ByName(pref.Name(s)); enumVal != nil { if enumVal := fd.Enum().Values().ByName(pref.Name(s)); enumVal != nil {
return pref.ValueOf(enumVal.Number()), nil return pref.ValueOfEnum(enumVal.Number()), nil
} }
return pref.Value{}, newError("invalid enum value %q", jval) return pref.Value{}, newError("invalid enum value %q", jval)
@ -503,12 +503,12 @@ func unmarshalEnum(jval json.Value, fd pref.FieldDescriptor) (pref.Value, error)
if err != nil { if err != nil {
return pref.Value{}, err return pref.Value{}, err
} }
return pref.ValueOf(pref.EnumNumber(n)), nil return pref.ValueOfEnum(pref.EnumNumber(n)), nil
case json.Null: case json.Null:
// This is only valid for google.protobuf.NullValue. // This is only valid for google.protobuf.NullValue.
if isNullValue(fd) { if isNullValue(fd) {
return pref.ValueOf(pref.EnumNumber(0)), nil return pref.ValueOfEnum(0), nil
} }
} }
@ -640,14 +640,14 @@ func unmarshalMapKey(name string, fd pref.FieldDescriptor) (pref.MapKey, error)
kind := fd.Kind() kind := fd.Kind()
switch kind { switch kind {
case pref.StringKind: case pref.StringKind:
return pref.ValueOf(name).MapKey(), nil return pref.ValueOfString(name).MapKey(), nil
case pref.BoolKind: case pref.BoolKind:
switch name { switch name {
case "true": case "true":
return pref.ValueOf(true).MapKey(), nil return pref.ValueOfBool(true).MapKey(), nil
case "false": case "false":
return pref.ValueOf(false).MapKey(), nil return pref.ValueOfBool(false).MapKey(), nil
} }
return pref.MapKey{}, errors.New("invalid value for boolean key %q", name) return pref.MapKey{}, errors.New("invalid value for boolean key %q", name)
@ -656,28 +656,28 @@ func unmarshalMapKey(name string, fd pref.FieldDescriptor) (pref.MapKey, error)
if err != nil { if err != nil {
return pref.MapKey{}, err return pref.MapKey{}, err
} }
return pref.ValueOf(int32(n)).MapKey(), nil return pref.ValueOfInt32(int32(n)).MapKey(), nil
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
n, err := strconv.ParseInt(name, base10, b64) n, err := strconv.ParseInt(name, base10, b64)
if err != nil { if err != nil {
return pref.MapKey{}, err return pref.MapKey{}, err
} }
return pref.ValueOf(int64(n)).MapKey(), nil return pref.ValueOfInt64(int64(n)).MapKey(), nil
case pref.Uint32Kind, pref.Fixed32Kind: case pref.Uint32Kind, pref.Fixed32Kind:
n, err := strconv.ParseUint(name, base10, b32) n, err := strconv.ParseUint(name, base10, b32)
if err != nil { if err != nil {
return pref.MapKey{}, err return pref.MapKey{}, err
} }
return pref.ValueOf(uint32(n)).MapKey(), nil return pref.ValueOfUint32(uint32(n)).MapKey(), nil
case pref.Uint64Kind, pref.Fixed64Kind: case pref.Uint64Kind, pref.Fixed64Kind:
n, err := strconv.ParseUint(name, base10, b64) n, err := strconv.ParseUint(name, base10, b64)
if err != nil { if err != nil {
return pref.MapKey{}, err return pref.MapKey{}, err
} }
return pref.ValueOf(uint64(n)).MapKey(), nil return pref.ValueOfUint64(uint64(n)).MapKey(), nil
} }
panic(fmt.Sprintf("%s: invalid kind %s for map key", fd.FullName(), kind)) panic(fmt.Sprintf("%s: invalid kind %s for map key", fd.FullName(), kind))

View File

@ -261,8 +261,8 @@ func (o UnmarshalOptions) unmarshalAny(m pref.Message) error {
fdType := fds.ByNumber(fieldnum.Any_TypeUrl) fdType := fds.ByNumber(fieldnum.Any_TypeUrl)
fdValue := fds.ByNumber(fieldnum.Any_Value) fdValue := fds.ByNumber(fieldnum.Any_Value)
m.Set(fdType, pref.ValueOf(typeURL)) m.Set(fdType, pref.ValueOfString(typeURL))
m.Set(fdValue, pref.ValueOf(b)) m.Set(fdValue, pref.ValueOfBytes(b))
return nil return nil
} }
@ -541,7 +541,7 @@ func (o UnmarshalOptions) unmarshalKnownValue(m pref.Message) error {
case json.Null: case json.Null:
o.decoder.Read() o.decoder.Read()
fd := m.Descriptor().Fields().ByNumber(fieldnum.Value_NullValue) fd := m.Descriptor().Fields().ByNumber(fieldnum.Value_NullValue)
m.Set(fd, pref.ValueOf(pref.EnumNumber(0))) m.Set(fd, pref.ValueOfEnum(0))
case json.Bool: case json.Bool:
jval, err := o.decoder.Read() jval, err := o.decoder.Read()
@ -687,8 +687,8 @@ func (o UnmarshalOptions) unmarshalDuration(m pref.Message) error {
fdSeconds := fds.ByNumber(fieldnum.Duration_Seconds) fdSeconds := fds.ByNumber(fieldnum.Duration_Seconds)
fdNanos := fds.ByNumber(fieldnum.Duration_Nanos) fdNanos := fds.ByNumber(fieldnum.Duration_Nanos)
m.Set(fdSeconds, pref.ValueOf(secs)) m.Set(fdSeconds, pref.ValueOfInt64(secs))
m.Set(fdNanos, pref.ValueOf(nanos)) m.Set(fdNanos, pref.ValueOfInt32(nanos))
return nil return nil
} }
@ -871,8 +871,8 @@ func (o UnmarshalOptions) unmarshalTimestamp(m pref.Message) error {
fdSeconds := fds.ByNumber(fieldnum.Timestamp_Seconds) fdSeconds := fds.ByNumber(fieldnum.Timestamp_Seconds)
fdNanos := fds.ByNumber(fieldnum.Timestamp_Nanos) fdNanos := fds.ByNumber(fieldnum.Timestamp_Nanos)
m.Set(fdSeconds, pref.ValueOf(secs)) m.Set(fdSeconds, pref.ValueOfInt64(secs))
m.Set(fdNanos, pref.ValueOf(int32(t.Nanosecond()))) m.Set(fdNanos, pref.ValueOfInt32(int32(t.Nanosecond())))
return nil return nil
} }
@ -921,7 +921,7 @@ func (o UnmarshalOptions) unmarshalFieldMask(m pref.Message) error {
s = strings.TrimSpace(s) s = strings.TrimSpace(s)
// Convert to snake_case. Unlike encoding, no validation is done because // Convert to snake_case. Unlike encoding, no validation is done because
// it is not possible to know the original path names. // it is not possible to know the original path names.
list.Append(pref.ValueOf(strs.JSONSnakeCase(s))) list.Append(pref.ValueOfString(strs.JSONSnakeCase(s)))
} }
return nil return nil
} }

View File

@ -256,53 +256,53 @@ func unmarshalScalar(input text.Value, fd pref.FieldDescriptor) (pref.Value, err
switch kind := fd.Kind(); kind { switch kind := fd.Kind(); kind {
case pref.BoolKind: case pref.BoolKind:
if b, ok := input.Bool(); ok { if b, ok := input.Bool(); ok {
return pref.ValueOf(bool(b)), nil return pref.ValueOfBool(bool(b)), nil
} }
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
if n, ok := input.Int(b32); ok { if n, ok := input.Int(b32); ok {
return pref.ValueOf(int32(n)), nil return pref.ValueOfInt32(int32(n)), nil
} }
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
if n, ok := input.Int(b64); ok { if n, ok := input.Int(b64); ok {
return pref.ValueOf(int64(n)), nil return pref.ValueOfInt64(int64(n)), nil
} }
case pref.Uint32Kind, pref.Fixed32Kind: case pref.Uint32Kind, pref.Fixed32Kind:
if n, ok := input.Uint(b32); ok { if n, ok := input.Uint(b32); ok {
return pref.ValueOf(uint32(n)), nil return pref.ValueOfUint32(uint32(n)), nil
} }
case pref.Uint64Kind, pref.Fixed64Kind: case pref.Uint64Kind, pref.Fixed64Kind:
if n, ok := input.Uint(b64); ok { if n, ok := input.Uint(b64); ok {
return pref.ValueOf(uint64(n)), nil return pref.ValueOfUint64(uint64(n)), nil
} }
case pref.FloatKind: case pref.FloatKind:
if n, ok := input.Float(b32); ok { if n, ok := input.Float(b32); ok {
return pref.ValueOf(float32(n)), nil return pref.ValueOfFloat32(float32(n)), nil
} }
case pref.DoubleKind: case pref.DoubleKind:
if n, ok := input.Float(b64); ok { if n, ok := input.Float(b64); ok {
return pref.ValueOf(float64(n)), nil return pref.ValueOfFloat64(float64(n)), nil
} }
case pref.StringKind: case pref.StringKind:
if input.Type() == text.String { if input.Type() == text.String {
s := input.String() s := input.String()
if utf8.ValidString(s) { if utf8.ValidString(s) {
return pref.ValueOf(s), nil return pref.ValueOfString(s), nil
} }
return pref.Value{}, errors.InvalidUTF8(string(fd.FullName())) return pref.Value{}, errors.InvalidUTF8(string(fd.FullName()))
} }
case pref.BytesKind: case pref.BytesKind:
if input.Type() == text.String { if input.Type() == text.String {
return pref.ValueOf([]byte(input.String())), nil return pref.ValueOfBytes([]byte(input.String())), nil
} }
case pref.EnumKind: case pref.EnumKind:
// If input is int32, use directly. // If input is int32, use directly.
if n, ok := input.Int(b32); ok { if n, ok := input.Int(b32); ok {
return pref.ValueOf(pref.EnumNumber(n)), nil return pref.ValueOfEnum(pref.EnumNumber(n)), nil
} }
if name, ok := input.Name(); ok { if name, ok := input.Name(); ok {
// Lookup EnumNumber based on name. // Lookup EnumNumber based on name.
if enumVal := fd.Enum().Values().ByName(name); enumVal != nil { if enumVal := fd.Enum().Values().ByName(name); enumVal != nil {
return pref.ValueOf(enumVal.Number()), nil return pref.ValueOfEnum(enumVal.Number()), nil
} }
} }
default: default:
@ -488,8 +488,8 @@ func (o UnmarshalOptions) unmarshalAny(tfield [2]text.Value, m pref.Message) err
fdType := fds.ByNumber(fieldnum.Any_TypeUrl) fdType := fds.ByNumber(fieldnum.Any_TypeUrl)
fdValue := fds.ByNumber(fieldnum.Any_Value) fdValue := fds.ByNumber(fieldnum.Any_Value)
m.Set(fdType, pref.ValueOf(typeURL)) m.Set(fdType, pref.ValueOfString(typeURL))
m.Set(fdValue, pref.ValueOf(b)) m.Set(fdValue, pref.ValueOfBytes(b))
return nil return nil
} }

View File

@ -41,16 +41,16 @@ func Unmarshal(s string, k pref.Kind, evs pref.EnumValueDescriptors, f Format) (
if f == GoTag { if f == GoTag {
switch s { switch s {
case "1": case "1":
return pref.ValueOf(true), nil, nil return pref.ValueOfBool(true), nil, nil
case "0": case "0":
return pref.ValueOf(false), nil, nil return pref.ValueOfBool(false), nil, nil
} }
} else { } else {
switch s { switch s {
case "true": case "true":
return pref.ValueOf(true), nil, nil return pref.ValueOfBool(true), nil, nil
case "false": case "false":
return pref.ValueOf(false), nil, nil return pref.ValueOfBool(false), nil, nil
} }
} }
case pref.EnumKind: case pref.EnumKind:
@ -58,31 +58,31 @@ func Unmarshal(s string, k pref.Kind, evs pref.EnumValueDescriptors, f Format) (
// Go tags use the numeric form of the enum value. // Go tags use the numeric form of the enum value.
if n, err := strconv.ParseInt(s, 10, 32); err == nil { if n, err := strconv.ParseInt(s, 10, 32); err == nil {
if ev := evs.ByNumber(pref.EnumNumber(n)); ev != nil { if ev := evs.ByNumber(pref.EnumNumber(n)); ev != nil {
return pref.ValueOf(ev.Number()), ev, nil return pref.ValueOfEnum(ev.Number()), ev, nil
} }
} }
} else { } else {
// Descriptor default_value use the enum identifier. // Descriptor default_value use the enum identifier.
ev := evs.ByName(pref.Name(s)) ev := evs.ByName(pref.Name(s))
if ev != nil { if ev != nil {
return pref.ValueOf(ev.Number()), ev, nil return pref.ValueOfEnum(ev.Number()), ev, nil
} }
} }
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
if v, err := strconv.ParseInt(s, 10, 32); err == nil { if v, err := strconv.ParseInt(s, 10, 32); err == nil {
return pref.ValueOf(int32(v)), nil, nil return pref.ValueOfInt32(int32(v)), nil, nil
} }
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
if v, err := strconv.ParseInt(s, 10, 64); err == nil { if v, err := strconv.ParseInt(s, 10, 64); err == nil {
return pref.ValueOf(int64(v)), nil, nil return pref.ValueOfInt64(int64(v)), nil, nil
} }
case pref.Uint32Kind, pref.Fixed32Kind: case pref.Uint32Kind, pref.Fixed32Kind:
if v, err := strconv.ParseUint(s, 10, 32); err == nil { if v, err := strconv.ParseUint(s, 10, 32); err == nil {
return pref.ValueOf(uint32(v)), nil, nil return pref.ValueOfUint32(uint32(v)), nil, nil
} }
case pref.Uint64Kind, pref.Fixed64Kind: case pref.Uint64Kind, pref.Fixed64Kind:
if v, err := strconv.ParseUint(s, 10, 64); err == nil { if v, err := strconv.ParseUint(s, 10, 64); err == nil {
return pref.ValueOf(uint64(v)), nil, nil return pref.ValueOfUint64(uint64(v)), nil, nil
} }
case pref.FloatKind, pref.DoubleKind: case pref.FloatKind, pref.DoubleKind:
var v float64 var v float64
@ -99,17 +99,17 @@ func Unmarshal(s string, k pref.Kind, evs pref.EnumValueDescriptors, f Format) (
} }
if err == nil { if err == nil {
if k == pref.FloatKind { if k == pref.FloatKind {
return pref.ValueOf(float32(v)), nil, nil return pref.ValueOfFloat32(float32(v)), nil, nil
} else { } else {
return pref.ValueOf(float64(v)), nil, nil return pref.ValueOfFloat64(float64(v)), nil, nil
} }
} }
case pref.StringKind: case pref.StringKind:
// String values are already unescaped and can be used as is. // String values are already unescaped and can be used as is.
return pref.ValueOf(s), nil, nil return pref.ValueOfString(s), nil, nil
case pref.BytesKind: case pref.BytesKind:
if b, ok := unmarshalBytes(s); ok { if b, ok := unmarshalBytes(s); ok {
return pref.ValueOf(b), nil, nil return pref.ValueOfBytes(b), nil, nil
} }
} }
return pref.Value{}, nil, errors.New("could not parse value for %v: %q", k, s) return pref.Value{}, nil, errors.New("could not parse value for %v: %q", k, s)

View File

@ -533,7 +533,7 @@ func unmarshalDefault(b []byte, k pref.Kind, pf *File, ed pref.EnumDescriptor) d
// If we are unable to resolve the enum dependency, use a placeholder // If we are unable to resolve the enum dependency, use a placeholder
// enum value since we will not be able to parse the default value. // enum value since we will not be able to parse the default value.
if ed.IsPlaceholder() && pref.Name(b).IsValid() { if ed.IsPlaceholder() && pref.Name(b).IsValid() {
v := pref.ValueOf(pref.EnumNumber(0)) v := pref.ValueOfEnum(0)
ev := PlaceholderEnumValue(ed.FullName().Parent().Append(pref.Name(b))) ev := PlaceholderEnumValue(ed.FullName().Parent().Append(pref.Name(b)))
return DefaultValue(v, ev) return DefaultValue(v, ev)
} }
@ -561,28 +561,28 @@ func (dv *defaultValue) get(fd pref.FieldDescriptor) pref.Value {
} }
switch fd.Kind() { switch fd.Kind() {
case pref.BoolKind: case pref.BoolKind:
return pref.ValueOf(false) return pref.ValueOfBool(false)
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
return pref.ValueOf(int32(0)) return pref.ValueOfInt32(0)
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
return pref.ValueOf(int64(0)) return pref.ValueOfInt64(0)
case pref.Uint32Kind, pref.Fixed32Kind: case pref.Uint32Kind, pref.Fixed32Kind:
return pref.ValueOf(uint32(0)) return pref.ValueOfUint32(0)
case pref.Uint64Kind, pref.Fixed64Kind: case pref.Uint64Kind, pref.Fixed64Kind:
return pref.ValueOf(uint64(0)) return pref.ValueOfUint64(0)
case pref.FloatKind: case pref.FloatKind:
return pref.ValueOf(float32(0)) return pref.ValueOfFloat32(0)
case pref.DoubleKind: case pref.DoubleKind:
return pref.ValueOf(float64(0)) return pref.ValueOfFloat64(0)
case pref.StringKind: case pref.StringKind:
return pref.ValueOf(string("")) return pref.ValueOfString("")
case pref.BytesKind: case pref.BytesKind:
return pref.ValueOf([]byte(nil)) return pref.ValueOfBytes(nil)
case pref.EnumKind: case pref.EnumKind:
if evs := fd.Enum().Values(); evs.Len() > 0 { if evs := fd.Enum().Values(); evs.Len() > 0 {
return pref.ValueOf(evs.Get(0).Number()) return pref.ValueOfEnum(evs.Get(0).Number())
} }
return pref.ValueOf(pref.EnumNumber(0)) return pref.ValueOfEnum(0)
} }
} }

View File

@ -451,7 +451,7 @@ func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd pref.Des
case fieldnum.FieldDescriptorProto_JsonName: case fieldnum.FieldDescriptorProto_JsonName:
fd.L1.JSONName = JSONName(sb.MakeString(v)) fd.L1.JSONName = JSONName(sb.MakeString(v))
case fieldnum.FieldDescriptorProto_DefaultValue: case fieldnum.FieldDescriptorProto_DefaultValue:
fd.L1.Default.val = pref.ValueOf(v) // temporarily store as bytes; later resolved in resolveMessages fd.L1.Default.val = pref.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveMessages
case fieldnum.FieldDescriptorProto_TypeName: case fieldnum.FieldDescriptorProto_TypeName:
rawTypeName = v rawTypeName = v
case fieldnum.FieldDescriptorProto_Options: case fieldnum.FieldDescriptorProto_Options:
@ -544,7 +544,7 @@ func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) {
case fieldnum.FieldDescriptorProto_JsonName: case fieldnum.FieldDescriptorProto_JsonName:
xd.L2.JSONName = JSONName(sb.MakeString(v)) xd.L2.JSONName = JSONName(sb.MakeString(v))
case fieldnum.FieldDescriptorProto_DefaultValue: case fieldnum.FieldDescriptorProto_DefaultValue:
xd.L2.Default.val = pref.ValueOf(v) // temporarily store as bytes; later resolved in resolveExtensions xd.L2.Default.val = pref.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveExtensions
case fieldnum.FieldDescriptorProto_TypeName: case fieldnum.FieldDescriptorProto_TypeName:
rawTypeName = v rawTypeName = v
case fieldnum.FieldDescriptorProto_Options: case fieldnum.FieldDescriptorProto_Options:

View File

@ -76,15 +76,15 @@ var (
) )
var ( var (
boolZero = pref.ValueOf(bool(false)) boolZero = pref.ValueOfBool(false)
int32Zero = pref.ValueOf(int32(0)) int32Zero = pref.ValueOfInt32(0)
int64Zero = pref.ValueOf(int64(0)) int64Zero = pref.ValueOfInt64(0)
uint32Zero = pref.ValueOf(uint32(0)) uint32Zero = pref.ValueOfUint32(0)
uint64Zero = pref.ValueOf(uint64(0)) uint64Zero = pref.ValueOfUint64(0)
float32Zero = pref.ValueOf(float32(0)) float32Zero = pref.ValueOfFloat32(0)
float64Zero = pref.ValueOf(float64(0)) float64Zero = pref.ValueOfFloat64(0)
stringZero = pref.ValueOf(string("")) stringZero = pref.ValueOfString("")
bytesZero = pref.ValueOf([]byte(nil)) bytesZero = pref.ValueOfBytes(nil)
) )
func newSingularConverter(t reflect.Type, fd pref.FieldDescriptor) Converter { func newSingularConverter(t reflect.Type, fd pref.FieldDescriptor) Converter {
@ -376,7 +376,7 @@ type enumConverter struct {
func newEnumConverter(goType reflect.Type, fd pref.FieldDescriptor) Converter { func newEnumConverter(goType reflect.Type, fd pref.FieldDescriptor) Converter {
var def pref.Value var def pref.Value
if fd.Cardinality() == pref.Repeated { if fd.Cardinality() == pref.Repeated {
def = pref.ValueOf(fd.Enum().Values().Get(0).Number()) def = pref.ValueOfEnum(fd.Enum().Values().Get(0).Number())
} else { } else {
def = fd.Default() def = fd.Default()
} }
@ -387,7 +387,7 @@ func (c *enumConverter) PBValueOf(v reflect.Value) pref.Value {
if v.Type() != c.goType { if v.Type() != c.goType {
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
} }
return pref.ValueOf(pref.EnumNumber(v.Int())) return pref.ValueOfEnum(pref.EnumNumber(v.Int()))
} }
func (c *enumConverter) GoValueOf(v pref.Value) reflect.Value { func (c *enumConverter) GoValueOf(v pref.Value) reflect.Value {
@ -424,9 +424,9 @@ func (c *messageConverter) PBValueOf(v reflect.Value) pref.Value {
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
} }
if m, ok := v.Interface().(pref.ProtoMessage); ok { if m, ok := v.Interface().(pref.ProtoMessage); ok {
return pref.ValueOf(m.ProtoReflect()) return pref.ValueOfMessage(m.ProtoReflect())
} }
return pref.ValueOf(legacyWrapMessage(v).ProtoReflect()) return pref.ValueOfMessage(legacyWrapMessage(v).ProtoReflect())
} }
func (c *messageConverter) GoValueOf(v pref.Value) reflect.Value { func (c *messageConverter) GoValueOf(v pref.Value) reflect.Value {

View File

@ -32,7 +32,7 @@ func (c *listConverter) PBValueOf(v reflect.Value) pref.Value {
} }
pv := reflect.New(c.goType) pv := reflect.New(c.goType)
pv.Elem().Set(v) pv.Elem().Set(v)
return pref.ValueOf(&listReflect{pv, c.c}) return pref.ValueOfList(&listReflect{pv, c.c})
} }
func (c *listConverter) GoValueOf(v pref.Value) reflect.Value { func (c *listConverter) GoValueOf(v pref.Value) reflect.Value {
@ -56,11 +56,11 @@ func (c *listConverter) IsValidGo(v reflect.Value) bool {
} }
func (c *listConverter) New() pref.Value { func (c *listConverter) New() pref.Value {
return pref.ValueOf(&listReflect{reflect.New(c.goType), c.c}) return pref.ValueOfList(&listReflect{reflect.New(c.goType), c.c})
} }
func (c *listConverter) Zero() pref.Value { func (c *listConverter) Zero() pref.Value {
return pref.ValueOf(&listReflect{reflect.Zero(reflect.PtrTo(c.goType)), c.c}) return pref.ValueOfList(&listReflect{reflect.Zero(reflect.PtrTo(c.goType)), c.c})
} }
type listPtrConverter struct { type listPtrConverter struct {
@ -72,7 +72,7 @@ func (c *listPtrConverter) PBValueOf(v reflect.Value) pref.Value {
if v.Type() != c.goType { if v.Type() != c.goType {
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
} }
return pref.ValueOf(&listReflect{v, c.c}) return pref.ValueOfList(&listReflect{v, c.c})
} }
func (c *listPtrConverter) GoValueOf(v pref.Value) reflect.Value { func (c *listPtrConverter) GoValueOf(v pref.Value) reflect.Value {

View File

@ -31,7 +31,7 @@ func (c *mapConverter) PBValueOf(v reflect.Value) pref.Value {
if v.Type() != c.goType { if v.Type() != c.goType {
panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
} }
return pref.ValueOf(&mapReflect{v, c.keyConv, c.valConv}) return pref.ValueOfMap(&mapReflect{v, c.keyConv, c.valConv})
} }
func (c *mapConverter) GoValueOf(v pref.Value) reflect.Value { func (c *mapConverter) GoValueOf(v pref.Value) reflect.Value {

View File

@ -236,10 +236,10 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey,
fd.L1.Options = func() pref.ProtoMessage { fd.L1.Options = func() pref.ProtoMessage {
opts := descopts.Field.ProtoReflect().New() opts := descopts.Field.ProtoReflect().New()
if fd.L1.IsWeak { if fd.L1.IsWeak {
opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOf(true)) opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOfBool(true))
} }
if fd.L1.HasPacked { if fd.L1.HasPacked {
opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOf(fd.L1.IsPacked)) opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOfBool(fd.L1.IsPacked))
} }
return opts.Interface() return opts.Interface()
} }
@ -273,7 +273,7 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey,
md2.L2.IsMapEntry = true md2.L2.IsMapEntry = true
md2.L2.Options = func() pref.ProtoMessage { md2.L2.Options = func() pref.ProtoMessage {
opts := descopts.Message.ProtoReflect().New() opts := descopts.Message.ProtoReflect().New()
opts.Set(opts.Descriptor().Fields().ByName("map_entry"), protoreflect.ValueOf(true)) opts.Set(opts.Descriptor().Fields().ByName("map_entry"), protoreflect.ValueOfBool(true))
return opts.Interface() return opts.Interface()
} }

View File

@ -99,7 +99,7 @@ func fieldInfoForOneof(fd pref.FieldDescriptor, fs reflect.StructField, x export
} }
rv = rv.Elem().Elem().Field(0) rv = rv.Elem().Elem().Field(0)
if rv.IsNil() { if rv.IsNil() {
rv.Set(conv.GoValueOf(pref.ValueOf(conv.New().Message()))) rv.Set(conv.GoValueOf(pref.ValueOfMessage(conv.New().Message())))
} }
return conv.PBValueOf(rv) return conv.PBValueOf(rv)
}, },
@ -324,14 +324,14 @@ func fieldInfoForWeakMessage(fd pref.FieldDescriptor, weakOffset offset) fieldIn
get: func(p pointer) pref.Value { get: func(p pointer) pref.Value {
lazyInit() lazyInit()
if p.IsNil() { if p.IsNil() {
return pref.ValueOf(messageType.Zero()) return pref.ValueOfMessage(messageType.Zero())
} }
fs := p.Apply(weakOffset).WeakFields() fs := p.Apply(weakOffset).WeakFields()
m, ok := (*fs)[num] m, ok := (*fs)[num]
if !ok { if !ok {
return pref.ValueOf(messageType.Zero()) return pref.ValueOfMessage(messageType.Zero())
} }
return pref.ValueOf(m.(pref.ProtoMessage).ProtoReflect()) return pref.ValueOfMessage(m.(pref.ProtoMessage).ProtoReflect())
}, },
set: func(p pointer, v pref.Value) { set: func(p pointer, v pref.Value) {
lazyInit() lazyInit()
@ -356,7 +356,7 @@ func fieldInfoForWeakMessage(fd pref.FieldDescriptor, weakOffset offset) fieldIn
m = messageType.New().Interface().(piface.MessageV1) m = messageType.New().Interface().(piface.MessageV1)
(*fs)[num] = m (*fs)[num] = m
} }
return pref.ValueOf(m.(pref.ProtoMessage).ProtoReflect()) return pref.ValueOfMessage(m.(pref.ProtoMessage).ProtoReflect())
}, },
newMessage: func() pref.Message { newMessage: func() pref.Message {
lazyInit() lazyInit()
@ -364,7 +364,7 @@ func fieldInfoForWeakMessage(fd pref.FieldDescriptor, weakOffset offset) fieldIn
}, },
newField: func() pref.Value { newField: func() pref.Value {
lazyInit() lazyInit()
return pref.ValueOf(messageType.New()) return pref.ValueOfMessage(messageType.New())
}, },
} }
} }

View File

@ -74,5 +74,5 @@ func mergeMap(dst, src protoreflect.Map, fd protoreflect.FieldDescriptor) {
} }
func cloneBytes(v protoreflect.Value) protoreflect.Value { func cloneBytes(v protoreflect.Value) protoreflect.Value {
return protoreflect.ValueOf(append([]byte{}, v.Bytes()...)) return protoreflect.ValueOfBytes(append([]byte{}, v.Bytes()...))
} }

View File

@ -268,9 +268,9 @@ func unmarshalDefault(s string, fd protoreflect.FieldDescriptor, allowUnresolvab
} }
v, ev, err := defval.Unmarshal(s, fd.Kind(), evs, defval.Descriptor) v, ev, err := defval.Unmarshal(s, fd.Kind(), evs, defval.Descriptor)
if err != nil && allowUnresolvable && evs != nil && protoreflect.Name(s).IsValid() { if err != nil && allowUnresolvable && evs != nil && protoreflect.Name(s).IsValid() {
v = protoreflect.ValueOf(protoreflect.EnumNumber(0)) v = protoreflect.ValueOfEnum(0)
if evs.Len() > 0 { if evs.Len() > 0 {
v = protoreflect.ValueOf(evs.Get(0).Number()) v = protoreflect.ValueOfEnum(evs.Get(0).Number())
} }
ev = filedesc.PlaceholderEnumValue(fd.Enum().FullName().Parent().Append(protoreflect.Name(s))) ev = filedesc.PlaceholderEnumValue(fd.Enum().FullName().Parent().Append(protoreflect.Name(s)))
} else if err != nil { } else if err != nil {

View File

@ -188,9 +188,9 @@ func testField(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
m.Clear(fd) m.Clear(fd)
// Set to the wrong type. // Set to the wrong type.
v := pref.ValueOf("") v := pref.ValueOfString("")
if fd.Kind() == pref.StringKind { if fd.Kind() == pref.StringKind {
v = pref.ValueOf(int32(0)) v = pref.ValueOfInt32(0)
} }
if !panics(func() { if !panics(func() {
m.Set(fd, v) m.Set(fd, v)
@ -226,7 +226,7 @@ func testFieldMap(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
v := newMapValue(fd, mapv, n, nil) v := newMapValue(fd, mapv, n, nil)
mapv.Set(k, v) mapv.Set(k, v)
want.Set(k, v) want.Set(k, v)
if got, want := m.Get(fd), pref.ValueOf(want); !valueEqual(got, want) { if got, want := m.Get(fd), pref.ValueOfMap(want); !valueEqual(got, want) {
t.Errorf("after inserting %d elements to %q:\nMessage.Get(%v) = %v, want %v", i, name, num, formatValue(got), formatValue(want)) t.Errorf("after inserting %d elements to %q:\nMessage.Get(%v) = %v, want %v", i, name, num, formatValue(got), formatValue(want))
} }
} }
@ -236,7 +236,7 @@ func testFieldMap(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
nv := newMapValue(fd, mapv, 10, nil) nv := newMapValue(fd, mapv, 10, nil)
mapv.Set(k, nv) mapv.Set(k, nv)
want.Set(k, nv) want.Set(k, nv)
if got, want := m.Get(fd), pref.ValueOf(want); !valueEqual(got, want) { if got, want := m.Get(fd), pref.ValueOfMap(want); !valueEqual(got, want) {
t.Errorf("after setting element %v of %q:\nMessage.Get(%v) = %v, want %v", formatValue(k.Value()), name, num, formatValue(got), formatValue(want)) t.Errorf("after setting element %v of %q:\nMessage.Get(%v) = %v, want %v", formatValue(k.Value()), name, num, formatValue(got), formatValue(want))
} }
return true return true
@ -249,7 +249,7 @@ func testFieldMap(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
if got, want := m.Has(fd), want.Len() > 0; got != want { if got, want := m.Has(fd), want.Len() > 0; got != want {
t.Errorf("after clearing elements of %q:\nMessage.Has(%v) = %v, want %v", name, num, got, want) t.Errorf("after clearing elements of %q:\nMessage.Has(%v) = %v, want %v", name, num, got, want)
} }
if got, want := m.Get(fd), pref.ValueOf(want); !valueEqual(got, want) { if got, want := m.Get(fd), pref.ValueOfMap(want); !valueEqual(got, want) {
t.Errorf("after clearing elements of %q:\nMessage.Get(%v) = %v, want %v", name, num, formatValue(got), formatValue(want)) t.Errorf("after clearing elements of %q:\nMessage.Get(%v) = %v, want %v", name, num, formatValue(got), formatValue(want))
} }
return true return true
@ -307,7 +307,7 @@ func testFieldList(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
want.Append(v) want.Append(v)
list.Append(v) list.Append(v)
if got, want := m.Get(fd), pref.ValueOf(want); !valueEqual(got, want) { if got, want := m.Get(fd), pref.ValueOfList(want); !valueEqual(got, want) {
t.Errorf("after appending %d elements to %q:\nMessage.Get(%v) = %v, want %v", i+1, name, num, formatValue(got), formatValue(want)) t.Errorf("after appending %d elements to %q:\nMessage.Get(%v) = %v, want %v", i+1, name, num, formatValue(got), formatValue(want))
} }
} }
@ -317,7 +317,7 @@ func testFieldList(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
v := newListElement(fd, list, seed(i+10), nil) v := newListElement(fd, list, seed(i+10), nil)
want.Set(i, v) want.Set(i, v)
list.Set(i, v) list.Set(i, v)
if got, want := m.Get(fd), pref.ValueOf(want); !valueEqual(got, want) { if got, want := m.Get(fd), pref.ValueOfList(want); !valueEqual(got, want) {
t.Errorf("after setting element %d of %q:\nMessage.Get(%v) = %v, want %v", i, name, num, formatValue(got), formatValue(want)) t.Errorf("after setting element %d of %q:\nMessage.Get(%v) = %v, want %v", i, name, num, formatValue(got), formatValue(want))
} }
} }
@ -330,7 +330,7 @@ func testFieldList(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
if got, want := m.Has(fd), want.Len() > 0 || fd.IsExtension(); got != want { if got, want := m.Has(fd), want.Len() > 0 || fd.IsExtension(); got != want {
t.Errorf("after truncating %q to %d:\nMessage.Has(%v) = %v, want %v", name, n, num, got, want) t.Errorf("after truncating %q to %d:\nMessage.Has(%v) = %v, want %v", name, n, num, got, want)
} }
if got, want := m.Get(fd), pref.ValueOf(want); !valueEqual(got, want) { if got, want := m.Get(fd), pref.ValueOfList(want); !valueEqual(got, want) {
t.Errorf("after truncating %q to %d:\nMessage.Get(%v) = %v, want %v", name, n, num, formatValue(got), formatValue(want)) t.Errorf("after truncating %q to %d:\nMessage.Get(%v) = %v, want %v", name, n, num, formatValue(got), formatValue(want))
} }
} }
@ -355,9 +355,9 @@ func testFieldFloat(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
for _, v := range []float64{math.Inf(-1), math.Inf(1), math.NaN(), math.Copysign(0, -1)} { for _, v := range []float64{math.Inf(-1), math.Inf(1), math.NaN(), math.Copysign(0, -1)} {
var val pref.Value var val pref.Value
if fd.Kind() == pref.FloatKind { if fd.Kind() == pref.FloatKind {
val = pref.ValueOf(float32(v)) val = pref.ValueOfFloat32(float32(v))
} else { } else {
val = pref.ValueOf(v) val = pref.ValueOfFloat64(float64(v))
} }
m.Set(fd, val) m.Set(fd, val)
// Note that Has is true for -0. // Note that Has is true for -0.
@ -543,7 +543,7 @@ func newValue(m pref.Message, fd pref.FieldDescriptor, n seed, stack []pref.Mess
list.Append(newListElement(fd, list, minVal, stack)) list.Append(newListElement(fd, list, minVal, stack))
list.Append(newListElement(fd, list, maxVal, stack)) list.Append(newListElement(fd, list, maxVal, stack))
list.Append(newListElement(fd, list, n, stack)) list.Append(newListElement(fd, list, n, stack))
return pref.ValueOf(list) return pref.ValueOfList(list)
case fd.IsMap(): case fd.IsMap():
if n == 0 { if n == 0 {
return m.New().Get(fd) return m.New().Get(fd)
@ -553,7 +553,7 @@ func newValue(m pref.Message, fd pref.FieldDescriptor, n seed, stack []pref.Mess
mapv.Set(newMapKey(fd, minVal), newMapValue(fd, mapv, minVal, stack)) mapv.Set(newMapKey(fd, minVal), newMapValue(fd, mapv, minVal, stack))
mapv.Set(newMapKey(fd, maxVal), newMapValue(fd, mapv, maxVal, stack)) mapv.Set(newMapKey(fd, maxVal), newMapValue(fd, mapv, maxVal, stack))
mapv.Set(newMapKey(fd, n), newMapValue(fd, mapv, newSeed(n, 0), stack)) mapv.Set(newMapKey(fd, n), newMapValue(fd, mapv, newSeed(n, 0), stack))
return pref.ValueOf(mapv) return pref.ValueOfMap(mapv)
case fd.Message() != nil: case fd.Message() != nil:
//if n == 0 { //if n == 0 {
// return m.New().Get(fd) // return m.New().Get(fd)
@ -587,7 +587,7 @@ func newMapValue(fd pref.FieldDescriptor, mapv pref.Map, n seed, stack []pref.Me
func newScalarValue(fd pref.FieldDescriptor, n seed) pref.Value { func newScalarValue(fd pref.FieldDescriptor, n seed) pref.Value {
switch fd.Kind() { switch fd.Kind() {
case pref.BoolKind: case pref.BoolKind:
return pref.ValueOf(n != 0) return pref.ValueOfBool(n != 0)
case pref.EnumKind: case pref.EnumKind:
vals := fd.Enum().Values() vals := fd.Enum().Values()
var i int var i int
@ -599,85 +599,85 @@ func newScalarValue(fd pref.FieldDescriptor, n seed) pref.Value {
default: default:
i = int(n) % vals.Len() i = int(n) % vals.Len()
} }
return pref.ValueOf(vals.Get(i).Number()) return pref.ValueOfEnum(vals.Get(i).Number())
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
switch n { switch n {
case minVal: case minVal:
return pref.ValueOf(int32(math.MinInt32)) return pref.ValueOfInt32(math.MinInt32)
case maxVal: case maxVal:
return pref.ValueOf(int32(math.MaxInt32)) return pref.ValueOfInt32(math.MaxInt32)
default: default:
return pref.ValueOf(int32(n)) return pref.ValueOfInt32(int32(n))
} }
case pref.Uint32Kind, pref.Fixed32Kind: case pref.Uint32Kind, pref.Fixed32Kind:
switch n { switch n {
case minVal: case minVal:
// Only use 0 for the zero value. // Only use 0 for the zero value.
return pref.ValueOf(uint32(1)) return pref.ValueOfUint32(1)
case maxVal: case maxVal:
return pref.ValueOf(uint32(math.MaxInt32)) return pref.ValueOfUint32(math.MaxInt32)
default: default:
return pref.ValueOf(uint32(n)) return pref.ValueOfUint32(uint32(n))
} }
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
switch n { switch n {
case minVal: case minVal:
return pref.ValueOf(int64(math.MinInt64)) return pref.ValueOfInt64(math.MinInt64)
case maxVal: case maxVal:
return pref.ValueOf(int64(math.MaxInt64)) return pref.ValueOfInt64(math.MaxInt64)
default: default:
return pref.ValueOf(int64(n)) return pref.ValueOfInt64(int64(n))
} }
case pref.Uint64Kind, pref.Fixed64Kind: case pref.Uint64Kind, pref.Fixed64Kind:
switch n { switch n {
case minVal: case minVal:
// Only use 0 for the zero value. // Only use 0 for the zero value.
return pref.ValueOf(uint64(1)) return pref.ValueOfUint64(1)
case maxVal: case maxVal:
return pref.ValueOf(uint64(math.MaxInt64)) return pref.ValueOfUint64(math.MaxInt64)
default: default:
return pref.ValueOf(uint64(n)) return pref.ValueOfUint64(uint64(n))
} }
case pref.FloatKind: case pref.FloatKind:
switch n { switch n {
case minVal: case minVal:
return pref.ValueOf(float32(math.SmallestNonzeroFloat32)) return pref.ValueOfFloat32(math.SmallestNonzeroFloat32)
case maxVal: case maxVal:
return pref.ValueOf(float32(math.MaxFloat32)) return pref.ValueOfFloat32(math.MaxFloat32)
default: default:
return pref.ValueOf(1.5 * float32(n)) return pref.ValueOfFloat32(1.5 * float32(n))
} }
case pref.DoubleKind: case pref.DoubleKind:
switch n { switch n {
case minVal: case minVal:
return pref.ValueOf(float64(math.SmallestNonzeroFloat64)) return pref.ValueOfFloat64(math.SmallestNonzeroFloat64)
case maxVal: case maxVal:
return pref.ValueOf(float64(math.MaxFloat64)) return pref.ValueOfFloat64(math.MaxFloat64)
default: default:
return pref.ValueOf(1.5 * float64(n)) return pref.ValueOfFloat64(1.5 * float64(n))
} }
case pref.StringKind: case pref.StringKind:
if n == 0 { if n == 0 {
return pref.ValueOf("") return pref.ValueOfString("")
} }
return pref.ValueOf(fmt.Sprintf("%d", n)) return pref.ValueOfString(fmt.Sprintf("%d", n))
case pref.BytesKind: case pref.BytesKind:
if n == 0 { if n == 0 {
return pref.ValueOf([]byte(nil)) return pref.ValueOfBytes(nil)
} }
return pref.ValueOf([]byte{byte(n >> 24), byte(n >> 16), byte(n >> 8), byte(n)}) return pref.ValueOfBytes([]byte{byte(n >> 24), byte(n >> 16), byte(n >> 8), byte(n)})
} }
panic("unhandled kind") panic("unhandled kind")
} }
func populateMessage(m pref.Message, n seed, stack []pref.MessageDescriptor) pref.Value { func populateMessage(m pref.Message, n seed, stack []pref.MessageDescriptor) pref.Value {
if n == 0 { if n == 0 {
return pref.ValueOf(m) return pref.ValueOfMessage(m)
} }
md := m.Descriptor() md := m.Descriptor()
for _, x := range stack { for _, x := range stack {
if md == x { if md == x {
return pref.ValueOf(m) return pref.ValueOfMessage(m)
} }
} }
stack = append(stack, md) stack = append(stack, md)
@ -688,7 +688,7 @@ func populateMessage(m pref.Message, n seed, stack []pref.MessageDescriptor) pre
} }
m.Set(fd, newValue(m, fd, newSeed(n, i), stack)) m.Set(fd, newValue(m, fd, newSeed(n, i), stack))
} }
return pref.ValueOf(m) return pref.ValueOfMessage(m)
} }
func panics(f func()) (didPanic bool) { func panics(f func()) (didPanic bool) {

View File

@ -133,13 +133,13 @@ func (m *Message) Get(fd pref.FieldDescriptor) pref.Value {
} }
switch { switch {
case fd.IsMap(): case fd.IsMap():
return pref.ValueOf(&dynamicMap{desc: fd}) return pref.ValueOfMap(&dynamicMap{desc: fd})
case fd.IsList(): case fd.IsList():
return pref.ValueOf(emptyList{desc: fd}) return pref.ValueOfList(emptyList{desc: fd})
case fd.Message() != nil: case fd.Message() != nil:
return pref.ValueOf(&Message{typ: messageType{fd.Message()}}) return pref.ValueOfMessage(&Message{typ: messageType{fd.Message()}})
case fd.Kind() == pref.BytesKind: case fd.Kind() == pref.BytesKind:
return pref.ValueOf(append([]byte(nil), fd.Default().Bytes()...)) return pref.ValueOfBytes(append([]byte(nil), fd.Default().Bytes()...))
default: default:
return fd.Default() return fd.Default()
} }
@ -214,14 +214,14 @@ func (m *Message) NewField(fd pref.FieldDescriptor) pref.Value {
case fd.IsExtension(): case fd.IsExtension():
return fd.(pref.ExtensionTypeDescriptor).Type().New() return fd.(pref.ExtensionTypeDescriptor).Type().New()
case fd.IsMap(): case fd.IsMap():
return pref.ValueOf(&dynamicMap{ return pref.ValueOfMap(&dynamicMap{
desc: fd, desc: fd,
mapv: make(map[interface{}]pref.Value), mapv: make(map[interface{}]pref.Value),
}) })
case fd.IsList(): case fd.IsList():
return pref.ValueOf(&dynamicList{desc: fd}) return pref.ValueOfList(&dynamicList{desc: fd})
case fd.Message() != nil: case fd.Message() != nil:
return pref.ValueOf(NewMessage(fd.Message()).ProtoReflect()) return pref.ValueOfMessage(NewMessage(fd.Message()).ProtoReflect())
default: default:
return fd.Default() return fd.Default()
} }
@ -352,7 +352,7 @@ func (x *dynamicMap) Clear(k pref.MapKey) { delete(x.mapv, k.Interface()) }
func (x *dynamicMap) Len() int { return len(x.mapv) } func (x *dynamicMap) Len() int { return len(x.mapv) }
func (x *dynamicMap) NewValue() pref.Value { func (x *dynamicMap) NewValue() pref.Value {
if md := x.desc.MapValue().Message(); md != nil { if md := x.desc.MapValue().Message(); md != nil {
return pref.ValueOf(NewMessage(md).ProtoReflect()) return pref.ValueOfMessage(NewMessage(md).ProtoReflect())
} }
return x.desc.MapValue().Default() return x.desc.MapValue().Default()
} }
@ -474,27 +474,27 @@ func singularTypeIsValid(fd pref.FieldDescriptor, v pref.Value) error {
func newListEntry(fd pref.FieldDescriptor) pref.Value { func newListEntry(fd pref.FieldDescriptor) pref.Value {
switch fd.Kind() { switch fd.Kind() {
case pref.BoolKind: case pref.BoolKind:
return pref.ValueOf(false) return pref.ValueOfBool(false)
case pref.EnumKind: case pref.EnumKind:
return pref.ValueOf(fd.Enum().Values().Get(0).Number()) return pref.ValueOfEnum(fd.Enum().Values().Get(0).Number())
case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind: case pref.Int32Kind, pref.Sint32Kind, pref.Sfixed32Kind:
return pref.ValueOf(int32(0)) return pref.ValueOfInt32(0)
case pref.Uint32Kind, pref.Fixed32Kind: case pref.Uint32Kind, pref.Fixed32Kind:
return pref.ValueOf(uint32(0)) return pref.ValueOfUint32(0)
case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind: case pref.Int64Kind, pref.Sint64Kind, pref.Sfixed64Kind:
return pref.ValueOf(int64(0)) return pref.ValueOfInt64(0)
case pref.Uint64Kind, pref.Fixed64Kind: case pref.Uint64Kind, pref.Fixed64Kind:
return pref.ValueOf(uint64(0)) return pref.ValueOfUint64(0)
case pref.FloatKind: case pref.FloatKind:
return pref.ValueOf(float32(0)) return pref.ValueOfFloat32(0)
case pref.DoubleKind: case pref.DoubleKind:
return pref.ValueOf(float64(0)) return pref.ValueOfFloat64(0)
case pref.StringKind: case pref.StringKind:
return pref.ValueOf("") return pref.ValueOfString("")
case pref.BytesKind: case pref.BytesKind:
return pref.ValueOf(([]byte)(nil)) return pref.ValueOfBytes(nil)
case pref.MessageKind, pref.GroupKind: case pref.MessageKind, pref.GroupKind:
return pref.ValueOf(NewMessage(fd.Message()).ProtoReflect()) return pref.ValueOfMessage(NewMessage(fd.Message()).ProtoReflect())
} }
panic(errors.New("%v: unknown kind %v", fd.FullName(), fd.Kind())) panic(errors.New("%v: unknown kind %v", fd.FullName(), fd.Kind()))
} }
@ -533,14 +533,14 @@ func NewExtensionType(desc pref.ExtensionDescriptor) pref.ExtensionType {
func (xt extensionType) New() pref.Value { func (xt extensionType) New() pref.Value {
switch { switch {
case xt.desc.IsMap(): case xt.desc.IsMap():
return pref.ValueOf(&dynamicMap{ return pref.ValueOfMap(&dynamicMap{
desc: xt.desc, desc: xt.desc,
mapv: make(map[interface{}]pref.Value), mapv: make(map[interface{}]pref.Value),
}) })
case xt.desc.IsList(): case xt.desc.IsList():
return pref.ValueOf(&dynamicList{desc: xt.desc}) return pref.ValueOfList(&dynamicList{desc: xt.desc})
case xt.desc.Message() != nil: case xt.desc.Message() != nil:
return pref.ValueOf(NewMessage(xt.desc.Message())) return pref.ValueOfMessage(NewMessage(xt.desc.Message()))
default: default:
return xt.desc.Default() return xt.desc.Default()
} }
@ -549,11 +549,11 @@ func (xt extensionType) New() pref.Value {
func (xt extensionType) Zero() pref.Value { func (xt extensionType) Zero() pref.Value {
switch { switch {
case xt.desc.IsMap(): case xt.desc.IsMap():
return pref.ValueOf(&dynamicMap{desc: xt.desc}) return pref.ValueOfMap(&dynamicMap{desc: xt.desc})
case xt.desc.Cardinality() == pref.Repeated: case xt.desc.Cardinality() == pref.Repeated:
return pref.ValueOf(emptyList{desc: xt.desc}) return pref.ValueOfList(emptyList{desc: xt.desc})
case xt.desc.Message() != nil: case xt.desc.Message() != nil:
return pref.ValueOf(&Message{typ: messageType{xt.desc.Message()}}) return pref.ValueOfMessage(&Message{typ: messageType{xt.desc.Message()}})
default: default:
return xt.desc.Default() return xt.desc.Default()
} }