annotate vendor/psy/psysh/src/Psy/Reflection/ReflectionLanguageConstruct.php @ 7:848c88cfe644

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