[pypy-svn] r71860 - in pypy/branch/ctypes-configure-cache-2/ctypes_configure: . test
arigo at codespeak.net
arigo at codespeak.net
Sat Mar 6 13:43:11 CET 2010
Author: arigo
Date: Sat Mar 6 13:43:10 2010
New Revision: 71860
Modified:
pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py
pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py
Log:
Support simple arrays, like "c_int*5".
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/dumpcache.py Sat Mar 6 13:43:10 2010
@@ -16,9 +16,6 @@
f.write("%s = %d\n" % (key, val))
elif val is None:
f.write("%s = None\n" % key)
- elif isinstance(val, ctypes._SimpleCData.__class__):
- # a simple type
- f.write("%s = %s\n" % (key, ctypes_repr(val)))
elif isinstance(val, ctypes.Structure.__class__):
f.write("class %s(ctypes.Structure):\n" % key)
f.write(" _fields_ = [\n")
@@ -31,12 +28,16 @@
"lists of integers or strings only"
f.write("%s = %r\n" % (key, val))
else:
- raise NotImplementedError("Saving of %r" % (val,))
+ # a simple type, hopefully
+ f.write("%s = %s\n" % (key, ctypes_repr(val)))
f.close()
print 'Wrote %s.' % (filename,)
def ctypes_repr(cls):
# ctypes_configure does not support nested structs so far
# so let's ignore it
- assert isinstance(cls, ctypes._SimpleCData.__class__)
- return "ctypes." + cls.__name__
+ if isinstance(cls, ctypes._SimpleCData.__class__):
+ return "ctypes." + cls.__name__
+ if hasattr(cls, '_length_') and hasattr(cls, '_type_'): # assume an array
+ return '%d * %s' % (cls._length_, ctypes_repr(cls._type_))
+ raise NotImplementedError("saving of object with type %r" % type(cls))
Modified: pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py
==============================================================================
--- pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py (original)
+++ pypy/branch/ctypes-configure-cache-2/ctypes_configure/test/test_dumpcache.py Sat Mar 6 13:43:10 2010
@@ -1,3 +1,4 @@
+import ctypes
from ctypes_configure import configure, dumpcache
from ctypes_configure.cbuild import ExternalCompilationInfo
@@ -37,3 +38,14 @@
assert d['undef'] == res['undef']
assert d['large'] == res['large']
assert d['XUZ'] == res['XUZ']
+
+
+def test_cache_array():
+ configdir = configure.configdir
+ res = {'foo': ctypes.c_short * 27}
+ cachefile = configdir.join('cache_array')
+ dumpcache.dumpcache('', str(cachefile), res)
+ #
+ d = {}
+ execfile(str(cachefile), d)
+ assert d['foo'] == res['foo']
More information about the Pypy-commit
mailing list