fixed output when a macro throws an exception
authorFabien Potencier <fabien.potencier@gmail.com>
Mon, 25 Jul 2011 16:12:16 +0000 (18:12 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Mon, 25 Jul 2011 16:12:59 +0000 (18:12 +0200)
CHANGELOG
lib/Twig/Node/Macro.php
test/Twig/Tests/Node/MacroTest.php

index 2e6bd7c..c06e02d 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@
 
 Changes:
 
+ * fixed output when a macro throws an exception
  * fixed a parsing problem when a large chunk of text is enclosed in a comment tag
 
 * 1.1.1 (2011-07-17)
index d77bc47..9f95570 100644 (file)
@@ -55,8 +55,16 @@ class Twig_Node_Macro extends Twig_Node
             ->outdent()
             ->write("));\n\n")
             ->write("ob_start();\n")
+            ->write("try {\n")
+            ->indent()
             ->subcompile($this->getNode('body'))
-            ->raw("\n")
+            ->outdent()
+            ->write("} catch(Exception \$e) {\n")
+            ->indent()
+            ->write("ob_end_clean();\n\n")
+            ->write("throw \$e;\n")
+            ->outdent()
+            ->write("}\n\n")
             ->write("return ob_get_clean();\n")
             ->outdent()
             ->write("}\n\n")
index 904cfb4..66d5fec 100644 (file)
@@ -51,7 +51,13 @@ public function getfoo(\$foo = null)
     ));
 
     ob_start();
-    echo "foo";
+    try {
+        echo "foo";
+    } catch(Exception \$e) {
+        ob_end_clean();
+
+        throw \$e;
+    }
 
     return ob_get_clean();
 }