/**
  * Run a function and autoescape returned content if autoescape is turned on
  *
  * @param  string $function Callback name
  * @return mixed
  */
 private function doRun($function)
 {
     $raw = $this->execute($function, $this->functions, array_slice(func_get_args(), 1));
     if ($this->autoescape && !in_array($function, $this->safe, true) && (is_array($raw) || is_string($raw) || is_object($raw) && !$raw instanceof Extension)) {
         $raw = $this->escaper->escape($raw);
         if (is_object($raw)) {
             $raw = '';
         }
     }
     return is_null($raw) ? '' : $raw;
 }
 /**
  * Allow dot syntax access to any data
  *
  * @param  mixed        $data
  * @param  string|array $where
  * @param  bool         $strict
  * @return mixed
  */
 public function getIn($data, $where, $strict = false)
 {
     if (is_object($data)) {
         $clone = clone $data;
         $data = \Foil\arraize($clone, $this->autoescape);
     } elseif (!is_array($data)) {
         return $this->autoescape ? $this->escaper->escape($data) : $data;
     }
     $where = is_string($where) ? explode('.', $where) : (array) $where;
     $get = igorw\get_in($data, $where);
     if (!$strict || !$this->strict || !is_null($get)) {
         return $get;
     }
     $name = implode('.', $where);
     if ($this->strict === 'notice') {
         return trigger_error("{$name} is not defined.");
     }
     throw new RuntimeException("{$name} is not defined.");
 }
 /**
  * @param  array $funcArgs
  * @param  int   $slice
  * @return array
  */
 private function args(array $funcArgs, $slice = 2)
 {
     $args = array_filter(array_slice($funcArgs, $slice), 'is_scalar');
     return $this->options['autoescape'] ? $this->escaper->escape($args) : $args;
 }