Armin Rigo avatar Armin Rigo committed 90600b6

Merge from branch/ctypes-fix:

Fix _ensure_objects() on class _SimpleCData. Always returns
self._objects, but asserts that it is None for all _SimpleCDatas except
z, Z and P.

Comments (0)

Files changed (2)

lib_pypy/_ctypes/primitive.py

             self.value = value
 
     def _ensure_objects(self):
-        if self._type_ in 'zZ':
-            return self._objects
-        return None
+        if self._type_ not in 'zZP':
+            assert self._objects is None
+        return self._objects
 
     def _getvalue(self):
         return self._buffer[0]

pypy/module/test_lib_pypy/ctypes_tests/test_cast.py

     def test_cast_functype(self):
         # make sure we can cast function type
         my_sqrt = lib.my_sqrt
+        saved_objects = my_sqrt._objects.copy()
         sqrt = cast(cast(my_sqrt, c_void_p), CFUNCTYPE(c_double, c_double))
         assert sqrt(4.0) == 2.0
         assert not cast(0, CFUNCTYPE(c_int))
-
-        
+        #
+        assert sqrt._objects is my_sqrt._objects   # on CPython too
+        my_sqrt._objects.clear()
+        my_sqrt._objects.update(saved_objects)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.