protobuf-go/internal
Damien Neil d4f0800c42 all: make handling of zero-value composites more consistent
We occasionally need to work with immutable, empty lists, maps, and
messages. Notably, Message.Get on an empty repeated field will return a
"frozen" empty value.

Move handling of these immutable, zero-length composites into Converter,
to unify the behavior of regular and extension fields.

Add a Zero method to Converter, MessageType, and ExtensionType, to
provide a consistent way to get an empty, frozen value of a composite
type. Adding this method to the public {Message,Extension}Type
interfaces does increase our API surface, but lets us (for example)
cleanly represent an empty map as a nil map rather than a non-nil
one wrapped in a frozenMap type.

Drop the frozen{List,Map,Message} types as no longer necessary.
(These types did have support for creating a read-only view of a
non-empty value, but we are not currently using that feature.)

Change-Id: Ia76f149d591da07b40ce75b7404a7ab8a60cb9d8
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/189339
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
2019-08-08 18:20:25 +00:00
..
cmd runtime/protoimpl, cmd/protoc-gen-go: support release versioning 2019-08-07 22:59:30 +00:00
descfmt reflect/protoreflect: add FileDescriptor.SourceLocations 2019-07-13 00:15:59 +00:00
descopts internal/filedesc, internal/filetype: initial commit 2019-06-20 02:06:11 +00:00
detrand
encoding internal/encoding/text: replace use of regular expression in decoding 2019-07-23 22:08:16 +00:00
errors all: remove non-fatal UTF-8 validation errors (and non-fatal in general) 2019-06-20 20:55:13 +00:00
fieldnum
filedesc internal/filedesc, internal/filetype: rename {Desc,Type}Builder as Builder 2019-08-05 23:43:37 +00:00
filetype all: make handling of zero-value composites more consistent 2019-08-08 18:20:25 +00:00
flags
impl all: make handling of zero-value composites more consistent 2019-08-08 18:20:25 +00:00
mapsort all: refactor Converter 2019-08-05 22:33:14 +00:00
pragma
set internal/set: remove Int32s, Int64s, and Strings 2019-04-03 22:53:35 +00:00
strs all: support enforce_utf8 override 2019-07-15 19:53:05 +00:00
testprotos runtime/protoimpl, cmd/protoc-gen-go: support release versioning 2019-08-07 22:59:30 +00:00