[pypy-commit] pypy win64-stage1: Some corrections to ll2ctypes. Actually, they did not solve my problem:
ctismer
noreply at buildbot.pypy.org
Sat Nov 26 01:06:54 CET 2011
Author: Christian Tismer <tismer at stackless.com>
Branch: win64-stage1
Changeset: r49799:aea404f4b9e3
Date: 2011-11-26 00:53 +0100
http://bitbucket.org/pypy/pypy/changeset/aea404f4b9e3/
Log: Some corrections to ll2ctypes. Actually, they did not solve my
problem: translator\c\test\test_newgc.py always fails, because some
Signed assignment does not match Array of INT, and I still cannot
track it down. But maybe the overall error count gets further down
and helps locating this ;-)
diff --git a/pypy/rpython/lltypesystem/ll2ctypes.py b/pypy/rpython/lltypesystem/ll2ctypes.py
--- a/pypy/rpython/lltypesystem/ll2ctypes.py
+++ b/pypy/rpython/lltypesystem/ll2ctypes.py
@@ -20,6 +20,7 @@
from pypy.rlib.objectmodel import Symbolic, ComputedIntSymbolic
from pypy.tool.uid import fixid
from pypy.rlib.rarithmetic import r_singlefloat, r_longfloat, base_int, intmask
+from pypy.rlib.rarithmetic import is_emulated_long
from pypy.annotation import model as annmodel
from pypy.rpython.llinterp import LLInterpreter, LLException
from pypy.rpython.lltypesystem.rclass import OBJECT, OBJECT_VTABLE
@@ -93,9 +94,17 @@
def _setup_ctypes_cache():
from pypy.rpython.lltypesystem import rffi
+
+ if is_emulated_long:
+ signed_as_ctype = ctypes.c_longlong
+ unsigned_as_ctypes = ctypes.c_ulonglong
+ else:
+ signed_as_ctype = ctypes.c_long
+ unsigned_as_ctypes = ctypes.c_ulong
+
_ctypes_cache.update({
- lltype.Signed: ctypes.c_long,
- lltype.Unsigned: ctypes.c_ulong,
+ lltype.Signed: signed_as_ctype,
+ lltype.Unsigned: unsigned_as_ctypes,
lltype.Char: ctypes.c_ubyte,
rffi.DOUBLE: ctypes.c_double,
rffi.FLOAT: ctypes.c_float,
@@ -189,8 +198,13 @@
raise e
class CArray(ctypes.Structure):
+ if is_emulated_long:
+ lentype = ctypes.c_longlong
+ else:
+ lentype = ctypes.c_long
+
if not A._hints.get('nolength'):
- _fields_ = [('length', ctypes.c_long),
+ _fields_ = [('length', lentype),
('items', max_n * ctypes_item)]
else:
_fields_ = [('items', max_n * ctypes_item)]
diff --git a/pypy/rpython/lltypesystem/test/test_ll2ctypes.py b/pypy/rpython/lltypesystem/test/test_ll2ctypes.py
--- a/pypy/rpython/lltypesystem/test/test_ll2ctypes.py
+++ b/pypy/rpython/lltypesystem/test/test_ll2ctypes.py
@@ -148,7 +148,11 @@
ac = lltype2ctypes(a, normalize=False)
assert isinstance(ac.contents, ctypes.Structure)
assert ac.contents.length == 10
- assert ac.contents._fields_[0] == ('length', ctypes.c_long)
+ if is_emulated_long:
+ lentype = ctypes.c_longlong
+ else:
+ lentype = ctypes.c_long
+ assert ac.contents._fields_[0] == ('length', lentype)
assert ac.contents.items[1] == 101
ac.contents.items[2] = 456
assert a[2] == 456
More information about the pypy-commit
mailing list