Commit 2a70b986 authored by Robert Bradshaw's avatar Robert Bradshaw

Merge branch 'release'

parents 77970aa5 85833152
...@@ -9,6 +9,16 @@ latest ...@@ -9,6 +9,16 @@ latest
Features added Features added
-------------- --------------
Bugs fixed
----------
0.26 (2017-07-xx)
=================
Features added
--------------
* Pythran can be used as a backend for evaluating NumPy array expressions. * Pythran can be used as a backend for evaluating NumPy array expressions.
Patch by Adrien Guinet (Github issue #1607). Patch by Adrien Guinet (Github issue #1607).
...@@ -63,6 +73,8 @@ Bugs fixed ...@@ -63,6 +73,8 @@ Bugs fixed
* Decorators of cdef class methods could be executed twice. * Decorators of cdef class methods could be executed twice.
Patch by jdemeyer (Github issue #1724). Patch by jdemeyer (Github issue #1724).
* Several warnings in the generated coder are now suppressed.
Other changes Other changes
------------- -------------
...@@ -74,6 +86,11 @@ Other changes ...@@ -74,6 +86,11 @@ Other changes
* Access to Python attributes of cimported modules without the corresponding * Access to Python attributes of cimported modules without the corresponding
import is now a compile-time (rather than runtime) error. import is now a compile-time (rather than runtime) error.
* Do not use special dll linkage for "cdef public" functions.
* cdef/cpdef methods must match their declarations. See Github Issue #1732.
This is now a warning and will be an error in future releases.
0.25.2 (2016-12-08) 0.25.2 (2016-12-08)
=================== ===================
......
...@@ -218,8 +218,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -218,8 +218,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
def generate_public_declaration(self, entry, h_code, i_code): def generate_public_declaration(self, entry, h_code, i_code):
h_code.putln("%s %s;" % ( h_code.putln("%s %s;" % (
Naming.extern_c_macro, Naming.extern_c_macro,
entry.type.declaration_code( entry.type.declaration_code(entry.cname)))
entry.cname, dll_linkage="DL_IMPORT")))
if i_code: if i_code:
i_code.putln("cdef extern %s" % ( i_code.putln("cdef extern %s" % (
entry.type.declaration_code(entry.cname, pyrex=1))) entry.type.declaration_code(entry.cname, pyrex=1)))
...@@ -2872,7 +2871,7 @@ def generate_cfunction_declaration(entry, env, code, definition): ...@@ -2872,7 +2871,7 @@ def generate_cfunction_declaration(entry, env, code, definition):
dll_linkage = "DL_IMPORT" dll_linkage = "DL_IMPORT"
elif entry.visibility == 'public': elif entry.visibility == 'public':
storage_class = Naming.extern_c_macro storage_class = Naming.extern_c_macro
dll_linkage = "DL_EXPORT" dll_linkage = None
elif entry.visibility == 'private': elif entry.visibility == 'private':
storage_class = "static" storage_class = "static"
dll_linkage = None dll_linkage = None
......
# cython.* namespace for pure mode. # cython.* namespace for pure mode.
from __future__ import absolute_import from __future__ import absolute_import
__version__ = "0.26b2" __version__ = "0.26rc0"
try: try:
from __builtin__ import basestring from __builtin__ import basestring
......
...@@ -954,6 +954,10 @@ static void __Pyx_FastGilFuncInit(void); ...@@ -954,6 +954,10 @@ static void __Pyx_FastGilFuncInit(void);
// To make optimal use of this thread local, we attempt to share it between // To make optimal use of this thread local, we attempt to share it between
// modules. // modules.
#define __Pyx_FastGIL_ABI_module "_cython_" CYTHON_ABI
#define __Pyx_FastGIL_PyCapsuleName "FastGilFuncs"
#define __Pyx_FastGIL_PyCapsule \
__Pyx_FastGIL_ABI_module "." __Pyx_FastGIL_PyCapsuleName
#if PY_VERSION_HEX >= 0x03050000 #if PY_VERSION_HEX >= 0x03050000
#define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
...@@ -1034,12 +1038,18 @@ static void __Pyx_FastGilFuncInit0(void) { ...@@ -1034,12 +1038,18 @@ static void __Pyx_FastGilFuncInit0(void) {
} }
} }
if (__Pyx_FastGil_autoTLSkey != -1) { if (__Pyx_FastGil_autoTLSkey != -1) {
PyObject* capsule = NULL;
PyObject* abi_module = NULL;
__Pyx_PyGILState_Ensure = __Pyx_FastGil_PyGILState_Ensure; __Pyx_PyGILState_Ensure = __Pyx_FastGil_PyGILState_Ensure;
__Pyx_PyGILState_Release = __Pyx_FastGil_PyGILState_Release; __Pyx_PyGILState_Release = __Pyx_FastGil_PyGILState_Release;
__Pyx_FastGIL_Remember = __Pyx_FastGIL_Remember0; __Pyx_FastGIL_Remember = __Pyx_FastGIL_Remember0;
__Pyx_FastGIL_Forget = __Pyx_FastGIL_Forget0; __Pyx_FastGIL_Forget = __Pyx_FastGIL_Forget0;
// Already fetched earlier, now we're just posting. capsule = PyCapsule_New(&__Pyx_FastGilFuncs, __Pyx_FastGIL_PyCapsule, NULL);
__Pyx_FetchCommonPointer(&__Pyx_FastGilFuncs, "FastGilFuncs"); abi_module = PyImport_AddModule(__Pyx_FastGIL_ABI_module);
if (capsule && abi_module) {
PyObject_SetAttrString(abi_module, __Pyx_FastGIL_PyCapsuleName, capsule);
}
Py_XDECREF(capsule);
} }
} }
...@@ -1053,7 +1063,7 @@ static void __Pyx_FastGilFuncInit0(void) { ...@@ -1053,7 +1063,7 @@ static void __Pyx_FastGilFuncInit0(void) {
static void __Pyx_FastGilFuncInit(void) { static void __Pyx_FastGilFuncInit(void) {
#if PY_VERSION_HEX >= 0x02070000 #if PY_VERSION_HEX >= 0x02070000
struct __Pyx_FastGilVtab* shared = (struct __Pyx_FastGilVtab*)PyCapsule_Import("_cython_" CYTHON_ABI ".FastGilFuncs", 1); struct __Pyx_FastGilVtab* shared = (struct __Pyx_FastGilVtab*)PyCapsule_Import(__Pyx_FastGIL_PyCapsule, 1);
#else #else
struct __Pyx_FastGilVtab* shared = NULL; struct __Pyx_FastGilVtab* shared = NULL;
#endif #endif
......
module_api
complex_numbers_c89_T398_long_double complex_numbers_c89_T398_long_double
complex_numbers_T305_long_double complex_numbers_T305_long_double
int_float_builtins_as_casts_T400_long_double int_float_builtins_as_casts_T400_long_double
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