annotate vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@13 1 <?php
Chris@13 2
Chris@13 3 /*
Chris@13 4 * This file is part of Psy Shell.
Chris@13 5 *
Chris@13 6 * (c) 2012-2018 Justin Hileman
Chris@13 7 *
Chris@13 8 * For the full copyright and license information, please view the LICENSE
Chris@13 9 * file that was distributed with this source code.
Chris@13 10 */
Chris@13 11
Chris@13 12 namespace Psy\Reflection;
Chris@13 13
Chris@13 14 /**
Chris@13 15 * A fake ReflectionFunction but for language constructs.
Chris@13 16 */
Chris@13 17 class ReflectionLanguageConstruct extends \ReflectionFunctionAbstract
Chris@13 18 {
Chris@13 19 public $keyword;
Chris@13 20
Chris@13 21 /**
Chris@13 22 * Language construct parameter definitions.
Chris@13 23 */
Chris@13 24 private static $languageConstructs = [
Chris@13 25 'isset' => [
Chris@13 26 'var' => [],
Chris@13 27 '...' => [
Chris@13 28 'isOptional' => true,
Chris@13 29 'defaultValue' => null,
Chris@13 30 ],
Chris@13 31 ],
Chris@13 32
Chris@13 33 'unset' => [
Chris@13 34 'var' => [],
Chris@13 35 '...' => [
Chris@13 36 'isOptional' => true,
Chris@13 37 'defaultValue' => null,
Chris@13 38 ],
Chris@13 39 ],
Chris@13 40
Chris@13 41 'empty' => [
Chris@13 42 'var' => [],
Chris@13 43 ],
Chris@13 44
Chris@13 45 'echo' => [
Chris@13 46 'arg1' => [],
Chris@13 47 '...' => [
Chris@13 48 'isOptional' => true,
Chris@13 49 'defaultValue' => null,
Chris@13 50 ],
Chris@13 51 ],
Chris@13 52
Chris@13 53 'print' => [
Chris@13 54 'arg' => [],
Chris@13 55 ],
Chris@13 56
Chris@13 57 'die' => [
Chris@13 58 'status' => [
Chris@13 59 'isOptional' => true,
Chris@13 60 'defaultValue' => 0,
Chris@13 61 ],
Chris@13 62 ],
Chris@13 63
Chris@13 64 'exit' => [
Chris@13 65 'status' => [
Chris@13 66 'isOptional' => true,
Chris@13 67 'defaultValue' => 0,
Chris@13 68 ],
Chris@13 69 ],
Chris@13 70 ];
Chris@13 71
Chris@13 72 /**
Chris@13 73 * Construct a ReflectionLanguageConstruct object.
Chris@13 74 *
Chris@13 75 * @param string $keyword
Chris@13 76 */
Chris@13 77 public function __construct($keyword)
Chris@13 78 {
Chris@16 79 if (!self::isLanguageConstruct($keyword)) {
Chris@13 80 throw new \InvalidArgumentException('Unknown language construct: ' . $keyword);
Chris@13 81 }
Chris@13 82
Chris@13 83 $this->keyword = $keyword;
Chris@13 84 }
Chris@13 85
Chris@13 86 /**
Chris@13 87 * This can't (and shouldn't) do anything :).
Chris@13 88 *
Chris@13 89 * @throws \RuntimeException
Chris@13 90 */
Chris@13 91 public static function export($name)
Chris@13 92 {
Chris@13 93 throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)');
Chris@13 94 }
Chris@13 95
Chris@13 96 /**
Chris@13 97 * Get language construct name.
Chris@13 98 *
Chris@13 99 * @return string
Chris@13 100 */
Chris@13 101 public function getName()
Chris@13 102 {
Chris@13 103 return $this->keyword;
Chris@13 104 }
Chris@13 105
Chris@13 106 /**
Chris@13 107 * None of these return references.
Chris@13 108 *
Chris@13 109 * @return bool
Chris@13 110 */
Chris@13 111 public function returnsReference()
Chris@13 112 {
Chris@13 113 return false;
Chris@13 114 }
Chris@13 115
Chris@13 116 /**
Chris@13 117 * Get language construct params.
Chris@13 118 *
Chris@13 119 * @return array
Chris@13 120 */
Chris@13 121 public function getParameters()
Chris@13 122 {
Chris@13 123 $params = [];
Chris@13 124 foreach (self::$languageConstructs[$this->keyword] as $parameter => $opts) {
Chris@17 125 \array_push($params, new ReflectionLanguageConstructParameter($this->keyword, $parameter, $opts));
Chris@13 126 }
Chris@13 127
Chris@13 128 return $params;
Chris@13 129 }
Chris@13 130
Chris@13 131 /**
Chris@16 132 * Gets the file name from a language construct.
Chris@16 133 *
Chris@16 134 * (Hint: it always returns false)
Chris@16 135 *
Chris@16 136 * @return bool false
Chris@16 137 */
Chris@16 138 public function getFileName()
Chris@16 139 {
Chris@16 140 return false;
Chris@16 141 }
Chris@16 142
Chris@16 143 /**
Chris@13 144 * To string.
Chris@13 145 *
Chris@13 146 * @return string
Chris@13 147 */
Chris@13 148 public function __toString()
Chris@13 149 {
Chris@13 150 return $this->getName();
Chris@13 151 }
Chris@13 152
Chris@13 153 /**
Chris@13 154 * Check whether keyword is a (known) language construct.
Chris@13 155 *
Chris@13 156 * @param string $keyword
Chris@13 157 *
Chris@13 158 * @return bool
Chris@13 159 */
Chris@13 160 public static function isLanguageConstruct($keyword)
Chris@13 161 {
Chris@17 162 return \array_key_exists($keyword, self::$languageConstructs);
Chris@13 163 }
Chris@13 164 }