public static function init(array $config)
 {
     if (isset($config['debug'])) {
         self::$debug = $config['debug'];
     }
     if (self::$debug) {
         self::$log_file = __DIR__ . '/debug.log';
     }
     if (isset($config['php_parser'])) {
         self::$php_parser = constant('PhpParser\\ParserFactory::' . $config['php_parser']);
     }
     if (isset($config['root_dir'])) {
         Cache::setProjectRootDir($config['root_dir']);
     } else {
         // APPPATH is constant in CodeIgniter
         Cache::setProjectRootDir(APPPATH . '../');
     }
     if (!isset($config['cache_dir'])) {
         throw new LogicException('You have to set "cache_dir"');
     }
     self::setCacheDir($config['cache_dir']);
     if (!isset($config['include_paths'])) {
         throw new LogicException('You have to set "include_paths"');
     }
     self::setIncludePaths($config['include_paths']);
     if (isset($config['exclude_paths'])) {
         self::setExcludePaths($config['exclude_paths']);
     }
     Cache::createTmpListDir();
     if (isset($config['patcher_list'])) {
         self::setPatcherList($config['patcher_list']);
     }
     self::checkPatcherListUpdate();
     self::checkPathsUpdate();
     self::loadPatchers();
     self::addTmpFunctionBlacklist();
     if (isset($config['functions_to_patch'])) {
         FunctionPatcher::addWhitelists($config['functions_to_patch']);
     }
     self::checkFunctionWhitelistUpdate();
     FunctionPatcher::lockFunctionList();
     if (isset($config['exit_exception_classname'])) {
         self::setExitExceptionClassname($config['exit_exception_classname']);
     }
     // Register include stream wrapper for monkey patching
     self::wrap();
 }
 public static function init(array $config)
 {
     self::setDebug($config);
     if (isset($config['php_parser'])) {
         self::$php_parser = constant('PhpParser\\ParserFactory::' . $config['php_parser']);
     }
     self::setDir($config);
     self::setPaths($config);
     Cache::createTmpListDir();
     if (isset($config['patcher_list'])) {
         self::setPatcherList($config['patcher_list']);
     }
     self::checkPatcherListUpdate();
     self::checkPathsUpdate();
     self::loadPatchers();
     self::addTmpFunctionBlacklist();
     if (isset($config['functions_to_patch'])) {
         FunctionPatcher::addWhitelists($config['functions_to_patch']);
     }
     self::checkFunctionWhitelistUpdate();
     FunctionPatcher::lockFunctionList();
     if (isset($config['exit_exception_classname'])) {
         self::setExitExceptionClassname($config['exit_exception_classname']);
     }
     // Register include stream wrapper for monkey patching
     self::wrap();
 }