|
|
|
@ -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") { |
|
|
|
@ -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, |
|
|
|
|