[pypy-svn] r51533 - pypy/dist/pypy/lib/_ctypes

fijal at codespeak.net fijal at codespeak.net
Fri Feb 15 14:54:25 CET 2008


Author: fijal
Date: Fri Feb 15 14:54:24 2008
New Revision: 51533

Modified:
   pypy/dist/pypy/lib/_ctypes/array.py
   pypy/dist/pypy/lib/_ctypes/basics.py
   pypy/dist/pypy/lib/_ctypes/function.py
   pypy/dist/pypy/lib/_ctypes/pointer.py
   pypy/dist/pypy/lib/_ctypes/structure.py
Log:
provide some comment about computing keepalive key.


Modified: pypy/dist/pypy/lib/_ctypes/array.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/array.py	(original)
+++ pypy/dist/pypy/lib/_ctypes/array.py	Fri Feb 15 14:54:24 2008
@@ -1,7 +1,8 @@
 
 import _rawffi
 
-from _ctypes.basics import _CData, cdata_from_address, _CDataMeta, sizeof
+from _ctypes.basics import _CData, cdata_from_address, _CDataMeta, sizeof,\
+     keepalive_key
 
 def _create_unicode(buffer, maxlength):
     res = []
@@ -138,7 +139,7 @@
             return
         index = self._fix_index(index)
         if getattr(value, '_objects', None):
-            self._objects[str(index)] = value._objects
+            self._objects[keepalive_key(index)] = value._objects
         value = self._type_._CData_input(value)
         if not isinstance(self._type_._ffishape, tuple):
             self._buffer[index] = value[0]

Modified: pypy/dist/pypy/lib/_ctypes/basics.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/basics.py	(original)
+++ pypy/dist/pypy/lib/_ctypes/basics.py	Fri Feb 15 14:54:24 2008
@@ -2,6 +2,8 @@
 import _rawffi
 import sys
 
+keepalive_key = str # XXX fix this when provided with test
+
 class ArgumentError(Exception):
     pass
 

Modified: pypy/dist/pypy/lib/_ctypes/function.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/function.py	(original)
+++ pypy/dist/pypy/lib/_ctypes/function.py	Fri Feb 15 14:54:24 2008
@@ -1,6 +1,6 @@
 
 import types
-from _ctypes.basics import _CData, _CDataMeta, ArgumentError
+from _ctypes.basics import _CData, _CDataMeta, ArgumentError, keepalive_key
 import _rawffi
 
 class CFuncPtrType(_CDataMeta):
@@ -40,7 +40,7 @@
     def __init__(self, argument=None):
         self.callable = None
         self.name = None
-        self._objects = {'0':self}
+        self._objects = {keepalive_key(0):self}
         if isinstance(argument, int):
             self._buffer = _rawffi.Array('P').fromaddress(argument, 1)
             # XXX finish this one, we need to be able to jump there somehow

Modified: pypy/dist/pypy/lib/_ctypes/pointer.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/pointer.py	(original)
+++ pypy/dist/pypy/lib/_ctypes/pointer.py	Fri Feb 15 14:54:24 2008
@@ -1,7 +1,7 @@
 
 import _rawffi
 from _ctypes.basics import _CData, _CDataMeta, cdata_from_address
-from _ctypes.basics import sizeof, byref
+from _ctypes.basics import sizeof, byref, keepalive_key
 from _ctypes.array import Array, array_get_slice_params, array_slice_getitem,\
      array_slice_setitem
 
@@ -78,7 +78,7 @@
         if not isinstance(value, self._type_):
             raise TypeError("expected %s instead of %s" % (
                 self._type_.__name__, type(value).__name__))
-        self._objects = {'1':value}
+        self._objects = {keepalive_key(1):value}
         value = value._buffer
         self._buffer[0] = value
 

Modified: pypy/dist/pypy/lib/_ctypes/structure.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/structure.py	(original)
+++ pypy/dist/pypy/lib/_ctypes/structure.py	Fri Feb 15 14:54:24 2008
@@ -1,6 +1,6 @@
 
 import _rawffi
-from _ctypes.basics import _CData, _CDataMeta
+from _ctypes.basics import _CData, _CDataMeta, keepalive_key
 import inspect
 
 def round_up(size, alignment):
@@ -165,7 +165,7 @@
         except KeyError:
             raise AttributeError(name)
         if getattr(value, '_objects', None):
-            key = str(getattr(self.__class__, name).offset)
+            key = keepalive_key(getattr(self.__class__, name).offset)
             self.__dict__['_objects'][key] = value._objects
         value = fieldtype._CData_input(value)
         self._buffer.__setattr__(name, value[0])



More information about the Pypy-commit mailing list