private function parseListExpression()
{
$this->tokenStack->push();
$token = $this->consumeToken(Tokens::T_LIST);
$this->consumeComments();
$list = $this->builder->buildAstListExpression($token->image);
$this->consumeToken(Tokens::T_PARENTHESIS_OPEN);
$this->consumeComments();
while (($tokenType = $this->tokenizer->peek()) !== Tokenizer::T_EOF) {
// The variable is optional:
// list(, , , , $something) = ...;
// is valid.
switch ($tokenType) {
case Tokens::T_COMMA:
$this->consumeToken(Tokens::T_COMMA);
$this->consumeComments();
break;
case Tokens::T_PARENTHESIS_CLOSE:
break 2;
case Tokens::T_LIST:
$list->addChild($this->parseListExpression());
$this->consumeComments();
break;
default:
$list->addChild($this->parseVariableOrConstantOrPrimaryPrefix());
$this->consumeComments();
break;
}
}
$this->consumeToken(Tokens::T_PARENTHESIS_CLOSE);
return $this->setNodePositionsAndReturn($list);
}