mirror of
https://github.com/nikic/PHP-Parser.git
synced 2025-01-17 23:28:15 +01:00
0dd85ebd34
This makes us match the PHP 8.2 handling of readonly. Handling of "readonly" functions is moved to the parser to allow distinguishing them from readonly properties with DNF types. We have to uglify the grammar to avoid some shift/reduce conflicts. Thank you WordPress.
32 lines
976 B
PHP
32 lines
976 B
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace PhpParser\Lexer\TokenEmulator;
|
|
|
|
use PhpParser\PhpVersion;
|
|
|
|
/*
|
|
* In PHP 8.1, "readonly(" was special cased in the lexer in order to support functions with
|
|
* name readonly. In PHP 8.2, this may conflict with readonly properties having a DNF type. For
|
|
* this reason, PHP 8.2 instead treats this as T_READONLY and then handles it specially in the
|
|
* parser. This emulator only exists to handle this special case, which is skipped by the
|
|
* PHP 8.1 ReadonlyTokenEmulator.
|
|
*/
|
|
class ReadonlyFunctionTokenEmulator extends KeywordEmulator {
|
|
public function getKeywordString(): string {
|
|
return 'readonly';
|
|
}
|
|
|
|
public function getKeywordToken(): int {
|
|
return \T_READONLY;
|
|
}
|
|
|
|
public function getPhpVersion(): PhpVersion {
|
|
return PhpVersion::fromComponents(8, 2);
|
|
}
|
|
|
|
public function reverseEmulate(string $code, array $tokens): array {
|
|
// Don't bother
|
|
return $tokens;
|
|
}
|
|
}
|