Skip to content

Unexpected syntax error when nullsafe object operator used with parentheses #1127

@shufo

Description

@shufo

Context

Problems

When php code like ($value ?: null)?->someProperty; passed to parser, it throws unexpected Syntax exception.

 $  node
Welcome to Node.js v16.16.0.
Type ".help" for more information.
> const parser = require('php-parser')
undefined
> const target = `($value ?: null)?->someProperty;`;
undefined
> const eval = parser.parseEval(target)
Uncaught:
[SyntaxError: Parse Error : syntax error, unexpected '?->' (T_NULLSAFE_OBJECT_OPERATOR), expecting ';' on line 1
] {
  lineNumber: 1,
  fileName: 'eval',
  columnNumber: 16
}

But its syntax is valid in php.

 $  php -v
PHP 8.1.2-1ubuntu2.10 (cli) (built: Jan 16 2023 15:19:49) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.10, Copyright (c), by Zend Technologies

 $  cat test.php
<?php
echo ($value ?: null)?->someProperty;

 $  php --syntax-check test.php
No syntax errors detected in test.php

Repro:

test.js

const parser = require(".");
const target = `($value ?: null)?->someProperty;`;
const eval = parser.parseEval(target);
$ node test.js

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