Skip to content

Commit

Permalink
don't emit location for label unless label is present
Browse files Browse the repository at this point in the history
  • Loading branch information
jhump committed Jul 24, 2019
1 parent 455440f commit 38c4a42
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
18 changes: 10 additions & 8 deletions src/google/protobuf/compiler/parser.cc
Expand Up @@ -902,10 +902,8 @@ bool Parser::ParseMessageField(FieldDescriptorProto* field,
const LocationRecorder& field_location,
const FileDescriptorProto* containing_file) {
{
LocationRecorder location(field_location,
FieldDescriptorProto::kLabelFieldNumber);
FieldDescriptorProto::Label label;
if (ParseLabel(&label, containing_file)) {
if (ParseLabel(&label, field_location, containing_file)) {
field->set_label(label);
if (label == FieldDescriptorProto::LABEL_OPTIONAL &&
syntax_identifier_ == "proto3") {
Expand Down Expand Up @@ -2206,18 +2204,22 @@ bool Parser::ParseMethodOptions(const LocationRecorder& parent_location,
// -------------------------------------------------------------------

bool Parser::ParseLabel(FieldDescriptorProto::Label* label,
const LocationRecorder& field_location,
const FileDescriptorProto* containing_file) {
if (!LookingAt("optional") && !LookingAt("repeated") && !LookingAt("required")) {
return false;
}
LocationRecorder location(field_location,
FieldDescriptorProto::kLabelFieldNumber);
if (TryConsume("optional")) {
*label = FieldDescriptorProto::LABEL_OPTIONAL;
return true;
} else if (TryConsume("repeated")) {
*label = FieldDescriptorProto::LABEL_REPEATED;
return true;
} else if (TryConsume("required")) {
} else {
Consume("required");
*label = FieldDescriptorProto::LABEL_REQUIRED;
return true;
}
return false;
return true;
}

bool Parser::ParseType(FieldDescriptorProto::Type* type,
Expand Down
1 change: 1 addition & 0 deletions src/google/protobuf/compiler/parser.h
Expand Up @@ -440,6 +440,7 @@ class PROTOBUF_EXPORT Parser {
// Parse "required", "optional", or "repeated" and fill in "label"
// with the value. Returns true if such a label is consumed.
bool ParseLabel(FieldDescriptorProto::Label* label,
const LocationRecorder& field_location,
const FileDescriptorProto* containing_file);

// Parse a type name and fill in "type" (if it is a primitive) or
Expand Down

0 comments on commit 38c4a42

Please sign in to comment.