Allow single-element string/flag lists without []

As syntactic sugar string and flag lists no longer need to be enclosed
in brackets when they have exactly one element.
This commit is contained in:
Ingo Weinhold
2011-11-25 06:18:31 +01:00
parent 2df5441165
commit c53e9146c2
+15 -8
View File
@@ -79,7 +79,8 @@ private:
BPackageArchitecture* value); BPackageArchitecture* value);
void _ParseVersionValue(BPackageVersion* value, void _ParseVersionValue(BPackageVersion* value,
bool releaseIsOptional); bool releaseIsOptional);
void _ParseList(ListElementParser& elementParser); void _ParseList(ListElementParser& elementParser,
bool allowSingleNonListElement);
void _ParseStringList(BObjectList<BString>* value, void _ParseStringList(BObjectList<BString>* value,
bool allowQuotedStrings = true); bool allowQuotedStrings = true);
void _ParseResolvableList( void _ParseResolvableList(
@@ -412,11 +413,17 @@ BPackageInfo::Parser::_ParseVersionValue(BPackageVersion* value,
void void
BPackageInfo::Parser::_ParseList(ListElementParser& elementParser) BPackageInfo::Parser::_ParseList(ListElementParser& elementParser,
bool allowSingleNonListElement)
{ {
Token openBracket = _NextToken(); Token openBracket = _NextToken();
if (openBracket.type != TOKEN_OPEN_BRACKET) if (openBracket.type != TOKEN_OPEN_BRACKET) {
throw ParseError("expected start of list ('[')", openBracket.pos); if (!allowSingleNonListElement)
throw ParseError("expected start of list ('[')", openBracket.pos);
elementParser(openBracket);
return;
}
bool needComma = false; bool needComma = false;
while (true) { while (true) {
@@ -472,7 +479,7 @@ BPackageInfo::Parser::_ParseStringList(BObjectList<BString>* value,
} }
} stringParser(value, allowQuotedStrings); } stringParser(value, allowQuotedStrings);
_ParseList(stringParser); _ParseList(stringParser, true);
} }
@@ -505,7 +512,7 @@ BPackageInfo::Parser::_ParseFlags()
} }
} flagParser; } flagParser;
_ParseList(flagParser); _ParseList(flagParser, true);
return flagParser.flags; return flagParser.flags;
} }
@@ -587,7 +594,7 @@ BPackageInfo::Parser::_ParseResolvableList(
} }
} resolvableParser(*this, value); } resolvableParser(*this, value);
_ParseList(resolvableParser); _ParseList(resolvableParser, false);
} }
@@ -639,7 +646,7 @@ BPackageInfo::Parser::_ParseResolvableExprList(
} }
} resolvableExpressionParser(*this, value); } resolvableExpressionParser(*this, value);
_ParseList(resolvableExpressionParser); _ParseList(resolvableExpressionParser, false);
} }