/* * This file is part of Psy Shell. * * (c) 2012-2023 Justin Hileman * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Psy; use Psy\ExecutionLoop\ProcessForker; use Psy\VersionUpdater\GitHubChecker; use Psy\VersionUpdater\Installer; use Psy\VersionUpdater\SelfUpdate; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputOption; if (!\function_exists('Psy\\sh')) { /** * Command to return the eval-able code to startup PsySH. * * eval(\Psy\sh()); */ function sh(): string { if (\version_compare(\PHP_VERSION, '8.0', '<')) { return '\extract(\Psy\debug(\get_defined_vars(), isset($this) ? $this : @\get_called_class()));'; } return <<<'EOS' if (isset($this)) { \extract(\Psy\debug(\get_defined_vars(), $this)); } else { try { static::class; \extract(\Psy\debug(\get_defined_vars(), static::class)); } catch (\Error $e) { \extract(\Psy\debug(\get_defined_vars())); } } EOS; } } if (!\function_exists('Psy\\debug')) { /** * Invoke a Psy Shell from the current context. * * For example: * * foreach ($items as $item) { * \Psy\debug(get_defined_vars()); * } * * If you would like your shell interaction to affect the state of the * current context, you can extract() the values returned from this call: * * foreach ($items as $item) { * extract(\Psy\debug(get_defined_vars())); * var_dump($item); // will be whatever you set $item to in Psy Shell * } * * Optionally, supply an object as the `$bindTo` parameter. This determines * the value `$this` will have in the shell, and sets up class scope so that * private and protected members are accessible: * * class Foo { * function bar() { * \Psy\debug(get_defined_vars(), $this); * } * } * * For the static equivalent, pass a class name as the `$bindTo` parameter. * This makes `self` work in the shell, and sets up static scope so that * private and protected static members are accessible: * * class Foo { * static function bar() { * \Psy\debug(get_defined_vars(), get_called_class()); * } * } * * @param array $vars Scope variables from the calling context (default: []) * @param object|string $bindTo Bound object ($this) or class (self) value for the shell * * @return array Scope variables from the debugger session */ function debug(array $vars = [], $bindTo = null): array { echo \PHP_EOL; $sh = new Shell(); $sh->setScopeVariables($vars); // Show a couple of lines of call context for the debug session. // // @todo come up with a better way of doing this which doesn't involve injecting input :-P if ($sh->has('whereami')) { $sh->addInput('whereami -n2', true); } if (\is_string($bindTo)) { $sh->setBoundClass($bindTo); } elseif ($bindTo !== null) { $sh->setBoundObject($bindTo); } $sh->run(); return $sh->getScopeVariables(false); } } if (!\function_exists('Psy\\info')) { /** * Get a bunch of debugging info about the current PsySH environment and * configuration. * * If a Configuration param is passed, that configuration is stored and * used for the current shell session, and no debugging info is returned. * * @param Configuration|null $config * * @return array|null */ function info(Configuration $config = null) { static $lastConfig; if ($config !== null) { $lastConfig = $config; return; } $prettyPath = function ($path) { return $path; }; $homeDir = (new ConfigPaths())->homeDir(); if ($homeDir && $homeDir = \rtrim($homeDir, '/')) { $homePattern = '#^'.\preg_quote($homeDir, '#').'/#'; $prettyPath = function ($path) use ($homePattern) { if (\is_string($path)) { return \preg_replace($homePattern, '~/', $path); } else { return $path; } }; } $config = $lastConfig ?: new Configuration(); $configEnv = (isset($_SERVER['PSYSH_CONFIG']) && $_SERVER['PSYSH_CONFIG']) ? $_SERVER['PSYSH_CONFIG'] : false; if ($configEnv === false && \PHP_SAPI === 'cli-server') { $configEnv = \getenv('PSYSH_CONFIG'); } $shellInfo = [ 'PsySH version' => Shell::VERSION, ]; $core = [ 'PHP version' => \PHP_VERSION, 'OS' => \PHP_OS, 'default includes' => $config->getDefaultIncludes(), 'require semicolons' => $config->requireSemicolons(), 'strict types' => $config->strictTypes(), 'error logging level' => $config->errorLoggingLevel(), 'config file' => [ 'default config file' => $prettyPath($config->getConfigFile()), 'local config file' => $prettyPath($config->getLocalConfigFile()), 'PSYSH_CONFIG env' => $prettyPath($configEnv), ], // 'config dir' => $config->getConfigDir(), // 'data dir' => $config->getDataDir(), // 'runtime dir' => $config->getRuntimeDir(), ]; // Use an explicit, fresh update check here, rather than relying on whatever is in $config. $checker = new GitHubChecker(); $updateAvailable = null; $latest = null; try { $updateAvailable = !$checker->isLatest(); $latest = $checker->getLatest(); } catch (\Throwable $e) { } $updates = [ 'update available' => $updateAvailable, 'latest release version' => $latest, 'update check interval' => $config->getUpdateCheck(), 'update cache file' => $prettyPath($config->getUpdateCheckCacheFile()), ]; $input = [ 'interactive mode' => $config->interactiveMode(), 'input interactive' => $config->getInputInteractive(), 'yolo' => $config->yolo(), ]; if ($config->hasReadline()) { $info = \readline_info(); $readline = [ 'readline available' => true, 'readline enabled' => $config->useReadline(), 'readline service' => \get_class($config->getReadline()), ]; if (isset($info['library_version'])) { $readline['readline library'] = $info['library_version']; } if (isset($info['readline_name']) && $info['readline_name'] !== '') { $readline['readline name'] = $info['readline_name']; } } else { $readline = [ 'readline available' => false, ]; } $output = [ 'color mode' => $config->colorMode(), 'output decorated' => $config->getOutputDecorated(), 'output verbosity' => $config->verbosity(), 'output pager' => $config->getPager(), ]; $theme = $config->theme(); // TODO: show styles (but only if they're different than default?) $output['theme'] = [ 'compact' => $theme->compact(), 'prompt' => $theme->prompt(), 'bufferPrompt' => $theme->bufferPrompt(), 'replayPrompt' => $theme->replayPrompt(), 'returnValue' => $theme->returnValue(), ]; $pcntl = [ 'pcntl available' => ProcessForker::isPcntlSupported(), 'posix available' => ProcessForker::isPosixSupported(), ]; if ($disabledPcntl = ProcessForker::disabledPcntlFunctions()) { $pcntl['disabled pcntl functions'] = $disabledPcntl; } if ($disabledPosix = ProcessForker::disabledPosixFunctions()) { $pcntl['disabled posix functions'] = $disabledPosix; } $pcntl['use pcntl'] = $config->usePcntl(); $history = [ 'history file' => $prettyPath($config->getHistoryFile()), 'history size' => $config->getHistorySize(), 'erase duplicates' => $config->getEraseDuplicates(), ]; $docs = [ 'manual db file' => $prettyPath($config->getManualDbFile()), 'sqlite available' => true, ]; try { if ($db = $config->getManualDb()) { if ($q = $db->query('SELECT * FROM meta;')) { $q->setFetchMode(\PDO::FETCH_KEY_PAIR); $meta = $q->fetchAll(); foreach ($meta as $key => $val) { switch ($key) { case 'built_at': $d = new \DateTime('@'.$val); $val = $d->format(\DateTime::RFC2822); break; } $key = 'db '.\str_replace('_', ' ', $key); $docs[$key] = $val; } } else { $docs['db schema'] = '0.1.0'; } } } catch (Exception\RuntimeException $e) { if ($e->getMessage() === 'SQLite PDO driver not found') { $docs['sqlite available'] = false; } else { throw $e; } } $autocomplete = [ 'tab completion enabled' => $config->useTabCompletion(), 'bracketed paste' => $config->useBracketedPaste(), ]; // Shenanigans, but totally justified. try { if ($shell = Sudo::fetchProperty($config, 'shell')) { $shellClass = \get_class($shell); if ($shellClass !== 'Psy\\Shell') { $shellInfo = [ 'PsySH version' => $shell::VERSION, 'Shell class' => $shellClass, ]; } try { $core['loop listeners'] = \array_map('get_class', Sudo::fetchProperty($shell, 'loopListeners')); } catch (\ReflectionException $e) { // shrug } $core['commands'] = \array_map('get_class', $shell->all()); try { $autocomplete['custom matchers'] = \array_map('get_class', Sudo::fetchProperty($shell, 'matchers')); } catch (\ReflectionException $e) { // shrug } } } catch (\ReflectionException $e) { // shrug } // @todo Show Presenter / custom casters. return \array_merge($shellInfo, $core, \compact('updates', 'pcntl', 'input', 'readline', 'output', 'history', 'docs', 'autocomplete')); } } if (!\function_exists('Psy\\bin')) { /** * `psysh` command line executable. * * @return \Closure */ function bin(): \Closure { return function () { if (!isset($_SERVER['PSYSH_IGNORE_ENV']) || !$_SERVER['PSYSH_IGNORE_ENV']) { if (\defined('HHVM_VERSION_ID')) { \fwrite(\STDERR, 'PsySH v0.11 and higher does not support HHVM. Install an older version, or set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } if (\PHP_VERSION_ID < 70000) { \fwrite(\STDERR, 'PHP 7.0.0 or higher is required. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } if (\PHP_VERSION_ID > 89999) { \fwrite(\STDERR, 'PHP 9 or higher is not supported. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } if (!\function_exists('json_encode')) { \fwrite(\STDERR, 'The JSON extension is required. Please install it. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } if (!\function_exists('token_get_all')) { \fwrite(\STDERR, 'The Tokenizer extension is required. Please install it. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.'.\PHP_EOL); exit(1); } } $usageException = null; $shellIsPhar = Shell::isPhar(); $input = new ArgvInput(); try { $input->bind(new InputDefinition(\array_merge(Configuration::getInputOptions(), [ new InputOption('help', 'h', InputOption::VALUE_NONE), new InputOption('version', 'V', InputOption::VALUE_NONE), new InputOption('self-update', 'u', InputOption::VALUE_NONE), new InputArgument('include', InputArgument::IS_ARRAY), ]))); } catch (\RuntimeException $e) { $usageException = $e; } try { $config = Configuration::fromInput($input); } catch (\InvalidArgumentException $e) { $usageException = $e; } // Handle --help if (!isset($config) || $usageException !== null || $input->getOption('help')) { if ($usageException !== null) { echo $usageException->getMessage().\PHP_EOL.\PHP_EOL; } $version = Shell::getVersionHeader(false); $argv = isset($_SERVER['argv']) ? $_SERVER['argv'] : []; $name = $argv ? \basename(\reset($argv)) : 'psysh'; echo <<getOption('version')) { echo Shell::getVersionHeader($config->useUnicode()).\PHP_EOL; exit(0); } // Handle --self-update if ($input->getOption('self-update')) { if (!$shellIsPhar) { \fwrite(\STDERR, 'The --self-update option can only be used with with a phar based install.'.\PHP_EOL); exit(1); } $selfUpdate = new SelfUpdate(new GitHubChecker(), new Installer()); $result = $selfUpdate->run($input, $config->getOutput()); exit($result); } $shell = new Shell($config); // Pass additional arguments to Shell as 'includes' $shell->setIncludes($input->getArgument('include')); try { // And go! $shell->run(); } catch (\Throwable $e) { \fwrite(\STDERR, $e->getMessage().\PHP_EOL); // @todo this triggers the "exited unexpectedly" logic in the // ForkingLoop, so we can't exit(1) after starting the shell... // fix this :) // exit(1); } }; } } jak wypłacić pieniądze z ice casino – redecorhome.com

jak wypłacić pieniądze z ice casino

Oferta Bonusowa Najlepszego Kasyna Online

Każdy początkujący powinien aktywować bonusy, aby błyskawicznie uzyskać pierwszą wygraną w grach hazardowych firmy. Bonusy i kody atrakcyjne Ice casino jest to opłacalne narzędzie pomocnicze, wraz z którego musi korzystać każdy klient platformy hazardowej. Żeby zbadać dostępne propozycji w Ice casino, gracz icecasino login otwiera system bonusowy. Pracownicy kasyna określają również reguły reklamy, aby fani […]

Oferta Bonusowa Najlepszego Kasyna Online Read More »

Ice Casino Pięćdziesięciu Free Spins Bez Depozytu W Book Of Fallen

Wydaje Się owo specjalna propozycja obejmująca aż 50 bezpłatnych spinów albo 25 euro wyjąwszy depozytu. Wiele osób zdaje sobie sprawę, że kasyna od okresu do periodu oferują ciekawe bonusy i zniżki. Jednym wraz z najpopularniejszych bonusów jest Ice casino system kodowania promocji wyjąwszy depozytu. Funkcje Serwisowe Zapewniające Terminowe Poparcie Wydaje Się Być to swego wariantu

Ice Casino Pięćdziesięciu Free Spins Bez Depozytu W Book Of Fallen Read More »

Zobacz Dostępne Rabaty Kasynowe!

Przed rejestracją w Ice Casino ważne jest, aby użytkownicy dokładnie przeczytali i zrozumieli wzory. Są owo odrzucić jedynie żargon prawny, za pośrednictwem który możesz przebrnąć, ale zawierają ważne informacje, które powinieneś wiedzieć, zanim zaczniesz grać. W naszym punkcie omówimy niektóre z ważnych terminów, o których powinieneś wiedzieć jako użytkownik Ice Casino. W Ice casino, oprócz

Zobacz Dostępne Rabaty Kasynowe! Read More »

Ice Casino Logowanie ? Instrukcja Od Czasu Onlinecasinoprofy

Cała strategia wydaje się prędka i najczęściej utrzymuje od kilku dni do do granic możliwości dwóch dni roboczych. Należy również pamiętać, że każdy premia gotówkowy ulega warunkowi 40-krotnego obrotu, a free spinami należy obrócić 30-krotnie. Wybierzesz metodę, wpisujesz kwotę (minimum 30 PLN), zatwierdzasz i skończone – lada od czasu razu objawia się na rachunku bankowym.

Ice Casino Logowanie ? Instrukcja Od Czasu Onlinecasinoprofy Read More »

Ice Casino Oficjalna Strona Graj W Ice Kasyno Nasz Kraj

Tak naprawdę to powinieneś wypełnić tylko 2 pola — wpisz link e-mail, jakiego potrzebujesz używać na konieczności postępowania w własnym kasynie (to będzie później Twój w ICE Casino login), a poniżej hasło. Zwróć też uwagę, że możesz użyć możliwości zapisu zbytnio pomocą sieci społecznościowych takowych w jaki sposób na przykład Yahoo, Twitter bądź Facebook. Mogę

Ice Casino Oficjalna Strona Graj W Ice Kasyno Nasz Kraj Read More »

Ice Casino: Nadprogram 1500 Plus 270 Darmowych Spinów

Stronica miała niedawno swoją premierę narzędzie Fast RTP, więc upewnij się. Olympus Infinity Reels prowadzona jest się w starożytnej Grecji i dzierży motyw o mitologii greckiej, że masz pojęcie. Według prostu odwiedź kasyno zbyt pośrednictwem przeglądarki stacjonarnej lub mobilnej i dostosuje się mechanicznie, ludzie otwierają się na hazard i zostawiają zbyt sobą konwencjonalne tabu. E-mail może zająć trochę czasu, dzięki którym zawodnicy mogą zbierać punkty zbyt grę

Ice Casino: Nadprogram 1500 Plus 270 Darmowych Spinów Read More »

Ice Casino Oficjalna Witryna Graj W Ice Kasyno Nasze Państwo عطور ستور متجر عطور

Kody te są dostępne na stronie kasyna i mogą być użyte przez zawodników, by uzyskać poboczne korzyści, tego typu jakim sposobem bezpłatne spiny, bonusy z brakiem depozytu i odmienne. Ice Casino oferuje również bonus wyjąwszy depozytu, który umożliwia graczom używanie z kasyna, odrzucić musząc dokonać depozytu. Ten premia wydaje się świetny dla zawodników, którzy chcą

Ice Casino Oficjalna Witryna Graj W Ice Kasyno Nasze Państwo عطور ستور متجر عطور Read More »

Ice Casino Kod Bonusowy Wybierz Swoją Ofertę I Odbierz Swój Bonus

Trzeba wybrać tę, która emituje się przystępniejsza, a następnie potwierdzić wybór, klikając guzik „Odbierz kod promocyjny”. Kasyno internetowe ma w swej palecie mnóstwo różnych ofert promocyjnych. Zawodnicy otrzymują pełen pakiet najlepszych bonusów, które są uzupełniane przeróżnymi oryginalnymi, tymczasowymi promocjami, zapewniającymi, że w każdej sytuacji można bawić się wraz z jakimś dodatkiem. Opisywany na niniejszej witrynie

Ice Casino Kod Bonusowy Wybierz Swoją Ofertę I Odbierz Swój Bonus Read More »