Author: Ronan Lamy <[email protected]>
Branch: rffi-parser
Changeset: r89148:f4d014183be5
Date: 2016-12-18 15:40 +0000
http://bitbucket.org/pypy/pypy/changeset/f4d014183be5/

Log:    Use parse_source() in floatobject.py

diff --git a/pypy/module/cpyext/floatobject.py 
b/pypy/module/cpyext/floatobject.py
--- a/pypy/module/cpyext/floatobject.py
+++ b/pypy/module/cpyext/floatobject.py
@@ -1,18 +1,26 @@
 from rpython.rtyper.lltypesystem import rffi, lltype
-from pypy.module.cpyext.api import (PyObjectFields, bootstrap_function,
-    cpython_struct,
+from pypy.module.cpyext.api import (
+    bootstrap_function, object_h,
     CANNOT_FAIL, cpython_api, PyObject, build_type_checkers, CONST_STRING)
 from pypy.module.cpyext.pyobject import (
     make_typedescr, track_reference, from_ref)
-from pypy.interpreter.error import OperationError
 from rpython.rlib.rstruct import runpack
 from pypy.objspace.std.floatobject import W_FloatObject
+from pypy.module.cpyext.cparser import parse_source
 
-PyFloatObjectStruct = lltype.ForwardReference()
+
+cdef = """\
+typedef struct {
+    PyObject_HEAD
+    double ob_fval;
+} PyFloatObject;
+"""
+float_h = parse_source(cdef, includes=[object_h])
+float_h.configure_types()
+
+PyFloatObjectStruct = float_h.definitions['PyFloatObject']
+assert not isinstance(PyFloatObjectStruct, lltype.ForwardReference)
 PyFloatObject = lltype.Ptr(PyFloatObjectStruct)
-PyFloatObjectFields = PyObjectFields + \
-    (("ob_fval", rffi.DOUBLE),)
-cpython_struct("PyFloatObject", PyFloatObjectFields, PyFloatObjectStruct)
 
 @bootstrap_function
 def init_floatobject(space):
@@ -83,4 +91,3 @@
         return runpack.runpack("<d", input)
     else:
         return runpack.runpack(">d", input)
-
diff --git a/pypy/module/cpyext/test/test_floatobject.py 
b/pypy/module/cpyext/test/test_floatobject.py
--- a/pypy/module/cpyext/test/test_floatobject.py
+++ b/pypy/module/cpyext/test/test_floatobject.py
@@ -1,6 +1,8 @@
 from pypy.module.cpyext.test.test_api import BaseApiTest
 from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
 from rpython.rtyper.lltypesystem import rffi
+from pypy.module.cpyext.pyobject import create_ref
+from pypy.module.cpyext.floatobject import PyFloatObject
 
 class TestFloatObject(BaseApiTest):
     def test_floatobject(self, space, api):
@@ -32,6 +34,12 @@
         with rffi.scoped_str2charp("@\t\x1e\xb8Q\xeb\x85\x1f") as ptr:
             assert abs(api._PyFloat_Unpack8(ptr, 0) - 3.14) < 1e-15
 
+    def test_cast(self, space):
+        w_f = space.newfloat(1.5)
+        py_obj = create_ref(space, w_f)
+        py_float = rffi.cast(PyFloatObject, py_obj)
+        assert py_float._TYPE is PyFloatObject
+
 class AppTestFloatObject(AppTestCpythonExtensionBase):
     def test_fromstring(self):
         module = self.import_extension('foo', [
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to