fixed usage of operators as method names (like is, in, and not)
authorFabien Potencier <fabien.potencier@gmail.com>
Tue, 14 Dec 2010 14:19:37 +0000 (15:19 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Tue, 14 Dec 2010 14:20:49 +0000 (15:20 +0100)
CHANGELOG
lib/Twig/ExpressionParser.php
test/Twig/Tests/Fixtures/expressions/method_call.test
test/Twig/Tests/integrationTest.php

index 50efc38..1275fa0 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -15,6 +15,7 @@ Backward incompatibilities:
 
 Changes:
 
+ * fixed usage of operators as method names (like is, in, and not)
  * changed the order of execution for node visitors
  * fixed default() filter behavior when used with strict_variables set to on
  * fixed filesystem loader compatibility with PHAR files
index 966674c..5522941 100644 (file)
@@ -235,7 +235,7 @@ class Twig_ExpressionParser
         $type = Twig_Node_Expression_GetAttr::TYPE_ANY;
         if ($token->getValue() == '.') {
             $token = $this->parser->getStream()->next();
-            if ($token->getType() == Twig_Token::NAME_TYPE || $token->getType() == Twig_Token::NUMBER_TYPE) {
+            if ($token->getType() == Twig_Token::NAME_TYPE || $token->getType() == Twig_Token::NUMBER_TYPE || $token->getType() == Twig_Token::OPERATOR_TYPE) {
                 $arg = new Twig_Node_Expression_Constant($token->getValue(), $lineno);
 
                 if ($this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
index 14674b8..0957d18 100644 (file)
@@ -8,6 +8,9 @@ Twig supports method calls
 {{ items.foo.bar('a', 43) }}
 {{ items.foo.bar(foo) }}
 {{ items.foo.self.foo() }}
+{{ items.foo.is }}
+{{ items.foo.in }}
+{{ items.foo.not }}
 --DATA--
 return array('foo' => 'bar', 'items' => array('foo' => new Foo(), 'bar' => 'foo'))
 --EXPECT--
@@ -18,3 +21,6 @@ bar
 bar_a-43
 bar_bar
 foo
+is
+in
+not
index 5f4e20f..7383735 100644 (file)
@@ -97,6 +97,21 @@ class Foo
     {
         return $this;
     }
+
+    public function is()
+    {
+        return 'is';
+    }
+
+    public function in()
+    {
+        return 'in';
+    }
+
+    public function not()
+    {
+        return 'not';
+    }
 }
 
 class TestExtension extends Twig_Extension