ÿØÿà JFIF ÿá Exif MM * ÿÛ C
Server IP : 199.250.214.225 / Your IP : 3.145.179.153 Web Server : Apache System : Linux vps64074.inmotionhosting.com 3.10.0-1160.105.1.vz7.214.3 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : nicngo5 ( 1001) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /home/nicngo5/funds/vendor/psy/psysh/src/Psy/CodeCleaner/ |
Upload File : |
<?php /* * This file is part of Psy Shell. * * (c) 2012-2015 Justin Hileman * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Psy\CodeCleaner; use PhpParser\Node; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified as FullyQualifiedName; use PhpParser\Node\Stmt\Namespace_ as NamespaceStmt; use PhpParser\Node\Stmt\Use_ as UseStmt; /** * Provide implicit use statements for subsequent execution. * * The use statement pass remembers the last use statement line encountered: * * use Foo\Bar as Baz; * * ... which it then applies implicitly to all future evaluated code, until the * current namespace is replaced by another namespace. */ class UseStatementPass extends NamespaceAwarePass { private $aliases = array(); private $lastAliases = array(); private $lastNamespace = null; /** * Re-load the last set of use statements on re-entering a namespace. * * This isn't how namespaces normally work, but because PsySH has to spin * up a new namespace for every line of code, we do this to make things * work like you'd expect. * * @param Node $node */ public function enterNode(Node $node) { if ($node instanceof NamespaceStmt) { // If this is the same namespace as last namespace, let's do ourselves // a favor and reload all the aliases... if (strtolower($node->name) === strtolower($this->lastNamespace)) { $this->aliases = $this->lastAliases; } } } /** * If this statement is a namespace, forget all the aliases we had. * * If it's a use statement, remember the alias for later. Otherwise, apply * remembered aliases to the code. * * @param Node $node */ public function leaveNode(Node $node) { if ($node instanceof UseStmt) { // Store a reference to every "use" statement, because we'll need // them in a bit. foreach ($node->uses as $use) { $this->aliases[strtolower($use->alias)] = $use->name; } return false; } elseif ($node instanceof NamespaceStmt) { // Start fresh, since we're done with this namespace. $this->lastNamespace = $node->name; $this->lastAliases = $this->aliases; $this->aliases = array(); } else { foreach ($node as $name => $subNode) { if ($subNode instanceof Name) { // Implicitly thunk all aliases. if ($replacement = $this->findAlias($subNode)) { $node->$name = $replacement; } } } return $node; } } /** * Find class/namespace aliases. * * @param Name $name * * @return FullyQualifiedName|null */ private function findAlias(Name $name) { $that = strtolower($name); foreach ($this->aliases as $alias => $prefix) { if ($that === $alias) { return new FullyQualifiedName($prefix->toString()); } elseif (substr($that, 0, strlen($alias) + 1) === $alias . '\\') { return new FullyQualifiedName($prefix->toString() . substr($name, strlen($alias))); } } } }