J Robert Ray [Thu, 7 Feb 2013 18:03:48 +0000 (10:03 -0800)]
Fully initialize allocated memory.
__pyx_CyFunctionObject.defaults must be fully zeroed or a segfault or
memory corruption may occur if the object is visited by the garbage
collector before defaults is later populated. Uninitialized memory is
cast to PyObject* with undefined results:
static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
{
...
if (m->defaults) {
PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
int i;
for (i = 0; i < m->defaults_pyobjects; i++)
Py_VISIT(pydefaults[i]);
^^^^^^^^^^^^^
Stefan Behnel [Thu, 7 Feb 2013 07:16:27 +0000 (08:16 +0100)]
refactor analyse_types() and friends to work more like a transform by returning the node or a replacement
Stefan Behnel [Wed, 6 Feb 2013 18:41:24 +0000 (19:41 +0100)]
match simple keyword arguments that are passed into cdef function calls out-of-order
Stefan Behnel [Wed, 6 Feb 2013 09:47:23 +0000 (10:47 +0100)]
fix safety coercion after call node optimisation
Stefan Behnel [Wed, 6 Feb 2013 07:34:40 +0000 (08:34 +0100)]
move major part of SimplifyCalls transform into type analysis in GeneralCallNode
Stefan Behnel [Wed, 6 Feb 2013 06:18:53 +0000 (07:18 +0100)]
fix error test after enabling keyword arguments in simple C functions
Stefan Behnel [Wed, 6 Feb 2013 06:17:44 +0000 (07:17 +0100)]
fix compiler crash
Stefan Behnel [Wed, 6 Feb 2013 06:16:49 +0000 (07:16 +0100)]
fix error test after enabling keyword arguments in simple C functions
Stefan Behnel [Tue, 5 Feb 2013 20:38:23 +0000 (21:38 +0100)]
simple optimisation that statically maps keyword arguments to positional arguments when called signature is known
Stefan Behnel [Mon, 4 Feb 2013 21:43:26 +0000 (22:43 +0100)]
add some more typing in FlowControl.py
Stefan Behnel [Mon, 4 Feb 2013 21:22:03 +0000 (22:22 +0100)]
disable incorrect optimisation for set.discard()
Stefan Behnel [Mon, 4 Feb 2013 18:34:05 +0000 (19:34 +0100)]
minor tweak
Stefan Behnel [Mon, 4 Feb 2013 17:54:37 +0000 (18:54 +0100)]
declare some classes in FlowControl.py final to speed up internal method calls
Stefan Behnel [Mon, 4 Feb 2013 17:42:58 +0000 (18:42 +0100)]
clean up and improve static type declarations in FlowControl.py a bit
Stefan Behnel [Mon, 4 Feb 2013 17:04:31 +0000 (18:04 +0100)]
slight code simplification
Stefan Behnel [Sat, 2 Feb 2013 10:26:01 +0000 (11:26 +0100)]
extend test case
Stefan Behnel [Fri, 1 Feb 2013 22:10:24 +0000 (23:10 +0100)]
rst fix
Stefan Behnel [Fri, 1 Feb 2013 22:02:23 +0000 (23:02 +0100)]
clean up the C library wrapping tutorial a bit and add a section on callbacks
Stefan Behnel [Fri, 1 Feb 2013 21:23:42 +0000 (22:23 +0100)]
clarify comment in example
Robert Bradshaw [Fri, 1 Feb 2013 17:46:57 +0000 (09:46 -0800)]
Oops, we do handle raise MemoryError() gracefully.
Robert Bradshaw [Fri, 1 Feb 2013 17:43:14 +0000 (09:43 -0800)]
Undo a couple of documentation fixes (where the old style was intentional).
Yury V. Zaytsev [Fri, 1 Feb 2013 14:26:18 +0000 (15:26 +0100)]
Fix one instance of code highlighting
Yury V. Zaytsev [Fri, 1 Feb 2013 14:25:25 +0000 (15:25 +0100)]
Fix various typos in the documentation
Yury V. Zaytsev [Fri, 1 Feb 2013 14:22:02 +0000 (15:22 +0100)]
Update code samples to use newer Cython / Python syntax
Yury V. Zaytsev [Fri, 1 Feb 2013 14:20:20 +0000 (15:20 +0100)]
Fix broken code samples (indent, spaces, failing doctest)
Yury V. Zaytsev [Fri, 1 Feb 2013 14:16:28 +0000 (15:16 +0100)]
Prefer the use of C++ style pointer declarations (char *c -> char* c)
Yury V. Zaytsev [Fri, 1 Feb 2013 14:13:45 +0000 (15:13 +0100)]
Remove extra commas before colons (,:: -> ::)
Yury V. Zaytsev [Fri, 1 Feb 2013 14:09:48 +0000 (15:09 +0100)]
Introduce more consistent capitalization of Python, Cython and NumPy
Yury V. Zaytsev [Fri, 1 Feb 2013 14:04:07 +0000 (15:04 +0100)]
Fix some internal and external links in the documentation
Stefan Behnel [Wed, 30 Jan 2013 07:04:45 +0000 (08:04 +0100)]
merge 0.18.x branch into master
Stefan Behnel [Wed, 30 Jan 2013 07:04:10 +0000 (08:04 +0100)]
remove warning about missing 'const' support from docs and fix advice on declaring macros as 'enum' (which works only for ints)
Stefan Behnel [Tue, 29 Jan 2013 06:40:03 +0000 (07:40 +0100)]
exclude test in Py2.4
Stefan Behnel [Mon, 28 Jan 2013 21:46:51 +0000 (22:46 +0100)]
Added tag 0.18 for changeset
76f33728e853
Stefan Behnel [Mon, 28 Jan 2013 21:45:32 +0000 (22:45 +0100)]
increase master version to 0.19-dev
Stefan Behnel [Mon, 28 Jan 2013 21:44:28 +0000 (22:44 +0100)]
merge 0.18.x branch into master
Stefan Behnel [Mon, 28 Jan 2013 21:27:24 +0000 (22:27 +0100)]
prepare release of 0.18
Stefan Behnel [Mon, 28 Jan 2013 21:04:04 +0000 (22:04 +0100)]
fix a corner case where float(x) would not call x.__float__() for a float subtype
Stefan Behnel [Mon, 28 Jan 2013 07:00:48 +0000 (08:00 +0100)]
Added tag 0.18rc1 for changeset
9a11631e0edb
Stefan Behnel [Mon, 28 Jan 2013 07:00:11 +0000 (08:00 +0100)]
merge 0.18.x branch into master
scoder [Mon, 28 Jan 2013 06:52:41 +0000 (22:52 -0800)]
Merge pull request #179 from cgohlke/patch-3
Fix overflow_check CompileError with msvc
Christoph Gohlke [Sun, 27 Jan 2013 18:07:01 +0000 (10:07 -0800)]
Fix overflow_check CompileError with msvc
--HG--
extra : transplant_source : %3FH%B6t%1FFL%D8%2BF%7CV%7D%10T9%EA%CB%A0%00
Christoph Gohlke [Sun, 27 Jan 2013 18:07:01 +0000 (10:07 -0800)]
Fix overflow_check CompileError with msvc
Stefan Behnel [Sun, 27 Jan 2013 14:12:02 +0000 (15:12 +0100)]
fix doctest dependency on dict order
Stefan Behnel [Sun, 27 Jan 2013 12:18:05 +0000 (13:18 +0100)]
set version to 0.18rc1
Stefan Behnel [Sun, 27 Jan 2013 10:22:21 +0000 (11:22 +0100)]
enable control flow analysis for stack allocated structured variables (struct, union, array, C++ class)
Stefan Behnel [Sun, 27 Jan 2013 05:47:44 +0000 (06:47 +0100)]
simplify code a bit
Stefan Behnel [Sun, 27 Jan 2013 05:45:58 +0000 (06:45 +0100)]
use interned Python string constant instead of calling through __Pyx_GetAttrString()
Stefan Behnel [Sun, 27 Jan 2013 05:16:47 +0000 (06:16 +0100)]
merge 0.18.x branch into master
Stefan Behnel [Sun, 27 Jan 2013 05:16:30 +0000 (06:16 +0100)]
fix C compiler warnings about missing PyModuleDef field initialisers in Py3.[01]
Stefan Behnel [Sun, 27 Jan 2013 04:56:27 +0000 (05:56 +0100)]
merge 0.18.x branch into master
Stefan Behnel [Sun, 27 Jan 2013 04:56:12 +0000 (05:56 +0100)]
fix new test in Py2.[45]
Stefan Behnel [Sat, 26 Jan 2013 21:24:46 +0000 (22:24 +0100)]
rewrite except-as semantics using try-finally - seems to be the easiest way to get flow control analysis working for all cases
Stefan Behnel [Sat, 26 Jan 2013 18:20:35 +0000 (19:20 +0100)]
merge 0.18.x branch into master
scoder [Sat, 26 Jan 2013 18:19:07 +0000 (10:19 -0800)]
Merge pull request #164 from strohel/master
Add test for memoryview of extension type
Stefan Behnel [Sat, 26 Jan 2013 18:15:39 +0000 (19:15 +0100)]
merge 0.18.x branch into master
scoder [Sat, 26 Jan 2013 18:11:48 +0000 (10:11 -0800)]
Merge pull request #178 from strohel/cpp-catch-in-nogil
Fix calling an "except +" cpp function in a nogil function
Stefan Behnel [Sat, 26 Jan 2013 13:53:30 +0000 (14:53 +0100)]
enable except-as target deletion only when language level is 3
Stefan Behnel [Sat, 26 Jan 2013 13:23:47 +0000 (14:23 +0100)]
disable broken optimisation for except-as special case
Stefan Behnel [Sat, 26 Jan 2013 12:55:16 +0000 (13:55 +0100)]
remove some code redundancy
Stefan Behnel [Sat, 26 Jan 2013 12:15:04 +0000 (13:15 +0100)]
extend except-as test case
Stefan Behnel [Sat, 26 Jan 2013 12:06:57 +0000 (13:06 +0100)]
make except-as delete the target after the except clause
Stefan Behnel [Sat, 26 Jan 2013 10:06:46 +0000 (11:06 +0100)]
merge 0.18.x branch into master
Stefan Behnel [Sat, 26 Jan 2013 10:06:26 +0000 (11:06 +0100)]
fix test when using NumPy 1.7
Stefan Behnel [Sat, 26 Jan 2013 09:57:20 +0000 (10:57 +0100)]
merge 0.18.x branch into master
Stefan Behnel [Sat, 26 Jan 2013 09:54:04 +0000 (10:54 +0100)]
fix new memory view error test in Py2.4
--HG--
extra : transplant_source : %8A%F1%17%5C%A7%CA%1C%B1%17%A1%C5t%06O%5BI%F2%19Vq
Stefan Behnel [Sat, 26 Jan 2013 09:54:04 +0000 (10:54 +0100)]
fix new memory view error test in Py2.4
Matěj Laitl [Fri, 25 Jan 2013 10:27:49 +0000 (11:27 +0100)]
Fix calling an "except +" cpp function in a nogil function
For a source:
|cdef extern from "<foo>":
| cdef void foo_cpp() nogil except +
|
|cdef call_foo() nogil:
| foo_cpp()
We used to generate something like this to actually call foo_cpp() in call_foo():
|try{foo_cpp();}
|catch(...) {
| Py_BLOCK_THREADS; __Pyx_CppExn2PyErr(); Py_UNBLOCK_THREADS
| `code.error_goto(self.pos))`
|}
where Py_BLOCK_THREADS expands to "PyEval_RestoreThread(_save);".
__Pyx_CppExn2PyErr() (and alternatives, see SimpleCallNode) calls CPython A API
methods so it needs to be guarded in a nogil environment.
One problem is that "PyThreadState *_save" is only declared by "with nogil:"
block, so a .cpp file that doesn't compile is generated for the above code.
However, I think the real issue is that Py_(UN)BLOCK_THREADS is inappropriate
here, as it isn't allowed to be called recursively and is valid only directly
in a Py_BEGIN_ALLOW_THREADS ... Py_END_ALLOW_THREADS. IMO PyGILState_Ensure()
and PyGILState_Release() (through `code.put_ensure_gil()` and a friend) is the
correct thing to call here as it is allowed to be called recursively and
actually ensures the current thread can call CPython C API.
This patch does exactly this (and it breaks the generated code to multiple
lines as it would be way too long otherwise), plus it extends the
cpp_exceptions_nogil.pyx test with above example that doesn't compile with this
fix not applied.
Note that we explicitly pass declare_gilstate=True to put_ensure_gil(), as
PyGILState_Ensure() docs state that recursive calls to it must not share the
PyGILState_STATE. C++-style declaring a variable inside a block should be
no-problem here, as try{} .. catch() is obviously valid only in a C++ code.
--HG--
extra : transplant_source : %AA%F3%BDk%FE%F9%01%7F%8C%A4n%5E%DA4%97%A5%D9%AF%D60
Stefan Behnel [Sat, 26 Jan 2013 18:15:09 +0000 (19:15 +0100)]
changelog
Matěj Laitl [Fri, 25 Jan 2013 10:27:49 +0000 (11:27 +0100)]
Fix calling an "except +" cpp function in a nogil function
For a source:
|cdef extern from "<foo>":
| cdef void foo_cpp() nogil except +
|
|cdef call_foo() nogil:
| foo_cpp()
We used to generate something like this to actually call foo_cpp() in call_foo():
|try{foo_cpp();}
|catch(...) {
| Py_BLOCK_THREADS; __Pyx_CppExn2PyErr(); Py_UNBLOCK_THREADS
| `code.error_goto(self.pos))`
|}
where Py_BLOCK_THREADS expands to "PyEval_RestoreThread(_save);".
__Pyx_CppExn2PyErr() (and alternatives, see SimpleCallNode) calls CPython A API
methods so it needs to be guarded in a nogil environment.
One problem is that "PyThreadState *_save" is only declared by "with nogil:"
block, so a .cpp file that doesn't compile is generated for the above code.
However, I think the real issue is that Py_(UN)BLOCK_THREADS is inappropriate
here, as it isn't allowed to be called recursively and is valid only directly
in a Py_BEGIN_ALLOW_THREADS ... Py_END_ALLOW_THREADS. IMO PyGILState_Ensure()
and PyGILState_Release() (through `code.put_ensure_gil()` and a friend) is the
correct thing to call here as it is allowed to be called recursively and
actually ensures the current thread can call CPython C API.
This patch does exactly this (and it breaks the generated code to multiple
lines as it would be way too long otherwise), plus it extends the
cpp_exceptions_nogil.pyx test with above example that doesn't compile with this
fix not applied.
Note that we explicitly pass declare_gilstate=True to put_ensure_gil(), as
PyGILState_Ensure() docs state that recursive calls to it must not share the
PyGILState_STATE. C++-style declaring a variable inside a block should be
no-problem here, as try{} .. catch() is obviously valid only in a C++ code.
Robert Bradshaw [Fri, 25 Jan 2013 07:37:11 +0000 (23:37 -0800)]
Merge pull request #177 from strohel/propagate-error-memoryview
Fix error propagation from memoryview-returning functions
Matěj Laitl [Thu, 24 Jan 2013 10:59:23 +0000 (11:59 +0100)]
Fix error propagation from memoryview-returning functions
A code like
|cdef double[:] foo():
| raise AttributeError('dummy')
generated C code like this:
| __pyx_L1_error:;
| (...)
| __pyx_r.memview = NULL;
| __Pyx_AddTraceback("view_return_errors.foo", __pyx_clineno, __pyx_lineno, __pyx_filename);
| __pyx_L0:;
| if (unlikely(!__pyx_r.memview)) {
| PyErr_SetString(PyExc_TypeError,"Memoryview return value is not initialized");
| }
| __Pyx_RefNannyFinishContext();
| return __pyx_r;
|}
Which is incorrect in error case, because we set __pyx_r.memview to NULL and
then we test it, so that the PyErr_SetString() is always called in the error
case, which swallows previously-set error. (it also swallowed the traceback,
which I don't understand)
A fix is to jump to return_from_error_cleanup label in case return type is
memoryview, as it is currently done for the case when buffers are present.
A testcase that fauils w/out this fix applied is included, too.
v2: fix test under Python 3 by not using StandardError
--HG--
extra : transplant_source : G%B5%99Og%D1%81%25k%8F%1F%7B%02V%3E%B9%A4y%FF%EA
Matěj Laitl [Thu, 24 Jan 2013 10:59:23 +0000 (11:59 +0100)]
Fix error propagation from memoryview-returning functions
A code like
|cdef double[:] foo():
| raise AttributeError('dummy')
generated C code like this:
| __pyx_L1_error:;
| (...)
| __pyx_r.memview = NULL;
| __Pyx_AddTraceback("view_return_errors.foo", __pyx_clineno, __pyx_lineno, __pyx_filename);
| __pyx_L0:;
| if (unlikely(!__pyx_r.memview)) {
| PyErr_SetString(PyExc_TypeError,"Memoryview return value is not initialized");
| }
| __Pyx_RefNannyFinishContext();
| return __pyx_r;
|}
Which is incorrect in error case, because we set __pyx_r.memview to NULL and
then we test it, so that the PyErr_SetString() is always called in the error
case, which swallows previously-set error. (it also swallowed the traceback,
which I don't understand)
A fix is to jump to return_from_error_cleanup label in case return type is
memoryview, as it is currently done for the case when buffers are present.
A testcase that fauils w/out this fix applied is included, too.
v2: fix test under Python 3 by not using StandardError
Matěj Laitl [Thu, 29 Nov 2012 21:50:08 +0000 (22:50 +0100)]
Add test for memoryview of extension type
A test for a bug fixed in commit
478b939a4c99a77c0863cfd.
v2: add commit link above
v3: # tag: instead of # tags:, drop cpp tag as it means something different
that I originally thought
There was a bug that produced C code where gcc emitted warnings:
extension_type_memoryview.c: In function ‘__pyx_pf_25extension_type_memoryview_test_getitem’:
extension_type_memoryview.c:1468:15: warning: assignment from incompatible pointer type
extension_type_memoryview.c: In function ‘__pyx_pf_25extension_type_memoryview_2test_getitem_typed’:
extension_type_memoryview.c:1565:15: warning: assignment from incompatible pointer type
extension_type_memoryview.c:1568:18: warning: assignment from incompatible pointer type
And g++ failed with errors:
extension_type_memoryview.c: In function ‘PyObject* __pyx_pf_25extension_type_memoryview_test_getitem(PyObject*)’:
extension_type_memoryview.c:1468:213: error: cannot convert ‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ to ‘PyObject*’ in assignment
extension_type_memoryview.c: In function ‘PyObject* __pyx_pf_25extension_type_memoryview_2test_getitem_typed(PyObject*)’:
extension_type_memoryview.c:1565:213: error: cannot convert ‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ to ‘PyObject*’ in assignment
extension_type_memoryview.c:1568:20: error: cannot convert ‘PyObject*’ to ‘__pyx_obj_25extension_type_memoryview_ExtensionType*’ in assignment
Robert Bradshaw [Tue, 22 Jan 2013 01:17:10 +0000 (17:17 -0800)]
Merge pull request #176 from larsmans/fix-indent
fix indentation error in userguide
Lars Buitinck [Mon, 21 Jan 2013 08:54:39 +0000 (09:54 +0100)]
fix indentation error in userguide
--HG--
extra : transplant_source : %7B%A4%F1%C4/%E4l%2C_%BFF%5B%B7%9C%9F%E0_%2B%15%3D
Lars Buitinck [Mon, 21 Jan 2013 08:54:39 +0000 (09:54 +0100)]
fix indentation error in userguide
Stefan Behnel [Mon, 21 Jan 2013 07:42:57 +0000 (08:42 +0100)]
merge 0.18.x branch back into master
Stefan Behnel [Mon, 21 Jan 2013 07:42:11 +0000 (08:42 +0100)]
fix compiler crash in error case
Stefan Behnel [Mon, 21 Jan 2013 06:50:23 +0000 (07:50 +0100)]
optimise abs(long long)
Stefan Behnel [Mon, 21 Jan 2013 06:47:37 +0000 (07:47 +0100)]
merge 0.18.x branch back into master
Stefan Behnel [Mon, 21 Jan 2013 06:22:10 +0000 (07:22 +0100)]
avoid unused utility code for abs()
Stefan Behnel [Mon, 21 Jan 2013 06:18:17 +0000 (07:18 +0100)]
simplify abs() optimisation for C integers and fix it for the most negative int/long value
Stefan Behnel [Sun, 20 Jan 2013 20:50:38 +0000 (21:50 +0100)]
fix test
Stefan Behnel [Sun, 20 Jan 2013 16:36:39 +0000 (17:36 +0100)]
suppress C compiler warning on power operation on unsigned C int types
Stefan Behnel [Sun, 20 Jan 2013 16:11:24 +0000 (17:11 +0100)]
improve test output in failure case
Stefan Behnel [Sun, 20 Jan 2013 08:30:30 +0000 (09:30 +0100)]
Added tag 0.18b1 for changeset
c1a18ab6b080
Stefan Behnel [Sun, 20 Jan 2013 08:29:38 +0000 (09:29 +0100)]
merge 0.18.x branch back into master
Stefan Behnel [Sun, 20 Jan 2013 07:08:15 +0000 (08:08 +0100)]
move exception class into shadow function as we may not want to export it under the cython.* namespace at this point
Stefan Behnel [Sat, 19 Jan 2013 19:47:29 +0000 (20:47 +0100)]
remove references to 'minierror' module from Shadow.py
Stefan Behnel [Sat, 19 Jan 2013 13:14:16 +0000 (14:14 +0100)]
undo code removal - not entirely clear what to make of it
Stefan Behnel [Sat, 19 Jan 2013 13:08:35 +0000 (14:08 +0100)]
set version to 0.18b1
Stefan Behnel [Sat, 19 Jan 2013 13:08:01 +0000 (14:08 +0100)]
removed broken minivect related code from branch since minivect will not be released as part of 0.18
Stefan Behnel [Fri, 18 Jan 2013 13:58:28 +0000 (14:58 +0100)]
implement relative import support for .pxd files in cythonize()
Stefan Behnel [Fri, 18 Jan 2013 13:36:58 +0000 (14:36 +0100)]
merge 0.18 branch back into master
Stefan Behnel [Fri, 18 Jan 2013 13:36:40 +0000 (14:36 +0100)]
work around missing relative cimport support in cythonize()
Stefan Behnel [Fri, 18 Jan 2013 13:31:33 +0000 (14:31 +0100)]
merge 0.18 branch back into master
Stefan Behnel [Fri, 18 Jan 2013 13:30:04 +0000 (14:30 +0100)]
changelog
Stefan Behnel [Fri, 18 Jan 2013 13:11:00 +0000 (14:11 +0100)]
fix cimport in libcpp.string
Stefan Behnel [Fri, 18 Jan 2013 13:06:26 +0000 (14:06 +0100)]
update 'const' section in string handling tutorial to reflect the new 'const' language support
Stefan Behnel [Fri, 18 Jan 2013 12:55:38 +0000 (13:55 +0100)]
replace 'const_xyz' work-arounds in standard .pxd files by real 'const' declarations