[pypy-issue] Issue #2879: ctypes structure with custom __init__ which takes argument does not support construction by "from_buffer_copy" (pypy/pypy)

Sheng Zou issues-reply at bitbucket.org
Thu Aug 30 15:23:31 EDT 2018


New issue 2879: ctypes structure with custom __init__  which takes argument does not support construction by "from_buffer_copy"
https://bitbucket.org/pypy/pypy/issues/2879/ctypes-structure-with-custom-__init__

Sheng Zou:

This is another case where ctypes lib in CPython and PyPy give different result.

Code snippet run in PyPy:

/Users/local/Downloads/pypy-c-jit-95034-d2dd59afa85c-osx64/bin/pypy

Python 2.7.13 (d2dd59afa85c, Aug 29 2018, 22:00:26)

[PyPy 6.1.0-alpha0 with GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)] on darwin


```
#!python

>>>> from ctypes import *
>>>> class CustomStructure(Structure):
....
....     _fields_ = [("a", c_uint16)]
....
....     def __init__(self, flag):
....         if flag is True:
....             self.a = 128
....         else:
....             self.a = 0
....
>>>> x = CustomStructure(True) # This is OK, both in PyPy and CPython
>>>> x = CustomStructure() # This is NOT OK, both in PyPy and CPython
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes exactly 2 arguments (1 given)
>>>> x = CustomStructure.from_buffer_copy(bytearray("\x01\x00")) # This is OK in CPython but NOT OK in PyPy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/local/Downloads/pypy-c-jit-95034-d2dd59afa85c-osx64/lib_pypy/_ctypes/basics.py", line 123, in from_buffer_copy
    result = self()
TypeError: __init__() takes exactly 2 arguments (1 given)
```




More information about the pypy-issue mailing list