+++ /dev/null
-<?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);
- }
-}