[pypy-commit] pypy remove-list-smm-2: IN-PROGRESS: Translation fixes.

Manuel Jacob noreply at buildbot.pypy.org
Fri May 17 16:24:51 CEST 2013


Author: Manuel Jacob
Branch: remove-list-smm-2
Changeset: r64262:cfa9aa3a362f
Date: 2013-05-17 16:12 +0200
http://bitbucket.org/pypy/pypy/changeset/cfa9aa3a362f/

Log:	IN-PROGRESS: Translation fixes.

diff --git a/pypy/objspace/std/listobject.py b/pypy/objspace/std/listobject.py
--- a/pypy/objspace/std/listobject.py
+++ b/pypy/objspace/std/listobject.py
@@ -124,7 +124,7 @@
     from pypy.objspace.std.floatobject import W_FloatObject
     return type(w_object) is W_FloatObject
 
-def list_unroll_condition(space, w_list1, w_list2):
+def list_unroll_condition(w_list1, space, w_list2):
     return jit.loop_unrolling_heuristic(w_list1, w_list1.length(), UNROLL_CUTOFF) or \
            jit.loop_unrolling_heuristic(w_list2, w_list2.length(), UNROLL_CUTOFF)
 
@@ -376,28 +376,35 @@
     def descr_ne(self, space, w_other):
         return space.not_(self.descr_eq(space, w_other))
 
-    @staticmethod
     def _make_list_comparison(name):
         import operator
         op = getattr(operator, name)
 
         @jit.look_inside_iff(list_unroll_condition)
-        def compare_unwrappeditems(space, w_list1, w_list2):
+        def compare_unwrappeditems(self, space, w_list2):
+            if not isinstance(w_list2, W_ListObject):
+                return space.w_NotImplemented
+
             # needs to be safe against eq_w() mutating the w_lists behind our back
             # Search for the first index where items are different
             i = 0
             # XXX in theory, this can be implemented more efficiently as well.
             # let's not care for now
-            while i < w_list1.length() and i < w_list2.length():
-                w_item1 = w_list1.getitem(i)
+            while i < self.length() and i < w_list2.length():
+                w_item1 = self.getitem(i)
                 w_item2 = w_list2.getitem(i)
                 if not space.eq_w(w_item1, w_item2):
                     return getattr(space, name)(w_item1, w_item2)
                 i += 1
             # No more items to compare -- compare sizes
-            return space.newbool(op(w_list1.length(), w_list2.length()))
+            return space.newbool(op(self.length(), w_list2.length()))
         return func_with_new_name(compare_unwrappeditems, name + '__List_List')
 
+    descr_lt = _make_list_comparison('lt')
+    descr_le = _make_list_comparison('le')
+    descr_gt = _make_list_comparison('gt')
+    descr_ge = _make_list_comparison('ge')
+
     def descr_len(self, space):
         result = self.length()
         return wrapint(space, result)
@@ -451,7 +458,7 @@
             times = space.getindex_w(w_times, space.w_OverflowError)
         except OperationError, e:
             if e.match(space, space.w_TypeError):
-                raise FailedToImplement
+                return space.w_NotImplemented
             raise
         self.inplace_mul(times)
         return self
@@ -1685,10 +1692,10 @@
 
     __eq__ = interp2app(W_ListObject.descr_eq),
     __ne__ = interp2app(W_ListObject.descr_ne),
-    __lt__ = interp2app(W_ListObject._make_list_comparison('lt')),
-    __le__ = interp2app(W_ListObject._make_list_comparison('le')),
-    __gt__ = interp2app(W_ListObject._make_list_comparison('gt')),
-    __ge__ = interp2app(W_ListObject._make_list_comparison('ge')),
+    __lt__ = interp2app(W_ListObject.descr_lt),
+    __le__ = interp2app(W_ListObject.descr_le),
+    __gt__ = interp2app(W_ListObject.descr_gt),
+    __ge__ = interp2app(W_ListObject.descr_ge),
 
     __len__ = interp2app(W_ListObject.descr_len),
     __iter__ = interp2app(W_ListObject.descr_iter),


More information about the pypy-commit mailing list