I'm having trouble getting even 'Array(c_void_p)' to work. It either outputs nothing and opens a new line with another >>> prompt, that has some functionality disabled (eg, prompt history), or complains >>> x = Array(c_void_p, []) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: abstract class .
Julian Foad wrote on Mon, Aug 15, 2011 at 17:39:55 +0100: > For anyone interested: I'm trying to debug a memory problem in the > ctypes-python bindings Array class which models an apr_array_header_t > array. I suppose this class may never have worked properly, as it gets > exercised very little within the bindings and had no unit test cases > until today. > > Running within its test suite it mostly works, but there appears to be a > problem in making a deep copy of, or holding onto a reference to, each > element when a new array is initialized. > > A simple demonstration in the Python interpreter: > > $ (cd subversion/bindings/ctypes-python/ && python -i > test/setup_path.py) > >>> from csvn.core import * > >>> from csvn.types import Array > >>> a1 = Array(c_char_p, ['one']) > >>> a1 > Array(['Array(']) > > The last line should have shown "Array(['one'])", but it printed garbage > from the Python interpreter's memory. This is so bad that I wonder if > my expectations are wrong. > > The attached patch contains various changes and additions that I tried > unsuccessfully, and it adds tests that all pass (for me) except for the > places where they extend an Array with another (or the same) array. > Initially I thought the problem was only with self-referencing, because > I saw the failures in expressions such as "a1.extend(a1)", but now I am > noticing the same effect more widely. > > Any hints appreciated. > > - Julian >