diff --git a/src/Parser.php b/src/Parser.php index bb6b635a..f9a8c109 100644 --- a/src/Parser.php +++ b/src/Parser.php @@ -2066,10 +2066,19 @@ private function parseSimpleVariableFn() { $variable->dollar = $this->eat1(TokenKind::DollarToken); $token = $this->getCurrentToken(); - $variable->name = - $token->kind === TokenKind::OpenBraceToken ? - $this->parseBracedExpression($variable) : - $this->parseSimpleVariable($variable); + switch ($token->kind) { + case TokenKind::OpenBraceToken: + $variable->name = $this->parseBracedExpression($variable); + break; + case TokenKind::VariableName: + case TokenKind::StringVarname: + case TokenKind::DollarToken: + $variable->name = $this->parseSimpleVariable($variable); + break; + default: + $variable->name = new MissingToken(TokenKind::VariableName, $token->fullStart); + break; + } } elseif ($token->kind === TokenKind::VariableName || $token->kind === TokenKind::StringVarname) { // TODO consider splitting into dollar and name. // StringVarname is the variable name without $, used in a template string e.g. `"${foo}"` @@ -2089,7 +2098,6 @@ private function parseYieldExpression($parentNode) { TokenKind::YieldFromKeyword, TokenKind::YieldKeyword ); - $yieldExpression->arrayElement = $this->parseArrayElement($yieldExpression); return $yieldExpression; } diff --git a/tests/cases/parser/variables6.php b/tests/cases/parser/variables6.php new file mode 100644 index 00000000..dabc696a --- /dev/null +++ b/tests/cases/parser/variables6.php @@ -0,0 +1,3 @@ +