Skip to content

Cannot parse some_fn(namespace\foo()) #292

Closed
@TysonAndre

Description

@TysonAndre

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions