[pypy-svn] pypy real-rffi.INT: Conversion between RPython and the hosting CPython API are now based on the C type.
amauryfa
commits-noreply at bitbucket.org
Wed Mar 2 13:55:27 CET 2011
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: real-rffi.INT
Changeset: r42385:6d24afdecfcc
Date: 2011-03-02 13:52 +0100
http://bitbucket.org/pypy/pypy/changeset/6d24afdecfcc/
Log: Conversion between RPython and the hosting CPython API are now based
on the C type.
diff --git a/pypy/rpython/rint.py b/pypy/rpython/rint.py
--- a/pypy/rpython/rint.py
+++ b/pypy/rpython/rint.py
@@ -439,30 +439,35 @@
py_to_ll_conversion_functions = {
- UnsignedLongLong: ('RPyLong_AsUnsignedLongLong', lambda pyo: r_ulonglong(pyo._obj.value)),
- SignedLongLong: ('RPyLong_AsLongLong', lambda pyo: r_longlong(pyo._obj.value)),
- Unsigned: ('RPyLong_AsUnsignedLong', lambda pyo: r_uint(pyo._obj.value)),
- Signed: ('PyInt_AsLong', lambda pyo: int(pyo._obj.value))
+ 'ULONGLONG': ('RPyLong_AsUnsignedLongLong', lambda pyo: r_ulonglong(pyo._obj.value)),
+ 'LONGLONG': ('RPyLong_AsLongLong', lambda pyo: r_longlong(pyo._obj.value)),
+ 'ULONG': ('RPyLong_AsUnsignedLong', lambda pyo: r_uint(pyo._obj.value)),
+ 'LONG': ('PyInt_AsLong', lambda pyo: int(pyo._obj.value))
}
ll_to_py_conversion_functions = {
- UnsignedLongLong: ('PyLong_FromUnsignedLongLong', lambda i: pyobjectptr(i)),
- SignedLongLong: ('PyLong_FromLongLong', lambda i: pyobjectptr(i)),
- Unsigned: ('PyLong_FromUnsignedLong', lambda i: pyobjectptr(i)),
- Signed: ('PyInt_FromLong', lambda i: pyobjectptr(i)),
+ 'ULONGLONG': ('PyLong_FromUnsignedLongLong', lambda i: pyobjectptr(i)),
+ 'LONGLONG': ('PyLong_FromLongLong', lambda i: pyobjectptr(i)),
+ 'ULONG': ('PyLong_FromUnsignedLong', lambda i: pyobjectptr(i)),
+ 'LONG': ('PyInt_FromLong', lambda i: pyobjectptr(i)),
}
-
+
+# XXX this does not work on win64
+py_to_ll_conversion_functions['Signed'] = py_to_ll_conversion_functions['LONG']
+ll_to_py_conversion_functions['Signed'] = ll_to_py_conversion_functions['LONG']
+py_to_ll_conversion_functions['SIZE_T'] = py_to_ll_conversion_functions['ULONG']
+ll_to_py_conversion_functions['SIZE_T'] = ll_to_py_conversion_functions['ULONG']
class __extend__(pairtype(PyObjRepr, IntegerRepr)):
def convert_from_to((r_from, r_to), v, llops):
tolltype = r_to.lowleveltype
- fnname, callable = py_to_ll_conversion_functions[tolltype]
+ fnname, callable = py_to_ll_conversion_functions[tolltype._name]
return llops.gencapicall(fnname, [v],
resulttype=r_to, _callable=callable)
class __extend__(pairtype(IntegerRepr, PyObjRepr)):
def convert_from_to((r_from, r_to), v, llops):
fromlltype = r_from.lowleveltype
- fnname, callable = ll_to_py_conversion_functions[fromlltype]
+ fnname, callable = ll_to_py_conversion_functions[fromlltype._name]
return llops.gencapicall(fnname, [v],
resulttype=pyobj_repr, _callable=callable)
More information about the Pypy-commit
mailing list