Closed
Description
This is valid PHP, but parsing fails for this case.
php > var_export(namespace\is_string('x'));
true
Possibly caused by #165
Pretty-printed output of tolerant-php-parser: (unexpected MissingToken for closeParen)
» internal/dump_fallback_ast.php 'var_export(namespace\foo());'
Node\SourceFileNode
statementList: Node\Statement\ExpressionStatement
expression: Node\Expression\CallExpression
callableExpression: Node\QualifiedName
nameParts: Token: Name(2): "var_export"
openParen: Token: OpenParenToken(203): "("
closeParen: MissingToken: CloseParenToken(204): ""
semicolon: MissingToken: SemicolonToken(237): ""
statementList: Node\Statement\ExpressionStatement
expression: Node\Expression\CallExpression
callableExpression: Node\QualifiedName
relativeSpecifier: Node\RelativeSpecifier
namespaceKeyword: Token: NamespaceKeyword(146): "namespace"
backslash: Token: BackslashToken(255): "\\"
nameParts: Token: Name(2): "foo"
openParen: Token: OpenParenToken(203): "("
closeParen: Token: CloseParenToken(204): ")"
semicolon: MissingToken: SemicolonToken(237): ""
statementList: SkippedToken: CloseParenToken(204): ")"
statementList: Node\Statement\EmptyStatement
semicolon: Token: SemicolonToken(237): ";"
endOfFileToken: Token: EndOfFileToken(1): ""
The same issue is also seen with global constants (e.g. when parsing src/PhpTokenizer.php):
» php internal/dump_fallback_ast.php '$x = [namespace\T_COALESCE_EQUAL => 2];'
Node\SourceFileNode
statementList: Node\Statement\ExpressionStatement
expression: Node\Expression\AssignmentExpression
leftOperand: Node\Expression\Variable
name: Token: VariableName(3): "$x"
operator: Token: EqualsToken(238): " ="
rightOperand: Node\Expression\ArrayCreationExpression
openParenOrBracket: Token: OpenBracketToken(201): " ["
closeParenOrBracket: MissingToken: CloseBracketToken(202): ""
semicolon: MissingToken: SemicolonToken(237): ""
statementList: Node\Statement\ExpressionStatement
expression: Node\QualifiedName
relativeSpecifier: Node\RelativeSpecifier
namespaceKeyword: Token: NamespaceKeyword(146): "namespace"
backslash: Token: BackslashToken(255): "\\"
nameParts: Token: Name(2): "T_COALESCE_EQUAL"
semicolon: MissingToken: SemicolonToken(237): ""
statementList: SkippedToken: DoubleArrowToken(257): " =>"
statementList: Node\Statement\ExpressionStatement
expression: Node\NumericLiteral
children: Token: IntegerLiteralToken(416): " 2"
semicolon: MissingToken: SemicolonToken(237): ""
statementList: SkippedToken: CloseBracketToken(202): "]"
statementList: Node\Statement\EmptyStatement
semicolon: Token: SemicolonToken(237): ";"
endOfFileToken: Token: EndOfFileToken(1): ""
Metadata
Metadata
Assignees
Labels
No labels