protected function guessTemplateInfo() {
$template = null;
foreach (debug_backtrace() as $trace) {
if (isset($trace['object']) && $trace['object'] instanceof Twig_Template && 'Twig_Template' !== get_class($trace['object'])) {
if (null === $this->filename || $this->filename == $trace['object']
->getTemplateName()) {
$template = $trace['object'];
}
}
}
// update template filename
if (null !== $template && null === $this->filename) {
$this->filename = $template
->getTemplateName();
}
if (null === $template || $this->lineno > -1) {
return;
}
$r = new ReflectionObject($template);
$file = $r
->getFileName();
$exceptions = array(
$e = $this,
);
while (($e instanceof self || method_exists($e, 'getPrevious')) && ($e = $e
->getPrevious())) {
$exceptions[] = $e;
}
while ($e = array_pop($exceptions)) {
$traces = $e
->getTrace();
while ($trace = array_shift($traces)) {
if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) {
continue;
}
foreach ($template
->getDebugInfo() as $codeLine => $templateLine) {
if ($codeLine <= $trace['line']) {
// update template line
$this->lineno = $templateLine;
return;
}
}
}
}
}