Mercurial > hg > isophonics-drupal-site
diff vendor/psy/psysh/src/Psy/Reflection/ReflectionLanguageConstruct.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/psy/psysh/src/Psy/Reflection/ReflectionLanguageConstruct.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,152 @@ +<?php + +/* + * This file is part of Psy Shell. + * + * (c) 2012-2017 Justin Hileman + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Psy\Reflection; + +/** + * A fake ReflectionFunction but for language constructs. + */ +class ReflectionLanguageConstruct extends \ReflectionFunctionAbstract +{ + public $keyword; + + /** + * Language construct parameter definitions. + */ + private static $languageConstructs = array( + 'isset' => array( + 'var' => array(), + '...' => array( + 'isOptional' => true, + 'defaultValue' => null, + ), + ), + + 'unset' => array( + 'var' => array(), + '...' => array( + 'isOptional' => true, + 'defaultValue' => null, + ), + ), + + 'empty' => array( + 'var' => array(), + ), + + 'echo' => array( + 'arg1' => array(), + '...' => array( + 'isOptional' => true, + 'defaultValue' => null, + ), + ), + + 'print' => array( + 'arg' => array(), + ), + + 'die' => array( + 'status' => array( + 'isOptional' => true, + 'defaultValue' => 0, + ), + ), + + 'exit' => array( + 'status' => array( + 'isOptional' => true, + 'defaultValue' => 0, + ), + ), + ); + + /** + * Construct a ReflectionLanguageConstruct object. + * + * @param string $name + */ + public function __construct($keyword) + { + if (self::isLanguageConstruct($keyword)) { + throw new \InvalidArgumentException('Unknown language construct: ' . $keyword); + } + + $this->keyword = $keyword; + } + + /** + * This can't (and shouldn't) do anything :). + * + * @throws \RuntimeException + */ + public static function export($name) + { + throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)'); + } + + /** + * Get language construct name. + * + * @return string + */ + public function getName() + { + return $this->keyword; + } + + /** + * None of these return references. + * + * @return bool + */ + public function returnsReference() + { + return false; + } + + /** + * Get language construct params. + * + * @return + */ + public function getParameters() + { + $params = array(); + foreach (self::$languageConstructs[$this->keyword] as $parameter => $opts) { + array_push($params, new ReflectionLanguageConstructParameter($this->keyword, $parameter, $opts)); + } + + return $params; + } + + /** + * To string. + * + * @return string + */ + public function __toString() + { + return $this->getName(); + } + + /** + * Check whether keyword is a (known) language construct. + * + * @param $keyword + * + * @return bool + */ + public static function isLanguageConstruct($keyword) + { + return array_key_exists($keyword, self::$languageConstructs); + } +}