FloorDiv operation
authorRobert Bradshaw <robertwb@math.washington.edu>
Tue, 16 Jan 2007 02:21:26 +0000 (18:21 -0800)
committerRobert Bradshaw <robertwb@math.washington.edu>
Tue, 16 Jan 2007 02:21:26 +0000 (18:21 -0800)
Cython/Compiler/ExprNodes.py
Cython/Compiler/Lexicon.py
Cython/Compiler/Parsing.py

index 66c00c82cee7437de3010527d1f86d70f96915d1..ac09bcf9cf38054f486dcf7537042435283ccc42 100644 (file)
@@ -2421,6 +2421,7 @@ class NumBinopNode(BinopNode):
         "-":           "PyNumber_Subtract",
         "*":           "PyNumber_Multiply",
         "/":           "PyNumber_Divide",
+        "//":          "PyNumber_FloorDivide",
         "%":           "PyNumber_Remainder",
         "**":   "PyNumber_Power"
     }
@@ -2479,6 +2480,16 @@ class MulNode(NumBinopNode):
             return NumBinopNode.is_py_operation(self)
 
 
+class FloorDivNode(NumBinopNode):
+    #  '//' operator.
+    
+    def calculate_result_code(self):
+        return "(%s %s %s)" % (
+            self.operand1.result_code, 
+            "/",  # c division is by default floor-div 
+            self.operand2.result_code)
+
+
 class ModNode(IntBinopNode):
     #  '%' operator.
     
@@ -2841,6 +2852,7 @@ binop_node_classes = {
     "-":               SubNode,
     "*":               MulNode,
     "/":               NumBinopNode,
+    "//":              FloorDivNode,
     "%":               ModNode,
     "**":              PowNode
 }
index 479b6cdfb0388f461367ec41e2b27024c7a1b768..2e241c6817fe634187228b9cfca92b09eab19561 100644 (file)
@@ -66,7 +66,7 @@ def make_lexicon():
     bra = Any("([{")
     ket = Any(")]}")
     punct = Any(":,;+-*/|&<>=.%`~^?")
-    diphthong = Str("==", "<>", "!=", "<=", ">=", "<<", ">>", "**", "+=", "-=", "*=", "/=", "%=", "|=", "^=", "&=")
+    diphthong = Str("==", "<>", "!=", "<=", ">=", "<<", ">>", "**", "+=", "-=", "*=", "/=", "%=", "|=", "^=", "&=", "//")
     spaces = Rep1(Any(" \t\f"))
     comment = Str("#") + Rep(AnyBut("\n"))
     escaped_newline = Str("\\\n")
index ab1ee1785a82ab1e609e568efa7517cb56d7ceaf..fa6bb2049c472e9e2f4f1a0454979892e88a9c22 100644 (file)
@@ -155,7 +155,7 @@ def p_arith_expr(s):
 #term: factor (('*'|'/'|'%') factor)*
 
 def p_term(s):
-    return p_binop_expr(s, ('*', '/', '%'), p_factor)
+    return p_binop_expr(s, ('*', '/', '%', '//'), p_factor)
 
 #factor: ('+'|'-'|'~'|'&'|typecast|sizeof) factor | power