Commit 9ad73800 authored by Stefan Behnel's avatar Stefan Behnel

merge 0.19.x branch into master

parents 2f575a61 049a0fe9
...@@ -70,6 +70,13 @@ Features added ...@@ -70,6 +70,13 @@ Features added
Bugs fixed Bugs fixed
---------- ----------
* Some standard declarations were fixed or updated, including the previously
incorrect declaration of ``PyBuffer_FillInfo()`` and some missing bits in
``libc.math``.
* Heap allocated subtypes of ``type`` used the wrong base type struct at the
C level.
* Calling the unbound method dict.keys/value/items() in dict subtypes could * Calling the unbound method dict.keys/value/items() in dict subtypes could
call the bound object method instead of the unbound supertype method. call the bound object method instead of the unbound supertype method.
......
...@@ -122,9 +122,9 @@ cdef extern from *: # Hard-coded utility code hack. ...@@ -122,9 +122,9 @@ cdef extern from *: # Hard-coded utility code hack.
# fast resize/realloc # fast resize/realloc
# not suitable for small increments; reallocation 'to the point' # not suitable for small increments; reallocation 'to the point'
int resize(array self, Py_ssize_t n) int resize(array self, Py_ssize_t n) except -1
# efficient for small increments (not in Py2.3-) # efficient for small increments (not in Py2.3-)
int resize_smart(array self, Py_ssize_t n) int resize_smart(array self, Py_ssize_t n) except -1
cdef inline array clone(array template, Py_ssize_t length, bint zero): cdef inline array clone(array template, Py_ssize_t length, bint zero):
...@@ -144,17 +144,17 @@ cdef inline array copy(array self): ...@@ -144,17 +144,17 @@ cdef inline array copy(array self):
memcpy(op.data.as_chars, self.data.as_chars, Py_SIZE(op) * op.ob_descr.itemsize) memcpy(op.data.as_chars, self.data.as_chars, Py_SIZE(op) * op.ob_descr.itemsize)
return op return op
cdef inline int extend_buffer(array self, char* stuff, Py_ssize_t n): cdef inline int extend_buffer(array self, char* stuff, Py_ssize_t n) except -1:
""" efficent appending of new stuff of same type """ efficent appending of new stuff of same type
(e.g. of same array type) (e.g. of same array type)
n: number of elements (not number of bytes!) """ n: number of elements (not number of bytes!) """
cdef Py_ssize_t itemsize = self.ob_descr.itemsize cdef Py_ssize_t itemsize = self.ob_descr.itemsize
cdef Py_ssize_t orgsize = Py_SIZE(self) cdef Py_ssize_t orgsize = Py_SIZE(self)
if resize_smart(self, orgsize + n) == -1: resize_smart(self, orgsize + n)
return -1
memcpy(self.data.as_chars + orgsize * itemsize, stuff, n * itemsize) memcpy(self.data.as_chars + orgsize * itemsize, stuff, n * itemsize)
return 0
cdef inline int extend(array self, array other) except -2: cdef inline int extend(array self, array other) except -1:
""" extend array with data from another array; types must match. """ """ extend array with data from another array; types must match. """
if self.ob_descr.typecode != other.ob_descr.typecode: if self.ob_descr.typecode != other.ob_descr.typecode:
PyErr_BadArgument() PyErr_BadArgument()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment