Merge branch '2.x' into 3.x

* 2.x:
  allowed string operators as variables names in assignments
This commit is contained in:
Fabien Potencier
2019-06-03 12:16:18 +02:00
3 changed files with 26 additions and 2 deletions
+7 -1
View File
@@ -630,7 +630,13 @@ class ExpressionParser
$stream = $this->parser->getStream();
$targets = [];
while (true) {
$token = $stream->expect(/* Token::NAME_TYPE */ 5, null, 'Only variables can be assigned to');
$token = $this->parser->getCurrentToken();
if ($stream->test(/* Token::OPERATOR_TYPE */ 8) && preg_match(Lexer::REGEX_NAME, $token->getValue())) {
// in this context, string operators are variable names
$this->parser->getStream()->next();
} else {
$stream->expect(/* Token::NAME_TYPE */ 5, null, 'Only variables can be assigned to');
}
$value = $token->getValue();
if (\in_array(strtolower($value), ['true', 'false', 'none', 'null'])) {
throw new SyntaxError(sprintf('You cannot assign a value to "%s".', $value), $token->getLine(), $stream->getSourceContext());