[pypy-commit] pypy default: PyNumber_Int and PyNumber_Long also accept strings. As a better

arigo noreply at buildbot.pypy.org
Fri Aug 9 18:48:27 CEST 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r66044:8ac4abd50746
Date: 2013-08-09 18:47 +0200
http://bitbucket.org/pypy/pypy/changeset/8ac4abd50746/

Log:	PyNumber_Int and PyNumber_Long also accept strings. As a better
	approximation than previously, they can be written as the direct
	equivalent to the app-level "int(x)" or "long(x)".

diff --git a/pypy/module/cpyext/number.py b/pypy/module/cpyext/number.py
--- a/pypy/module/cpyext/number.py
+++ b/pypy/module/cpyext/number.py
@@ -41,13 +41,13 @@
 def PyNumber_Int(space, w_obj):
     """Returns the o converted to an integer object on success, or NULL on failure.
     This is the equivalent of the Python expression int(o)."""
-    return space.int(w_obj)
+    return space.call_function(space.w_int, w_obj)
 
 @cpython_api([PyObject], PyObject)
 def PyNumber_Long(space, w_obj):
     """Returns the o converted to a long integer object on success, or NULL on
     failure.  This is the equivalent of the Python expression long(o)."""
-    return space.long(w_obj)
+    return space.call_function(space.w_long, w_obj)
 
 @cpython_api([PyObject], PyObject)
 def PyNumber_Index(space, w_obj):
diff --git a/pypy/module/cpyext/test/test_number.py b/pypy/module/cpyext/test/test_number.py
--- a/pypy/module/cpyext/test/test_number.py
+++ b/pypy/module/cpyext/test/test_number.py
@@ -19,6 +19,8 @@
     def test_number_long(self, space, api):
         w_l = api.PyNumber_Long(space.wrap(123))
         assert api.PyLong_CheckExact(w_l)
+        w_l = api.PyNumber_Long(space.wrap("123"))
+        assert api.PyLong_CheckExact(w_l)
 
     def test_number_int(self, space, api):
         w_l = api.PyNumber_Int(space.wraplong(123L))
@@ -27,6 +29,8 @@
         assert api.PyLong_CheckExact(w_l)
         w_l = api.PyNumber_Int(space.wrap(42.3))
         assert api.PyInt_CheckExact(w_l)
+        w_l = api.PyNumber_Int(space.wrap("42"))
+        assert api.PyInt_CheckExact(w_l)
 
     def test_number_index(self, space, api):
         w_l = api.PyNumber_Index(space.wraplong(123L))


More information about the pypy-commit mailing list