[pypy-svn] r52246 - pypy/dist/pypy/lib/_ctypes
fijal at codespeak.net
fijal at codespeak.net
Fri Mar 7 13:07:23 CET 2008
Author: fijal
Date: Fri Mar 7 13:07:23 2008
New Revision: 52246
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/primitive.py
pypy/dist/pypy/lib/_ctypes/structure.py
pypy/dist/pypy/lib/_ctypes/union.py
Log:
use autfree=True feature
Modified: pypy/dist/pypy/lib/_ctypes/array.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/array.py (original)
+++ pypy/dist/pypy/lib/_ctypes/array.py Fri Mar 7 13:07:23 2008
@@ -1,8 +1,8 @@
import _rawffi
-from _ctypes.basics import _CData, cdata_from_address, _CDataMeta, sizeof,\
- keepalive_key, store_reference, CArgObject
+from _ctypes.basics import _CData, cdata_from_address, _CDataMeta, sizeof
+from _ctypes.basics import keepalive_key, store_reference, CArgObject
from _ctypes.builtin import _string_at_addr, _wstring_at_addr
def _create_unicode(buffer, maxlength):
@@ -129,11 +129,9 @@
class Array(_CData):
__metaclass__ = ArrayMeta
_ffiargshape = _ffiletter = 'P'
- _needs_free = False
def __init__(self, *args):
- self._buffer = self._ffiarray(self._length_)
- self._needs_free = True
+ self._buffer = self._ffiarray(self._length_, autofree=True)
self._objects = {}
for i, arg in enumerate(args):
self[i] = arg
@@ -187,12 +185,6 @@
def _get_buffer_value(self):
return self._buffer.buffer
- def __del__(self):
- if self._needs_free:
- self._buffer.free()
- self._buffer = None
- self._needs_free = False
-
ARRAY_CACHE = {}
def create_array_type(base, length):
Modified: pypy/dist/pypy/lib/_ctypes/basics.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/basics.py (original)
+++ pypy/dist/pypy/lib/_ctypes/basics.py Fri Mar 7 13:07:23 2008
@@ -47,8 +47,8 @@
# interested only in value anyway
return cobj._get_buffer_value()
- def _CData_output(self, resbuffer, base=None, index=-1, needs_free=False):
- assert isinstance(resbuffer, _rawffi.ArrayInstance)
+ def _CData_output(self, resbuffer, base=None, index=-1):
+ #assert isinstance(resbuffer, _rawffi.ArrayInstance)
"""Used when data exits ctypes and goes into user code.
'resbuffer' is a _rawffi array of length 1 containing the value,
and this returns a general Python object that corresponds.
@@ -57,11 +57,10 @@
res.__dict__['_buffer'] = resbuffer
res.__dict__['_base'] = base
res.__dict__['_index'] = index
- res.__dict__['_needs_free'] = needs_free
return res.__ctypes_from_outparam__()
def _CData_retval(self, resbuffer):
- return self._CData_output(resbuffer, needs_free=True)
+ return self._CData_output(resbuffer)
def __mul__(self, other):
from _ctypes.array import create_array_type
Modified: pypy/dist/pypy/lib/_ctypes/function.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/function.py (original)
+++ pypy/dist/pypy/lib/_ctypes/function.py Fri Mar 7 13:07:23 2008
@@ -83,8 +83,6 @@
resbuffer = funcptr(*[arg._buffer for obj, arg in args])
if restype is not None:
return restype._CData_retval(resbuffer)
- else:
- resbuffer.free()
def _getfuncptr(self, argtypes, restype):
if restype is None:
Modified: pypy/dist/pypy/lib/_ctypes/pointer.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/pointer.py (original)
+++ pypy/dist/pypy/lib/_ctypes/pointer.py Fri Mar 7 13:07:23 2008
@@ -55,8 +55,7 @@
def set_type(self, TP):
ffiarray = _rawffi.Array('P')
def __init__(self, value=None):
- self._buffer = ffiarray(1)
- self._needs_free = True
+ self._buffer = ffiarray(1, autofree=True)
if value is not None:
self.contents = value
self._ffiarray = ffiarray
@@ -67,7 +66,6 @@
class _Pointer(_CData):
__metaclass__ = PointerType
- _needs_free = False
def getcontents(self):
addr = self._buffer[0]
@@ -106,12 +104,6 @@
def __nonzero__(self):
return self._buffer[0] != 0
- def __del__(self):
- if self._needs_free:
- self._buffer.free()
- self._needs_free = False
- self._buffer = None
-
contents = property(getcontents, setcontents)
@@ -121,9 +113,8 @@
% (tp,))
if isinstance(obj, Array):
ptr = tp.__new__(tp)
- ptr._buffer = tp._ffiarray(1)
+ ptr._buffer = tp._ffiarray(1, autofree=True)
ptr._buffer[0] = obj._buffer
- ptr._needs_free = True
return ptr
if isinstance(obj, (int, long)):
result = tp()
@@ -134,5 +125,4 @@
% (type(obj),))
result = tp()
result._buffer[0] = obj._buffer[0]
- result._needs_free = True
return result
Modified: pypy/dist/pypy/lib/_ctypes/primitive.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/primitive.py (original)
+++ pypy/dist/pypy/lib/_ctypes/primitive.py Fri Mar 7 13:07:23 2008
@@ -198,11 +198,9 @@
class _SimpleCData(_CData):
__metaclass__ = SimpleType
_type_ = 'i'
- _needs_free = False
def __init__(self, value=DEFAULT_VALUE):
- self._needs_free = True
- self._buffer = self._ffiarray(1)
+ self._buffer = self._ffiarray(1, autofree=True)
if value is not DEFAULT_VALUE:
self.value = value
@@ -222,9 +220,3 @@
def __nonzero__(self):
return self._buffer[0] not in (0, '\x00')
-
- def __del__(self):
- if self._needs_free:
- self._needs_free = False
- self._buffer.free()
- self._buffer = None
Modified: pypy/dist/pypy/lib/_ctypes/structure.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/structure.py (original)
+++ pypy/dist/pypy/lib/_ctypes/structure.py Fri Mar 7 13:07:23 2008
@@ -110,8 +110,7 @@
def __init__(self, *args, **kwds):
if not hasattr(self, '_ffistruct'):
raise TypeError("Cannot instantiate structure, has no _fields_")
- self.__dict__['_buffer'] = self._ffistruct()
- self.__dict__['_needs_free'] = True
+ self.__dict__['_buffer'] = self._ffistruct(autofree=True)
self.__dict__['_objects'] = {}
if len(args) > len(self._names):
raise TypeError("too many arguments")
@@ -161,12 +160,10 @@
res.__dict__['_buffer'] = resbuffer
res.__dict__['_base'] = None
res.__dict__['_index'] = -1
- res.__dict__['_needs_free'] = True
return res.__ctypes_from_outparam__()
class Structure(_CData):
__metaclass__ = StructureMeta
- _needs_free = False
def _subarray(self, fieldtype, name):
"""Return a _rawffi array of length 1 whose address is the same as
@@ -207,9 +204,3 @@
def _get_buffer_value(self):
return self._buffer.buffer
-
- def __del__(self):
- if self._needs_free:
- self._buffer.free()
- self.__dict__['_buffer'] = None
- self.__dict__['_needs_free'] = False
Modified: pypy/dist/pypy/lib/_ctypes/union.py
==============================================================================
--- pypy/dist/pypy/lib/_ctypes/union.py (original)
+++ pypy/dist/pypy/lib/_ctypes/union.py Fri Mar 7 13:07:23 2008
@@ -26,8 +26,7 @@
raise TypeError("Cannot instantiate union, has no type")
# malloc size
size = self.__class__._sizeofinstances()
- self.__dict__['_buffer'] = _rawffi.Array('c')(size)
- self.__dict__['_needs_free'] = True
+ self.__dict__['_buffer'] = _rawffi.Array('c')(size, autofree=True)
res.__init__ = __init__
return res
@@ -66,7 +65,6 @@
class Union(_CData):
__metaclass__ = UnionMeta
- _needs_free = False
def __getattr__(self, name):
try:
@@ -83,9 +81,3 @@
raise AttributeError(name)
buf = self._ffiarrays[name].fromaddress(self._buffer.buffer, 1)
buf[0] = fieldtype._CData_value(value)
-
- def __del__(self):
- if self._needs_free:
- self._buffer.free()
- self.__dict__['_buffer'] = None
- self.__dict__['_needs_free'] = False
More information about the Pypy-commit
mailing list