moved some macro related logic to the generated code
authorFabien Potencier <fabien.potencier@gmail.com>
Sat, 21 Jul 2012 20:47:06 +0000 (22:47 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 21 Jul 2012 20:47:06 +0000 (22:47 +0200)
lib/Twig/Node/Macro.php
lib/Twig/Template.php
test/Twig/Tests/Node/MacroTest.php

index e0c3dca..823131e 100644 (file)
@@ -76,7 +76,7 @@ class Twig_Node_Macro extends Twig_Node
             ->write("throw \$e;\n")
             ->outdent()
             ->write("}\n\n")
-            ->write("return ob_get_clean();\n")
+            ->write("return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());\n")
             ->outdent()
             ->write("}\n\n")
         ;
index 7b98468..beed5c5 100644 (file)
@@ -422,14 +422,7 @@ abstract class Twig_Template implements Twig_TemplateInterface
             $this->env->getExtension('sandbox')->checkMethodAllowed($object, $method);
         }
 
-        $ret = call_user_func_array(array($object, $method), $arguments);
-
-        // hack to be removed when macro calls are refactored
-        if ($object instanceof Twig_TemplateInterface) {
-            return $ret === '' ? '' : new Twig_Markup($ret, $this->env->getCharset());
-        }
-
-        return $ret;
+        return call_user_func_array(array($object, $method), $arguments);
     }
 
     /**
index 3dd57a6..5930728 100644 (file)
@@ -61,7 +61,7 @@ public function getfoo(\$foo = null)
         throw \$e;
     }
 
-    return ob_get_clean();
+    return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());
 }
 EOF
             ),