Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: numpy-reintroduce-zjit-tests
Changeset: r57842:330b40485c02
Date: 2012-10-07 11:04 +0200
http://bitbucket.org/pypy/pypy/changeset/330b40485c02/

Log:    in-progress, waiting for some other branch

diff --git a/pypy/annotation/test/test_annrpython.py 
b/pypy/annotation/test/test_annrpython.py
--- a/pypy/annotation/test/test_annrpython.py
+++ b/pypy/annotation/test/test_annrpython.py
@@ -2524,6 +2524,36 @@
         s = a.build_types(f, [])
         assert s.const == 2
 
+    def test_mixin_staticmethod(self):
+        class A(object):
+            _mixin_ = True
+
+            def __init__(self, v):
+                self.v = v
+
+            @staticmethod
+            def x(foo):
+                return len(foo)
+
+            def m(self):
+                return self.x(self.v)
+
+        class B(A):
+            pass
+
+        class C(A):
+            pass
+
+        def f(i):
+            if i:
+                return B([1, 2, 3]).m()
+            else:
+                return C("xyz").m()
+
+        a = self.RPythonAnnotator()
+        s = a.build_types(f, [int])
+        assert isinstance(s, annmodel.SomeInteger)
+
     def test___class___attribute(self):
         class Base(object): pass
         class A(Base): pass
diff --git a/pypy/module/micronumpy/test/test_zjit.py 
b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -122,9 +122,10 @@
         # XXX deal with the bridge at some point
         self.check_simple_loop({'raw_load':2, 'float_add': 1,
                                 'raw_store': 1, 'getarrayitem_gc': 3,
-                                'getarrayitem_gc_pure': 1, 'int_add': 2,
-                                'int_sub': 1, 'setfield_gc': 1,
+                                'getarrayitem_gc_pure': 1, 'int_add': 3,
+                                'int_sub': 1, 'setfield_gc': 2,
                                 'int_lt': 1, 'guard_true': 1,
+                                'jump': 1,
                                 'setarrayitem_gc': 1})
 
     def define_max():
@@ -139,7 +140,8 @@
         assert result == 128
         self.check_simple_loop({"raw_load": 1, "float_gt": 1,
                                 "guard_false": 2, "int_add": 1,
-                                "int_ge": 1, "setfield_gc": 1})
+                                "int_ge": 1, "setfield_gc": 1,
+                                'jump': 1})
 
     def define_any():
         return """
diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py
--- a/pypy/module/micronumpy/types.py
+++ b/pypy/module/micronumpy/types.py
@@ -257,8 +257,8 @@
 
     @specialize.argtype(1)
     def box(self, value):
-        box = Primitive.box(self, value)
-        if box.value:
+        value = lookup_type_dict(lltype.typeOf(value)).for_computation(value)
+        if value:
             return self.True
         else:
             return self.False
@@ -276,7 +276,8 @@
     def str_format(self, box):
         return "True" if self.unbox(box) else "False"
 
-    def for_computation(self, v):
+    @staticmethod
+    def for_computation(v):
         return int(v)
 
     def default_fromstring(self, space):
@@ -311,7 +312,8 @@
     def str_format(self, box):
         return str(self.for_computation(self.unbox(box)))
 
-    def for_computation(self, v):
+    @staticmethod
+    def for_computation(v):
         return widen(v)
 
     def default_fromstring(self, space):
@@ -556,7 +558,8 @@
         return float2string(self.for_computation(self.unbox(box)), "g",
                             rfloat.DTSF_STR_PRECISION)
 
-    def for_computation(self, v):
+    @staticmethod
+    def for_computation(v):
         return float(v)
 
     def default_fromstring(self, space):
@@ -986,10 +989,18 @@
         break
 del tp
 
+TYPE_DICT = {}
+
 def _setup():
     # compute alignment
     for tp in globals().values():
         if isinstance(tp, type) and hasattr(tp, 'T'):
             tp.alignment = clibffi.cast_type_to_ffitype(tp.T).c_alignment
+            TYPE_DICT[tp.T] = tp
+
+@specialize.memo()
+def lookup_type_dict(T):
+    return TYPE_DICT[T]
+
 _setup()
 del _setup
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to