public static function patch($options = [])
    {
        if (static::$_interceptor) {
            throw new JitException("An interceptor is already attached.");
        }
        $defaults = ['loader' => null];
        $options += $defaults;
        $loader = $options['originalLoader'] = $options['loader'] ?: static::composer();
        if (!$loader) {
            throw new JitException("The loader option need to be a valid autoloader.");
        }
        unset($options['loader']);

        class_exists('Lead\Jit\JitException');
        class_exists('Lead\Jit\Node\NodeDef');
        class_exists('Lead\Jit\Node\FunctionDef');
        class_exists('Lead\Jit\Node\BlockDef');
        class_exists('Lead\Jit\TokenStream');
        class_exists('Lead\Jit\Parser');

        $interceptor = new static($options);
        spl_autoload_unregister($loader);
        return static::load($interceptor) ? $interceptor : false;
    }