in src/Parser.php [1932:2017]
private function parseUnaryExpressionOrHigher($parentNode) {
$token = $this->getCurrentToken();
switch ($token->kind) {
// unary-op-expression
case TokenKind::PlusToken:
case TokenKind::MinusToken:
case TokenKind::ExclamationToken:
case TokenKind::TildeToken:
return $this->parseUnaryOpExpression($parentNode);
// error-control-expression
case TokenKind::AtSymbolToken:
return $this->parseErrorControlExpression($parentNode);
// prefix-increment-expression
case TokenKind::PlusPlusToken:
// prefix-decrement-expression
case TokenKind::MinusMinusToken:
return $this->parsePrefixUpdateExpression($parentNode);
case TokenKind::ArrayCastToken:
case TokenKind::BoolCastToken:
case TokenKind::DoubleCastToken:
case TokenKind::IntCastToken:
case TokenKind::ObjectCastToken:
case TokenKind::StringCastToken:
case TokenKind::UnsetCastToken:
return $this->parseCastExpression($parentNode);
case TokenKind::OpenParenToken:
// TODO remove duplication
if ($this->lookahead(
[TokenKind::ArrayKeyword,
TokenKind::BinaryReservedWord,
TokenKind::BoolReservedWord,
TokenKind::BooleanReservedWord,
TokenKind::DoubleReservedWord,
TokenKind::IntReservedWord,
TokenKind::IntegerReservedWord,
TokenKind::FloatReservedWord,
TokenKind::ObjectReservedWord,
TokenKind::RealReservedWord,
TokenKind::StringReservedWord,
TokenKind::UnsetKeyword], TokenKind::CloseParenToken)) {
return $this->parseCastExpressionGranular($parentNode);
}
break;
/*
case TokenKind::BacktickToken:
return $this->parseShellCommandExpression($parentNode);
case TokenKind::OpenParenToken:
// TODO
// return $this->parseCastExpressionGranular($parentNode);
break;*/
// object-creation-expression (postfix-expression)
case TokenKind::NewKeyword:
return $this->parseObjectCreationExpression($parentNode);
// clone-expression (postfix-expression)
case TokenKind::CloneKeyword:
return $this->parseCloneExpression($parentNode);
case TokenKind::YieldKeyword:
case TokenKind::YieldFromKeyword:
return $this->parseYieldExpression($parentNode);
// include-expression
// include-once-expression
// require-expression
// require-once-expression
case TokenKind::IncludeKeyword:
case TokenKind::IncludeOnceKeyword:
case TokenKind::RequireKeyword:
case TokenKind::RequireOnceKeyword:
return $this->parseScriptInclusionExpression($parentNode);
case TokenKind::ThrowKeyword: // throw-statement will become an expression in php 8.0
return $this->parseThrowExpression($parentNode);
}
$expression = $this->parsePrimaryExpression($parentNode);
return $this->parsePostfixExpressionRest($expression);
}