[pypy-svn] r13598 - in pypy/dist/pypy: rpython translator/c/test

arigo at codespeak.net arigo at codespeak.net
Sun Jun 19 13:16:32 CEST 2005


Author: arigo
Date: Sun Jun 19 13:16:29 2005
New Revision: 13598

Modified:
   pypy/dist/pypy/rpython/rbool.py
   pypy/dist/pypy/translator/c/test/test_annotated.py
Log:
Bug fix.  Conversions from/to pyobj_repr should not use gendirectcall(),
because translator/c/wrapper.py cannot cope with new graphs suddenly
appearing.


Modified: pypy/dist/pypy/rpython/rbool.py
==============================================================================
--- pypy/dist/pypy/rpython/rbool.py	(original)
+++ pypy/dist/pypy/rpython/rbool.py	Sun Jun 19 13:16:29 2005
@@ -2,7 +2,7 @@
 from pypy.annotation import model as annmodel
 from pypy.rpython.lltype import Signed, Unsigned, Bool, Float, pyobjectptr
 from pypy.rpython.rmodel import Repr, TyperError, IntegerRepr, BoolRepr
-from pypy.rpython.robject import PyObjRepr
+from pypy.rpython.robject import PyObjRepr, pyobj_repr
 
 
 debug = False
@@ -48,31 +48,15 @@
             return llops.genop('cast_bool_to_int', [v], resulttype=Signed)
         return NotImplemented
 
-pyobj_true = pyobjectptr(True)
-pyobj_false = pyobjectptr(False)
-
-def ll_pyobj2bool(pyobjptr):
-    if pyobjptr == pyobj_true:
-        return True
-    elif pyobjptr == pyobj_false:
-        return False
-    else:
-        raise TypeError
-
-def ll_bool2pyobj(boolval):
-    if boolval:
-        return pyobj_true
-    else:
-        return pyobj_false
-
 class __extend__(pairtype(PyObjRepr, BoolRepr)):
     def convert_from_to((r_from, r_to), v, llops):
         if r_to.lowleveltype == Bool:
-            return llops.gendirectcall(ll_pyobj2bool, v)
+            return llops.gencapicall('PyObject_IsTrue', [v], resulttype=Bool)
         return NotImplemented
 
 class __extend__(pairtype(BoolRepr, PyObjRepr)):
     def convert_from_to((r_from, r_to), v, llops):
         if r_from.lowleveltype == Bool:
-            return llops.gendirectcall(ll_bool2pyobj, v)
+            return llops.gencapicall('PyBool_FromLong', [v],
+                                     resulttype = pyobj_repr)
         return NotImplemented

Modified: pypy/dist/pypy/translator/c/test/test_annotated.py
==============================================================================
--- pypy/dist/pypy/translator/c/test/test_annotated.py	(original)
+++ pypy/dist/pypy/translator/c/test/test_annotated.py	Sun Jun 19 13:16:29 2005
@@ -128,3 +128,9 @@
         for n in [-1,0,1,2]:
             result.append(fn(n))
         assert result == [-1,0,1,2]    
+
+    def test_is_perfect_number(self):
+        fn = self.getcompiled(snippet.is_perfect_number)
+        for i in range(1, 33):
+            perfect = fn(i)
+            assert perfect is (i in (6,28))



More information about the Pypy-commit mailing list