|
|
@@ -567,6 +567,9 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
|
|
if err := p.readAny(key, props.mkeyprop); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
+ if err := p.consumeOptionalSeparator(); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
if err := p.consumeToken("value"); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -576,6 +579,9 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
|
|
if err := p.readAny(val, props.mvalprop); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
+ if err := p.consumeOptionalSeparator(); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
if err := p.consumeToken(terminator); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -605,14 +611,10 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // For backward compatibility, permit a semicolon or comma after a field.
|
|
|
- tok = p.next()
|
|
|
- if tok.err != nil {
|
|
|
- return tok.err
|
|
|
- }
|
|
|
- if tok.value != ";" && tok.value != "," {
|
|
|
- p.back()
|
|
|
+ if err := p.consumeOptionalSeparator(); err != nil {
|
|
|
+ return err
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
if reqCount > 0 {
|
|
|
@@ -621,6 +623,19 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
|
|
return reqFieldErr
|
|
|
}
|
|
|
|
|
|
+// consumeOptionalSeparator consumes an optional semicolon or comma.
|
|
|
+// It is used in readStruct to provide backward compatibility.
|
|
|
+func (p *textParser) consumeOptionalSeparator() error {
|
|
|
+ tok := p.next()
|
|
|
+ if tok.err != nil {
|
|
|
+ return tok.err
|
|
|
+ }
|
|
|
+ if tok.value != ";" && tok.value != "," {
|
|
|
+ p.back()
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
func (p *textParser) readAny(v reflect.Value, props *Properties) error {
|
|
|
tok := p.next()
|
|
|
if tok.err != nil {
|