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