[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