| Index: third_party/protobuf/src/google/protobuf/util/internal/proto_writer.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/util/internal/proto_writer.cc b/third_party/protobuf/src/google/protobuf/util/internal/proto_writer.cc
|
| index 47e0009ec369ac7577f7e6b72de6e771cc891071..36b7941095e695a26d9af410d43b58b86ccbb212 100644
|
| --- a/third_party/protobuf/src/google/protobuf/util/internal/proto_writer.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/util/internal/proto_writer.cc
|
| @@ -447,9 +447,7 @@ ProtoWriter* ProtoWriter::StartObject(StringPiece name) {
|
| return this;
|
| }
|
|
|
| - WriteTag(*field);
|
| - element_.reset(new ProtoElement(element_.release(), field, *type, false));
|
| - return this;
|
| + return StartObjectField(*field, *type);
|
| }
|
|
|
| ProtoWriter* ProtoWriter::EndObject() {
|
| @@ -488,8 +486,7 @@ ProtoWriter* ProtoWriter::StartList(StringPiece name) {
|
| return this;
|
| }
|
|
|
| - element_.reset(new ProtoElement(element_.release(), field, *type, true));
|
| - return this;
|
| + return StartListField(*field, *type);
|
| }
|
|
|
| ProtoWriter* ProtoWriter::EndList() {
|
| @@ -518,84 +515,128 @@ ProtoWriter* ProtoWriter::RenderDataPiece(StringPiece name,
|
| return this;
|
| }
|
|
|
| + return RenderPrimitiveField(*field, *type, data);
|
| +}
|
| +
|
| +bool ProtoWriter::ValidOneof(const google::protobuf::Field& field,
|
| + StringPiece unnormalized_name) {
|
| + if (element_ == NULL) return true;
|
| +
|
| + if (field.oneof_index() > 0) {
|
| + if (element_->IsOneofIndexTaken(field.oneof_index())) {
|
| + InvalidValue(
|
| + "oneof",
|
| + StrCat("oneof field '",
|
| + element_->type().oneofs(field.oneof_index() - 1),
|
| + "' is already set. Cannot set '", unnormalized_name, "'"));
|
| + return false;
|
| + }
|
| + element_->TakeOneofIndex(field.oneof_index());
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +bool ProtoWriter::IsRepeated(const google::protobuf::Field& field) {
|
| + return field.cardinality() ==
|
| + google::protobuf::Field_Cardinality_CARDINALITY_REPEATED;
|
| +}
|
| +
|
| +ProtoWriter* ProtoWriter::StartObjectField(const google::protobuf::Field& field,
|
| + const google::protobuf::Type& type) {
|
| + WriteTag(field);
|
| + element_.reset(new ProtoElement(element_.release(), &field, type, false));
|
| + return this;
|
| +}
|
| +
|
| +ProtoWriter* ProtoWriter::StartListField(const google::protobuf::Field& field,
|
| + const google::protobuf::Type& type) {
|
| + element_.reset(new ProtoElement(element_.release(), &field, type, true));
|
| + return this;
|
| +}
|
| +
|
| +ProtoWriter* ProtoWriter::RenderPrimitiveField(
|
| + const google::protobuf::Field& field, const google::protobuf::Type& type,
|
| + const DataPiece& data) {
|
| + Status status;
|
| +
|
| // Pushing a ProtoElement and then pop it off at the end for 2 purposes:
|
| // error location reporting and required field accounting.
|
| - element_.reset(new ProtoElement(element_.release(), field, *type, false));
|
| + element_.reset(new ProtoElement(element_.release(), &field, type, false));
|
|
|
| - if (field->kind() == google::protobuf::Field_Kind_TYPE_UNKNOWN ||
|
| - field->kind() == google::protobuf::Field_Kind_TYPE_MESSAGE) {
|
| - InvalidValue(field->type_url().empty()
|
| - ? google::protobuf::Field_Kind_Name(field->kind())
|
| - : field->type_url(),
|
| + if (field.kind() == google::protobuf::Field_Kind_TYPE_UNKNOWN ||
|
| + field.kind() == google::protobuf::Field_Kind_TYPE_MESSAGE) {
|
| + InvalidValue(field.type_url().empty()
|
| + ? google::protobuf::Field_Kind_Name(field.kind())
|
| + : field.type_url(),
|
| data.ValueAsStringOrDefault(""));
|
| element_.reset(element()->pop());
|
| return this;
|
| }
|
|
|
| - switch (field->kind()) {
|
| + switch (field.kind()) {
|
| case google::protobuf::Field_Kind_TYPE_INT32: {
|
| - status = WriteInt32(field->number(), data, stream_.get());
|
| + status = WriteInt32(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_SFIXED32: {
|
| - status = WriteSFixed32(field->number(), data, stream_.get());
|
| + status = WriteSFixed32(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_SINT32: {
|
| - status = WriteSInt32(field->number(), data, stream_.get());
|
| + status = WriteSInt32(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_FIXED32: {
|
| - status = WriteFixed32(field->number(), data, stream_.get());
|
| + status = WriteFixed32(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_UINT32: {
|
| - status = WriteUInt32(field->number(), data, stream_.get());
|
| + status = WriteUInt32(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_INT64: {
|
| - status = WriteInt64(field->number(), data, stream_.get());
|
| + status = WriteInt64(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_SFIXED64: {
|
| - status = WriteSFixed64(field->number(), data, stream_.get());
|
| + status = WriteSFixed64(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_SINT64: {
|
| - status = WriteSInt64(field->number(), data, stream_.get());
|
| + status = WriteSInt64(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_FIXED64: {
|
| - status = WriteFixed64(field->number(), data, stream_.get());
|
| + status = WriteFixed64(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_UINT64: {
|
| - status = WriteUInt64(field->number(), data, stream_.get());
|
| + status = WriteUInt64(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_DOUBLE: {
|
| - status = WriteDouble(field->number(), data, stream_.get());
|
| + status = WriteDouble(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_FLOAT: {
|
| - status = WriteFloat(field->number(), data, stream_.get());
|
| + status = WriteFloat(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_BOOL: {
|
| - status = WriteBool(field->number(), data, stream_.get());
|
| + status = WriteBool(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_BYTES: {
|
| - status = WriteBytes(field->number(), data, stream_.get());
|
| + status = WriteBytes(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_STRING: {
|
| - status = WriteString(field->number(), data, stream_.get());
|
| + status = WriteString(field.number(), data, stream_.get());
|
| break;
|
| }
|
| case google::protobuf::Field_Kind_TYPE_ENUM: {
|
| - status = WriteEnum(field->number(), data,
|
| - typeinfo_->GetEnumByTypeUrl(field->type_url()),
|
| + status = WriteEnum(field.number(), data,
|
| + typeinfo_->GetEnumByTypeUrl(field.type_url()),
|
| stream_.get());
|
| break;
|
| }
|
| @@ -604,7 +645,7 @@ ProtoWriter* ProtoWriter::RenderDataPiece(StringPiece name,
|
| }
|
|
|
| if (!status.ok()) {
|
| - InvalidValue(google::protobuf::Field_Kind_Name(field->kind()),
|
| + InvalidValue(google::protobuf::Field_Kind_Name(field.kind()),
|
| status.error_message());
|
| }
|
|
|
| @@ -612,29 +653,6 @@ ProtoWriter* ProtoWriter::RenderDataPiece(StringPiece name,
|
| return this;
|
| }
|
|
|
| -bool ProtoWriter::ValidOneof(const google::protobuf::Field& field,
|
| - StringPiece unnormalized_name) {
|
| - if (element_ == NULL) return true;
|
| -
|
| - if (field.oneof_index() > 0) {
|
| - if (element_->IsOneofIndexTaken(field.oneof_index())) {
|
| - InvalidValue(
|
| - "oneof",
|
| - StrCat("oneof field '",
|
| - element_->type().oneofs(field.oneof_index() - 1),
|
| - "' is already set. Cannot set '", unnormalized_name, "'"));
|
| - return false;
|
| - }
|
| - element_->TakeOneofIndex(field.oneof_index());
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool ProtoWriter::IsRepeated(const google::protobuf::Field& field) {
|
| - return field.cardinality() ==
|
| - google::protobuf::Field_Cardinality_CARDINALITY_REPEATED;
|
| -}
|
| -
|
| const google::protobuf::Field* ProtoWriter::BeginNamed(StringPiece name,
|
| bool is_list) {
|
| if (invalid_depth_ > 0) {
|
|
|