speed up slicing of lists and tuples
authorStefan Behnel <stefan_ml@behnel.de>
Thu, 7 Mar 2013 19:39:15 +0000 (20:39 +0100)
committerStefan Behnel <stefan_ml@behnel.de>
Thu, 7 Mar 2013 19:39:15 +0000 (20:39 +0100)
Cython/Compiler/ExprNodes.py

index 42e1293..b0c3dea 100755 (executable)
@@ -3649,9 +3649,16 @@ class SliceIndexNode(ExprNode):
                     stop_code,
                     code.error_goto_if_null(result, self.pos)))
         else:
+            if self.base.type is list_type:
+                cfunc = 'PyList_GetSlice'
+            elif self.base.type is tuple_type:
+                cfunc = 'PyTuple_GetSlice'
+            else:
+                cfunc = '__Pyx_PySequence_GetSlice'
             code.putln(
-                "%s = __Pyx_PySequence_GetSlice(%s, %s, %s); %s" % (
+                "%s = %s(%s, %s, %s); %s" % (
                     result,
+                    cfunc,
                     self.base.py_result(),
                     start_code,
                     stop_code,