1
0
mirror of https://github.com/danog/PHP-Parser.git synced 2024-11-26 20:04:48 +01:00

Accept a phpVersion option in emulative lexer

Testing this will require reverse emulation support.
This commit is contained in:
Nikita Popov 2020-08-01 21:56:06 +02:00
parent 61328f89da
commit 7b2ec6703f

View File

@ -34,11 +34,19 @@ REGEX;
/** @var TokenEmulatorInterface[] */
private $tokenEmulators = [];
/** @var string */
private $targetPhpVersion;
/**
* @param mixed[] $options
* @param mixed[] $options Lexer options. In addition to the usual options,
* accepts a 'phpVersion' string that specifies the
* version to emulated. Defaults to newest supported.
*/
public function __construct(array $options = [])
{
$this->targetPhpVersion = $options['phpVersion'] ?? Emulative::PHP_8_0;
unset($options['phpVersion']);
parent::__construct($options);
$this->tokenEmulators[] = new FnTokenEmulator();
@ -77,7 +85,9 @@ REGEX;
// add token emulation
foreach ($this->tokenEmulators as $tokenEmulator) {
if (version_compare(\PHP_VERSION, $tokenEmulator->getPhpVersion(), '<')
$emulatorPhpVersion = $tokenEmulator->getPhpVersion();
if (version_compare(\PHP_VERSION, $emulatorPhpVersion, '<')
&& version_compare($this->targetPhpVersion, $emulatorPhpVersion, '>=')
&& $tokenEmulator->isEmulationNeeded($code)) {
$this->tokens = $tokenEmulator->emulate($code, $this->tokens);
}