private function __callClosureFunction($name, $arguments)
    {
        $result = next::caller();

        if (!isset($this->__properties[$name])) {
            return $result;
        }

        if (!$this->__properties[$name] instanceof \Closure) {
            return $result;
        }

        /** @var \Closure $callable */
        $callable = $this->__properties[$name];
        $callable = $callable->bindTo($this);

        $this->allowPrivateScope();
        try {
            $result = call_user_func_array($callable, $arguments);
            $this->disallowPrivateScope();

        }
        catch(\Exception $e) {
            $this->disallowPrivateScope();
            throw $e;
        }

        return $result;
    }