public function parse($json) { $expr = $this->decoder->decode($json); return $this->processExpr($expr); }
private static function loadConfig() { global $argv; $configPaths = []; $extensions = []; $configOverride = []; foreach ($argv as $arg) { if ($configFile = self::parseOption($arg, 'config')) { if (!file_exists($configFile)) { echo sprintf('Config file "%s" does not exist', $configFile) . PHP_EOL; exit(1); } $configPaths = [$configFile]; } if ($value = self::parseOption($arg, 'bootstrap', 'b')) { $configOverride['bootstrap'] = self::getBootstrapPath(getcwd(), $value); } if ($value = self::parseOption($arg, 'extension')) { $extensions[] = $value; } if ($value = self::parseOption($arg, 'php-binary')) { $configOverride['php_binary'] = $value; } if ($value = self::parseOption($arg, 'php-wrapper')) { $configOverride['php_wrapper'] = $value; } if ($value = self::parseOption($arg, 'php-config')) { $jsonParser = new JsonDecoder(); $value = $jsonParser->decode($value); $configOverride['php_config'] = $value; } } if (empty($configPaths)) { $configPaths = [getcwd() . '/phpbench.json', getcwd() . '/phpbench.json.dist']; } $config = ['extensions' => [], 'bootstrap' => null]; foreach ($configPaths as $configPath) { if (!file_exists($configPath)) { continue; } $configRaw = file_get_contents($configPath); try { $parser = new JsonParser(); $parser->parse($configRaw); } catch (ParsingException $e) { echo 'Error parsing config file:' . PHP_EOL . PHP_EOL; echo $e->getMessage(); exit(1); } $config = array_merge($config, json_decode($configRaw, true)); $config['config_path'] = $configPath; if ($config['bootstrap']) { $config['bootstrap'] = self::getBootstrapPath(dirname($configPath), $config['bootstrap']); } break; } $config = array_merge($config, $configOverride); // add any manually specified extensions foreach ($extensions as $extension) { $config['extensions'][] = $extension; } return $config; }