/* * 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); } }; } } Greece Escorts Directory – Escorts – Συνοδοί στην Ελλάδα, Συνοδοί στην Αθήνα κατάλογος συνοδών
Close
H LOLA GDE είναι μια καλλονή Ρωσίδα γεμάτη αισθησιασμό και έτοιμη για παιχνιδάκια καυτά. Μια Ρωσίδα που σπάει τον πάγο και η γεμάτη ενέργεια της θα σε μαγέψει . Escort Athens R
12 hours ago
LOLA GOLDEN DIAMOND ESCORT
ΚΛΕΙΣΤΕ ΡΑΝΤΕΒΟΥ ΤΩΡΑ ‎6974.307.060 6974.307.085 – 6974.306.870 Η Swiss escort Eva το πανύψηλο αυτό μοντέλο έρχεται για να ξεσηκώσει τον αντρικό σου κόσμο! Mε το έμφυτο σεξουαλικό της τα
12 hours ago
EVA GDE 6974307060
Η KARINA GDE είναι το κορίτσι της διπλανής πόρτας, η γειτόνισσα που φαντασιώνεσαι ότι έρχεται μεσάνυχτα να ζητήσει λίγο ζάχαρι και μένει στα όνειρα σου. Μια φλογερή γυν
12 hours ago
KARINA GDE ESCORT UKRANIAN
H escort LATIN ESTELLA GDE είναι μια νέα προσθήκη επιτυχία του πρακτορείου μας καθότι έρχετε με πολύ καλές συστάσεις από πρακτορείου του Λονδίνου και πολύ καλές κριτικές. Μ
12 hours ago
ESTELLA GDE
H escort TAYLOR GDE είναι μια συνοδός που ανήκει στις VIP απατήσεις σου. Με αναλογίες μοντέλου και εκρηκτικό ταπεραμέντο είναι μια luxury επιλογή που αξίζει τα χρήματα της. Inc
12 hours ago
TAYLOR GDE
Το escort tours Nicole είναι μια γλυκιά ύπαρξη από τη Ρωσία με όρεξη για έρωτα και για περιπέτειες. Αφέσου στα χάδια της και στο γλυκό της χαμόγελο. Με ένα τέλειο σώμα λεπτό
12 hours ago
NICOLE GOLDEN DIAMOND ESCORT
H RENATA ESCORT GDE είναι μια Ουκρανή πανδαισία που θα μείνει αξέχαστη. Το πρόσωπο της διπλανής πόρτας , μια σεξυ γειτονισα που θα εκπληρώσει κάθε φαντασίωση σου. Escort Athens UKRA
12 hours ago
RENATA GDE 6974307060
H escort LIA GDE είναι μια φλογερή γυναίκα με ταπεραμέντο , μια γυναίκα που με το παιδικό προσωπάκι της θα σε γλυκάνει και με το σεξυ κορμί της θα σε τρελάνει. Ένα θυληκό
12 hours ago
LIA GOLDEN DIAMOND ESCORT
ΚΛΕΙΣΤΕ ΡΑΝΤΕΒΟΥ ΤΩΡΑ 6974.307.060 6974.307.085 6974.306.870 Η Latin escort Maya είναι ένα ξέφρενο παιχνιδιάρικο μωρό που τρελαίνεται για σεξ και για αντρική συντροφιά. Πάρε την αγκαλιά
12 hours ago
MAYA GDE 6974307060
H LAOURA GDE είναι η λατίνα που θα χορέψει πάνω στο κορμί σου. Θες να γίνεις ο καβαλιέρος της και να χορέψεις τον χορό του έρωτα μαζί της? Τότε μην χάνεις ευκαιρία και χρό
12 hours ago
LAURA GDE ESCORT GOLDEN DIAMOND
ΚΛΕΙΣΤΕ ΡΑΝΤΕΒΟΥ ΤΩΡΑ 6974.307.060 – 6974.307.085 – 6974.306.870 Η Latin escort Mirella είναι μια κοπέλα με φυσική ομορφιά και άριστες αναλογίες! Τις αρέσουν οι νέες περιπέτειες και είναι α
12 hours ago
MIRELLA GDE
ΚΛΕΙΣΤΕ ΡΑΝΤΕΒΟΥ ΤΩΡΑ 6974.307.060 – 6974.307.085 – 6974.306.870 Η sexy Russian escort Alena είναι μια VIP Escort από τη Ρωσία με χαρακτηριστικά και σώμα που κόβουν την ανάσα! Δώστε άλλη διάστασ
12 hours ago
ALENA GDE 6974307060
H LIZ GDE είναι μια λατίνα ιδανική για στιγμές χαλάρωσης και απόλαυσης. Μια γυναίκα με πάθος, όρεξη και σεξαπίλ που θα σας εντυπωσιάσει. Πρόθυμη για κάθε απαίτηση και
12 hours ago
LIZ GDE GOLDEN DIAMOND
H Latin escort Luciana είναι ένα κορίτσι τούμπανο με τέλεια στητά πόδια και στήθος που κοιτάει τον ουρανό,είναι μια γλυκιά αγριόγατα του σεξ που περιμένει το ερωτικό σου κάλε
1506 days ago
LUCIANA GDE 6974307060
Η ROMANA GDE είναι μια εκρηκτική γυναικά που θα απογειώσει κάθε φαντασίωση σου. Ψιλη και δυναμική , όμορφη και σέξυ είναι η ιδανική παρτενέρ στο καυτο κρεβάτι σου. ήρ
12 hours ago
ROMANA GDE
Όταν έχεις μια κουραστική μέρα και ζητάς μια ανανέωση με εγγύηση ότι θα περάσεις καλά , τότε πρέπει να καλέσεις οπωσδήποτε την escort DEMI GDE . Escort Athens UKRAINIAN GIRL DEMI Φύλο:
12 hours ago
DEMI GDE 6974307060
H ESCORT KATHERINA GDE είναι μια όμορφη κομψη Λατινα με φουλ ενέργεια και δυναμισμό. Λατρεύει τα παιχνιδάκια μαζί σου και την ανάβουν οι νέες εμπειρίες. Θες να γίνεις ο δάσκα
12 hours ago
KATHERINA GDE
H JENIFFER GDE είναι μια πετιτ κάπελα , γλυκιά σαν καραμέλα .. Ένα κορίτσι που με την φρεσκάδα της θα σε ανανεώσει όσο ακριβως χρειάζεσαι για να φορτίσεις τις μπαταρίες σο
12 hours ago
JENIFFER GDE
ΚΛΕΙΣΤΕ ΡΑΝΤΕΒΟΥ ΤΩΡΑ ‎6974.307.060 6974.307.085 – 6974.306.870 Η Russian escort Nikki είναι μια νέα, όμορφη και γεμάτη ερωτική ενέργεια Ρωσίδα η οποία είναι έτοιμη ανά πάσα στιγμή να έρθει
12 hours ago
NIKKI GDE 6974307060
Η Rakel escort είναι μια Ουκρανή καλόνη που θα μείνει αξέχαστη . Της αρέσει να μαθαίνει κόλπα και είναι μια μικρή μαθήτρια που θα γίνει η σκλάβα σου !!! Escort Athens Rakel Φύλο:
365 days ago
RAKEL GDE 6974307060