[svn] Correctly recognize and translate the floor division operator.
authorGeorg Brandl <georg@python.org>
Wed, 11 Apr 2007 14:49:16 +0000 (16:49 +0200)
committerGeorg Brandl <georg@python.org>
Wed, 11 Apr 2007 14:49:16 +0000 (16:49 +0200)
--HG--
branch : trunk

jinja/lexer.py
jinja/translators/python.py

index 4d5986ae43f76ebb79d724aa3c256236db1e78fd..335bbdcb15e0c19f7803129d91fa99ac87178644 100644 (file)
@@ -45,7 +45,7 @@ number_re = re.compile(r'\d+(\.\d+)*')
 operator_re = re.compile('(%s)' % '|'.join([
     isinstance(x, unicode) and str(x) or re.escape(x) for x in [
     # math operators
-    '+', '-', '*', '/', '%',
+    '+', '-', '*', '//', '/', '%',
     # braces and parenthesis
     '[', ']', '(', ')', '{', '}',
     # attribute access and comparison / logical operators
index a75a6e9891a9c45ea8e5daa93911605e2a32fd9f..1fe633592a6584a2d3192b74f56a18b82388b8a0 100644 (file)
@@ -191,6 +191,7 @@ class PythonTranslator(Translator):
             ast.Add:                self.handle_add,
             ast.Sub:                self.handle_sub,
             ast.Div:                self.handle_div,
+            ast.FloorDiv:           self.handle_floor_div,
             ast.Mul:                self.handle_mul,
             ast.Mod:                self.handle_mod,
             ast.UnaryAdd:           self.handle_unary_add,
@@ -905,6 +906,15 @@ class PythonTranslator(Translator):
             self.handle_node(node.right)
         )
 
+    def handle_floor_div(self, node):
+        """
+        Divide two items, return truncated result.
+        """
+        return '(%s // %s)' % (
+            self.handle_node(node.left),
+            self.handle_node(node.right)
+        )
+
     def handle_mul(self, node):
         """
         Multiply two items.