X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fpsy%2Fpsysh%2Fsrc%2FPsy%2FCodeCleaner%2FNamespacePass.php;fp=vendor%2Fpsy%2Fpsysh%2Fsrc%2FPsy%2FCodeCleaner%2FNamespacePass.php;h=40cc6bb3e218f825de2e83a8f87e896e33754239;hp=0000000000000000000000000000000000000000;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad diff --git a/vendor/psy/psysh/src/Psy/CodeCleaner/NamespacePass.php b/vendor/psy/psysh/src/Psy/CodeCleaner/NamespacePass.php new file mode 100644 index 000000000..40cc6bb3e --- /dev/null +++ b/vendor/psy/psysh/src/Psy/CodeCleaner/NamespacePass.php @@ -0,0 +1,79 @@ +cleaner = $cleaner; + } + + /** + * If this is a standalone namespace line, remember it for later. + * + * Otherwise, apply remembered namespaces to the code until a new namespace + * is encountered. + * + * @param array $nodes + */ + public function beforeTraverse(array $nodes) + { + $first = reset($nodes); + if (count($nodes) === 1 && $first instanceof NamespaceStmt && empty($first->stmts)) { + $this->setNamespace($first->name); + } else { + foreach ($nodes as $key => $node) { + if ($node instanceof NamespaceStmt) { + $this->setNamespace(null); + } elseif ($this->namespace !== null) { + $nodes[$key] = new NamespaceStmt($this->namespace, array($node)); + } + } + } + + return $nodes; + } + + /** + * Remember the namespace and (re)set the namespace on the CodeCleaner as + * well. + * + * @param null|Name $namespace + */ + private function setNamespace($namespace) + { + $this->namespace = $namespace; + $this->cleaner->setNamespace($namespace === null ? null : $namespace->parts); + } +}