PATH:
home
/
lab2454c
/
netxzero.com
/
carbon-credit
/
vendor
/
nikic
/
php-parser
/
lib
/
PhpParser
/
Lexer
/
TokenEmulator
<?php declare(strict_types=1); namespace PhpParser\Lexer\TokenEmulator; abstract class KeywordEmulator extends TokenEmulator { abstract function getKeywordString(): string; abstract function getKeywordToken(): int; public function isEmulationNeeded(string $code): bool { return strpos(strtolower($code), $this->getKeywordString()) !== false; } protected function isKeywordContext(array $tokens, int $pos): bool { $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $pos); return $previousNonSpaceToken === null || $previousNonSpaceToken[0] !== \T_OBJECT_OPERATOR; } public function emulate(string $code, array $tokens): array { $keywordString = $this->getKeywordString(); foreach ($tokens as $i => $token) { if ($token[0] === T_STRING && strtolower($token[1]) === $keywordString && $this->isKeywordContext($tokens, $i)) { $tokens[$i][0] = $this->getKeywordToken(); } } return $tokens; } /** * @param mixed[] $tokens * @return mixed[]|null */ private function getPreviousNonSpaceToken(array $tokens, int $start) { for ($i = $start - 1; $i >= 0; --$i) { if ($tokens[$i][0] === T_WHITESPACE) { continue; } return $tokens[$i]; } return null; } public function reverseEmulate(string $code, array $tokens): array { $keywordToken = $this->getKeywordToken(); foreach ($tokens as $i => $token) { if ($token[0] === $keywordToken) { $tokens[$i][0] = \T_STRING; } } return $tokens; } }
[-] FlexibleDocStringEmulator.php
[edit]
[-] NullsafeTokenEmulator.php
[edit]
[-] ReverseEmulator.php
[edit]
[+]
..
[-] MatchTokenEmulator.php
[edit]
[-] KeywordEmulator.php
[edit]
[-] AttributeEmulator.php
[edit]
[-] EnumTokenEmulator.php
[edit]
[-] CoaleseEqualTokenEmulator.php
[edit]
[-] ReadonlyTokenEmulator.php
[edit]
[-] FnTokenEmulator.php
[edit]
[-] NumericLiteralSeparatorEmulator.php
[edit]
[-] ExplicitOctalEmulator.php
[edit]
[-] TokenEmulator.php
[edit]