fixed error handling for if tag when a syntax error occurs within a subparse process...
authorAngelo Vargas <angelo@nivler.com>
Thu, 23 Sep 2010 01:33:55 +0000 (18:33 -0700)
committerFabien Potencier <fabien.potencier@gmail.com>
Thu, 23 Sep 2010 07:11:45 +0000 (09:11 +0200)
CHANGELOG
lib/Twig/TokenParser/If.php

index 3c3588b..d045514 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@ Backward incompatibilities:
  * the odd and even filters are now tests:
      {{ foo|odd }} must now be written {{ foo is odd }}
 
+ * fixed error handling for if tag when a syntax error occurs within a subparse process
  * added a way to implement custom logic for resolving token parsers given a tag name
  * fixed js escaper to be stricter (now uses a whilelist-based js escaper)
  * added a "constant" filter
index d4f38b0..2cc61b9 100644 (file)
@@ -29,31 +29,26 @@ class Twig_TokenParser_If extends Twig_TokenParser
 
         $end = false;
         while (!$end) {
-            try
-            {
-                switch ($this->parser->getStream()->next()->getValue()) {
-                    case 'else':
-                        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
-                        $else = $this->parser->subparse(array($this, 'decideIfEnd'));
-                        break;
+            switch ($this->parser->getStream()->next()->getValue()) {
+                case 'else':
+                    $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+                    $else = $this->parser->subparse(array($this, 'decideIfEnd'));
+                    break;
 
-                    case 'elseif':
-                        $expr = $this->parser->getExpressionParser()->parseExpression();
-                        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
-                        $body = $this->parser->subparse(array($this, 'decideIfFork'));
-                        $tests[] = $expr;
-                        $tests[] = $body;
-                        break;
+                case 'elseif':
+                    $expr = $this->parser->getExpressionParser()->parseExpression();
+                    $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+                    $body = $this->parser->subparse(array($this, 'decideIfFork'));
+                    $tests[] = $expr;
+                    $tests[] = $body;
+                    break;
 
-                    case 'endif':
-                        $end = true;
-                        break;
+                case 'endif':
+                    $end = true;
+                    break;
 
-                    default:
-                        throw new Twig_SyntaxError('', -1);
-                }
-            } catch (Twig_SyntaxError $e) {
-                throw new Twig_SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d)', $lineno), -1);
+                default:
+                    throw new Twig_SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d)', $lineno), -1);
             }
         }