Hello community,

here is the log from the commit of package python-Cython for openSUSE:Factory 
checked in at 2019-04-18 09:55:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Cython (Old)
 and      /work/SRC/openSUSE:Factory/.python-Cython.new.17052 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-Cython"

Thu Apr 18 09:55:35 2019 rev:48 rq:694800 version:0.29.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Cython/python-Cython-doc.changes  
2019-04-04 12:05:56.585438669 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-Cython.new.17052/python-Cython-doc.changes   
    2019-04-18 09:55:36.769310649 +0200
@@ -1,0 +2,12 @@
+Tue Apr 16 09:26:50 UTC 2019 - Ondřej Súkup <[email protected]>
+
+- update to 0.29.7
+ * Crash when the shared Cython config module gets unloaded and another
+    Cython module reports an exceptions. Cython now makes sure it keeps
+    an owned reference to the module
+ * Resolved a C89 compilation problem when enabling the fast-gil sharing 
feature.
+ * Coverage reporting did not include the signature line of cdef functions
+ * Casting a GIL-requiring function into a nogil function now issues a warning
+ * Generators and coroutines were missing their return type annotation
+
+-------------------------------------------------------------------
python-Cython.changes: same change

Old:
----
  Cython-0.29.6.tar.gz

New:
----
  Cython-0.29.7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-Cython-doc.spec ++++++
--- /var/tmp/diff_new_pack.IZ98LN/_old  2019-04-18 09:55:37.465311087 +0200
+++ /var/tmp/diff_new_pack.IZ98LN/_new  2019-04-18 09:55:37.469311089 +0200
@@ -20,7 +20,7 @@
 # Tests currently fail randomly in OBS multiple local rund do not trigger them
 %bcond_with  test
 Name:           python-Cython-doc
-Version:        0.29.6
+Version:        0.29.7
 Release:        0
 Summary:        The Cython compiler for writing C extensions for the Python 
language
 License:        Apache-2.0

++++++ python-Cython.spec ++++++
--- /var/tmp/diff_new_pack.IZ98LN/_old  2019-04-18 09:55:37.505311112 +0200
+++ /var/tmp/diff_new_pack.IZ98LN/_new  2019-04-18 09:55:37.513311117 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define         oldpython python
 Name:           python-Cython
-Version:        0.29.6
+Version:        0.29.7
 Release:        0
 Summary:        The Cython compiler for writing C extensions for the Python 
language
 License:        Apache-2.0

++++++ Cython-0.29.6.tar.gz -> Cython-0.29.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/.gitrev new/Cython-0.29.7/.gitrev
--- old/Cython-0.29.6/.gitrev   2019-02-27 13:29:00.000000000 +0100
+++ new/Cython-0.29.7/.gitrev   2019-04-14 12:01:43.000000000 +0200
@@ -1 +1 @@
-060e9090e4617a82ebbf7603f58747aa3519931c
+3b3bcbfc3f28259e75e363b3d872e82b35d47f19
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/CHANGES.rst 
new/Cython-0.29.7/CHANGES.rst
--- old/Cython-0.29.6/CHANGES.rst       2019-02-27 13:23:19.000000000 +0100
+++ new/Cython-0.29.7/CHANGES.rst       2019-04-14 12:00:58.000000000 +0200
@@ -2,6 +2,29 @@
 Cython Changelog
 ================
 
+0.29.7 (2019-04-14)
+===================
+
+Bugs fixed
+----------
+
+* Crash when the shared Cython config module gets unloaded and another Cython
+  module reports an exceptions.  Cython now makes sure it keeps an owned 
reference
+  to the module.
+  (Github issue #2885)
+
+* Resolved a C89 compilation problem when enabling the fast-gil sharing 
feature.
+
+* Coverage reporting did not include the signature line of ``cdef`` functions.
+  (Github issue #1461)
+
+* Casting a GIL-requiring function into a nogil function now issues a warning.
+  (Github issue #2879)
+
+* Generators and coroutines were missing their return type annotation.
+  (Github issue #2884)
+
+
 0.29.6 (2019-02-27)
 ===================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/Cython/Compiler/ExprNodes.py 
new/Cython-0.29.7/Cython/Compiler/ExprNodes.py
--- old/Cython-0.29.6/Cython/Compiler/ExprNodes.py      2019-02-27 
13:23:19.000000000 +0100
+++ new/Cython-0.29.7/Cython/Compiler/ExprNodes.py      2019-04-14 
12:00:58.000000000 +0200
@@ -10426,7 +10426,8 @@
                         error(self.pos, "Python objects cannot be cast from 
pointers of primitive types")
                 else:
                     # Should this be an error?
-                    warning(self.pos, "No conversion from %s to %s, python 
object pointer used." % (self.operand.type, self.type))
+                    warning(self.pos, "No conversion from %s to %s, python 
object pointer used." % (
+                        self.operand.type, self.type))
                 self.operand = self.operand.coerce_to_simple(env)
         elif from_py and not to_py:
             if self.type.create_from_py_utility_code(env):
@@ -10435,7 +10436,8 @@
                 if not (self.type.base_type.is_void or 
self.type.base_type.is_struct):
                     error(self.pos, "Python objects cannot be cast to pointers 
of primitive types")
             else:
-                warning(self.pos, "No conversion from %s to %s, python object 
pointer used." % (self.type, self.operand.type))
+                warning(self.pos, "No conversion from %s to %s, python object 
pointer used." % (
+                    self.type, self.operand.type))
         elif from_py and to_py:
             if self.typecheck:
                 self.operand = PyTypeTestNode(self.operand, self.type, env, 
notnone=True)
@@ -10447,6 +10449,13 @@
         elif self.operand.type.is_fused:
             self.operand = self.operand.coerce_to(self.type, env)
             #self.type = self.operand.type
+        if self.type.is_ptr and self.type.base_type.is_cfunction and 
self.type.base_type.nogil:
+            op_type = self.operand.type
+            if op_type.is_ptr:
+                op_type = op_type.base_type
+            if op_type.is_cfunction and not op_type.nogil:
+                warning(self.pos,
+                        "Casting a GIL-requiring function into a nogil 
function circumvents GIL validation", 1)
         return self
 
     def is_simple(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/Cython/Compiler/FlowControl.pxd 
new/Cython-0.29.7/Cython/Compiler/FlowControl.pxd
--- old/Cython-0.29.6/Cython/Compiler/FlowControl.pxd   2015-09-10 
18:25:36.000000000 +0200
+++ new/Cython-0.29.7/Cython/Compiler/FlowControl.pxd   2019-04-14 
12:00:58.000000000 +0200
@@ -11,10 +11,8 @@
      cdef public list stats
      cdef public dict gen
      cdef public set bounded
-     cdef public dict input
-     cdef public dict output
 
-     # Big integer it bitsets
+     # Big integer bitsets
      cdef public object i_input
      cdef public object i_output
      cdef public object i_gen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/Cython/Compiler/ModuleNode.py 
new/Cython-0.29.7/Cython/Compiler/ModuleNode.py
--- old/Cython-0.29.6/Cython/Compiler/ModuleNode.py     2019-02-27 
13:23:19.000000000 +0100
+++ new/Cython-0.29.7/Cython/Compiler/ModuleNode.py     2019-04-14 
12:00:58.000000000 +0200
@@ -2704,11 +2704,11 @@
 #            if entry.type.is_pyobject and entry.used:
 #                code.putln("Py_DECREF(%s); %s = 0;" % (
 #                    code.entry_as_pyobject(entry), entry.cname))
-        code.putln('#if CYTHON_COMPILING_IN_PYPY')
-        code.putln('Py_CLEAR(%s);' % Naming.builtins_cname)
-        code.putln('#endif')
-        code.put_decref_clear(env.module_dict_cname, py_object_type,
-                              nanny=False, clear_before_decref=True)
+        if Options.pre_import is not None:
+            code.put_decref_clear(Naming.preimport_cname, py_object_type,
+                                  nanny=False, clear_before_decref=True)
+        for cname in [env.module_dict_cname, Naming.cython_runtime_cname, 
Naming.builtins_cname]:
+            code.put_decref_clear(cname, py_object_type, nanny=False, 
clear_before_decref=True)
 
     def generate_main_method(self, env, code):
         module_is_main = "%s%s" % (Naming.module_is_main, 
self.full_module_name.replace('.', '__'))
@@ -2815,13 +2815,12 @@
             '%s = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); %s' % (
                 Naming.builtins_cname,
                 code.error_goto_if_null(Naming.builtins_cname, self.pos)))
+        code.put_incref(Naming.builtins_cname, py_object_type, nanny=False)
         code.putln(
             '%s = PyImport_AddModule((char *) "cython_runtime"); %s' % (
                 Naming.cython_runtime_cname,
                 code.error_goto_if_null(Naming.cython_runtime_cname, 
self.pos)))
-        code.putln('#if CYTHON_COMPILING_IN_PYPY')
-        code.putln('Py_INCREF(%s);' % Naming.builtins_cname)
-        code.putln('#endif')
+        code.put_incref(Naming.cython_runtime_cname, py_object_type, 
nanny=False)
         code.putln(
             'if (PyObject_SetAttrString(%s, "__builtins__", %s) < 0) %s;' % (
                 env.module_cname,
@@ -2833,6 +2832,7 @@
                     Naming.preimport_cname,
                     Options.pre_import,
                     code.error_goto_if_null(Naming.preimport_cname, self.pos)))
+            code.put_incref(Naming.preimport_cname, py_object_type, 
nanny=False)
 
     def generate_global_init_code(self, env, code):
         # Generate code to initialise global PyObject *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/Cython/Compiler/Nodes.py 
new/Cython-0.29.7/Cython/Compiler/Nodes.py
--- old/Cython-0.29.6/Cython/Compiler/Nodes.py  2019-02-27 13:23:19.000000000 
+0100
+++ new/Cython-0.29.7/Cython/Compiler/Nodes.py  2019-04-14 12:00:58.000000000 
+0200
@@ -2653,6 +2653,9 @@
                 self.generate_arg_none_check(arg, code)
 
     def generate_execution_code(self, code):
+        if code.globalstate.directives['linetrace']:
+            code.mark_pos(self.pos)
+            code.putln("")  # generate line tracing code
         super(CFuncDefNode, self).generate_execution_code(code)
         if self.py_func_stat:
             self.py_func_stat.generate_execution_code(code)
@@ -7536,12 +7539,14 @@
 
         code.funcstate.in_try_finally = was_in_try_finally
         code.putln("}")
-        code.set_all_labels(old_labels)
 
         temps_to_clean_up = code.funcstate.all_free_managed_temps()
         code.mark_pos(self.finally_clause.pos)
         code.putln("/*finally:*/ {")
 
+        # Reset labels only after writing out a potential line trace call for 
correct nogil error handling.
+        code.set_all_labels(old_labels)
+
         def fresh_finally_clause(_next=[self.finally_clause]):
             # generate the original subtree once and always keep a fresh copy
             node = _next[0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/Cython/Compiler/ParseTreeTransforms.py 
new/Cython-0.29.7/Cython/Compiler/ParseTreeTransforms.py
--- old/Cython-0.29.6/Cython/Compiler/ParseTreeTransforms.py    2018-11-24 
10:20:06.000000000 +0100
+++ new/Cython-0.29.7/Cython/Compiler/ParseTreeTransforms.py    2019-04-14 
12:00:58.000000000 +0200
@@ -2624,7 +2624,8 @@
             pos=node.pos, name=node.name, args=node.args,
             star_arg=node.star_arg, starstar_arg=node.starstar_arg,
             doc=node.doc, decorators=node.decorators,
-            gbody=gbody, lambda_name=node.lambda_name)
+            gbody=gbody, lambda_name=node.lambda_name,
+            return_type_annotation=node.return_type_annotation)
         return coroutine
 
     def visit_CFuncDefNode(self, node):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/Cython/Coverage.py 
new/Cython-0.29.7/Cython/Coverage.py
--- old/Cython-0.29.6/Cython/Coverage.py        2019-01-19 10:25:16.000000000 
+0100
+++ new/Cython-0.29.7/Cython/Coverage.py        2019-04-14 12:00:58.000000000 
+0200
@@ -82,7 +82,7 @@
             #        is not from the main .pyx file but a file with a different
             #        name than the .c file (which prevents us from finding the
             #        .c file)
-            _, code = self._parse_lines(c_file, filename)
+            _, code = self._read_source_lines(c_file, filename)
             if code is None:
                 return None  # no source found
 
@@ -104,7 +104,7 @@
             c_file, _ = self._find_source_files(filename)
             if not c_file:
                 return None  # unknown file
-            rel_file_path, code = self._parse_lines(c_file, filename)
+            rel_file_path, code = self._read_source_lines(c_file, filename)
             if code is None:
                 return None  # no source found
         return CythonModuleReporter(c_file, filename, rel_file_path, code)
@@ -170,14 +170,14 @@
         for filename in os.listdir(dir_path):
             ext = splitext(filename)[1].lower()
             if ext in C_FILE_EXTENSIONS:
-                self._parse_lines(os.path.join(dir_path, filename), 
source_file)
+                self._read_source_lines(os.path.join(dir_path, filename), 
source_file)
                 if source_file in self._c_files_map:
                     return
         # not found? then try one package up
         if is_package_dir(dir_path):
             self._find_c_source_files(os.path.dirname(dir_path), source_file)
 
-    def _parse_lines(self, c_file, sourcefile):
+    def _read_source_lines(self, c_file, sourcefile):
         """
         Parse a Cython generated C/C++ source file and find the executable 
lines.
         Each executable line starts with a comment header that states source 
file
@@ -188,39 +188,7 @@
         if c_file in self._parsed_c_files:
             code_lines = self._parsed_c_files[c_file]
         else:
-            match_source_path_line = re.compile(r' */[*] 
+"(.*)":([0-9]+)$').match
-            match_current_code_line = re.compile(r' *[*] (.*) # 
<<<<<<+$').match
-            match_comment_end = re.compile(r' *[*]/$').match
-            not_executable = re.compile(
-                r'\s*c(?:type)?def\s+'
-                r'(?:(?:public|external)\s+)?'
-                r'(?:struct|union|enum|class)'
-                r'(\s+[^:]+|)\s*:'
-            ).match
-
-            code_lines = defaultdict(dict)
-            filenames = set()
-            with open(c_file) as lines:
-                lines = iter(lines)
-                for line in lines:
-                    match = match_source_path_line(line)
-                    if not match:
-                        continue
-                    filename, lineno = match.groups()
-                    filenames.add(filename)
-                    lineno = int(lineno)
-                    for comment_line in lines:
-                        match = match_current_code_line(comment_line)
-                        if match:
-                            code_line = match.group(1).rstrip()
-                            if not_executable(code_line):
-                                break
-                            code_lines[filename][lineno] = code_line
-                            break
-                        elif match_comment_end(comment_line):
-                            # unexpected comment format - false positive?
-                            break
-
+            code_lines = self._parse_cfile_lines(c_file)
             self._parsed_c_files[c_file] = code_lines
 
         if self._c_files_map is None:
@@ -234,6 +202,57 @@
             return (None,) * 2  # e.g. shared library file
         return self._c_files_map[sourcefile][1:]
 
+    def _parse_cfile_lines(self, c_file):
+        """
+        Parse a C file and extract all source file lines that generated 
executable code.
+        """
+        match_source_path_line = re.compile(r' */[*] +"(.*)":([0-9]+)$').match
+        match_current_code_line = re.compile(r' *[*] (.*) # <<<<<<+$').match
+        match_comment_end = re.compile(r' *[*]/$').match
+        match_trace_line = re.compile(r' *__Pyx_TraceLine\(([0-9]+),').match
+        not_executable = re.compile(
+            r'\s*c(?:type)?def\s+'
+            r'(?:(?:public|external)\s+)?'
+            r'(?:struct|union|enum|class)'
+            r'(\s+[^:]+|)\s*:'
+        ).match
+
+        code_lines = defaultdict(dict)
+        executable_lines = defaultdict(set)
+        current_filename = None
+
+        with open(c_file) as lines:
+            lines = iter(lines)
+            for line in lines:
+                match = match_source_path_line(line)
+                if not match:
+                    if '__Pyx_TraceLine(' in line and current_filename is not 
None:
+                        trace_line = match_trace_line(line)
+                        if trace_line:
+                            
executable_lines[current_filename].add(int(trace_line.group(1)))
+                    continue
+                filename, lineno = match.groups()
+                current_filename = filename
+                lineno = int(lineno)
+                for comment_line in lines:
+                    match = match_current_code_line(comment_line)
+                    if match:
+                        code_line = match.group(1).rstrip()
+                        if not_executable(code_line):
+                            break
+                        code_lines[filename][lineno] = code_line
+                        break
+                    elif match_comment_end(comment_line):
+                        # unexpected comment format - false positive?
+                        break
+
+        # Remove lines that generated code but are not traceable.
+        for filename, lines in code_lines.items():
+            dead_lines = set(lines).difference(executable_lines.get(filename, 
()))
+            for lineno in dead_lines:
+                del lines[lineno]
+        return code_lines
+
 
 class CythonModuleTracer(FileTracer):
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/Cython/Shadow.py 
new/Cython-0.29.7/Cython/Shadow.py
--- old/Cython-0.29.6/Cython/Shadow.py  2019-02-27 13:23:19.000000000 +0100
+++ new/Cython-0.29.7/Cython/Shadow.py  2019-04-14 12:00:58.000000000 +0200
@@ -1,7 +1,7 @@
 # cython.* namespace for pure mode.
 from __future__ import absolute_import
 
-__version__ = "0.29.6"
+__version__ = "0.29.7"
 
 try:
     from __builtin__ import basestring
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/Cython/Utility/ModuleSetupCode.c 
new/Cython-0.29.7/Cython/Utility/ModuleSetupCode.c
--- old/Cython-0.29.6/Cython/Utility/ModuleSetupCode.c  2019-02-08 
20:14:39.000000000 +0100
+++ new/Cython-0.29.7/Cython/Utility/ModuleSetupCode.c  2019-04-14 
12:00:58.000000000 +0200
@@ -1410,8 +1410,9 @@
 
 static PyGILState_STATE __Pyx_FastGil_PyGILState_Ensure(void) {
   int current;
+  PyThreadState *tcur;
   __Pyx_FastGIL_Remember0();
-  PyThreadState *tcur = __Pyx_FastGil_get_tcur();
+  tcur = __Pyx_FastGil_get_tcur();
   if (tcur == NULL) {
     // Uninitialized, need to initialize now.
     return PyGILState_Ensure();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/PKG-INFO new/Cython-0.29.7/PKG-INFO
--- old/Cython-0.29.6/PKG-INFO  2019-02-27 13:29:02.000000000 +0100
+++ new/Cython-0.29.7/PKG-INFO  2019-04-14 12:01:51.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: Cython
-Version: 0.29.6
+Version: 0.29.7
 Summary: The Cython compiler for writing C extensions for the Python language.
 Home-page: http://cython.org/
 Author: Robert Bradshaw, Stefan Behnel, Dag Seljebotn, Greg Ewing, et al.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/tests/errors/e_nogilfunctype.pyx 
new/Cython-0.29.7/tests/errors/e_nogilfunctype.pyx
--- old/Cython-0.29.6/tests/errors/e_nogilfunctype.pyx  2018-09-22 
16:18:56.000000000 +0200
+++ new/Cython-0.29.7/tests/errors/e_nogilfunctype.pyx  2019-04-14 
12:00:58.000000000 +0200
@@ -1,12 +1,18 @@
 # mode: error
+# tag: warnings
 
 cdef extern from *:
-       cdef void f()
-       cdef void (*fp)() nogil
+    cdef void f()
+    cdef void (*fp)() nogil
+    ctypedef void (*fp_t)() nogil
 
 fp = f
-
+fp = <fp_t>f
 
 _ERRORS = u"""
-7:5: Cannot assign type 'void (void)' to 'void (*)(void) nogil'
+9:5: Cannot assign type 'void (void)' to 'void (*)(void) nogil'
+"""
+
+_WARNINGS = """
+10:5: Casting a GIL-requiring function into a nogil function circumvents GIL 
validation
 """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/tests/run/coverage_nogil.srctree 
new/Cython-0.29.7/tests/run/coverage_nogil.srctree
--- old/Cython-0.29.6/tests/run/coverage_nogil.srctree  2015-06-22 
14:53:11.000000000 +0200
+++ new/Cython-0.29.7/tests/run/coverage_nogil.srctree  2019-04-14 
12:00:58.000000000 +0200
@@ -25,19 +25,19 @@
 # cython: linetrace=True
 # distutils: define_macros=CYTHON_TRACE=1 CYTHON_TRACE_NOGIL=1
 
-cdef int func1(int a, int b) nogil:
-    cdef int x                   #  5
-    with gil:                    #  6
-        x = 1                    #  7
-    cdef int c = func2(a) + b    #  8
-    return x + c                 #  9
+cdef int func1(int a, int b) nogil:  #  4
+    cdef int x                       #  5
+    with gil:                        #  6
+        x = 1                        #  7
+    cdef int c = func2(a) + b        #  8
+    return x + c                     #  9
 
 
-cdef int func2(int a) with gil:
+cdef int func2(int a) with gil:  # 12
     return a * 2                 # 13
 
 
-def call(int a, int b):
+def call(int a, int b):          # 16
     a, b = b, a                  # 17
     with nogil:                  # 18
         result = func1(b, a)     # 19
@@ -56,20 +56,18 @@
 from coverage import coverage
 
 
-import coverage_test_nogil
-
-assert not any(coverage_test_nogil.__file__.endswith(ext)
-               for ext in '.py .pyc .pyo .pyw .pyx .pxi'.split()), \
-    coverage_test_nogil.__file__
-
+def run_coverage():
+    cov = coverage()
+    cov.start()
 
-def run_coverage(module):
+    import coverage_test_nogil as module
     module_name = module.__name__
     module_path = module_name + '.pyx'
-
-    cov = coverage()
-    cov.start()
+    assert not any(module.__file__.endswith(ext)
+                   for ext in '.py .pyc .pyo .pyw .pyx .pxi'.split()), \
+        module.__file__
     assert module.call(1, 2) == (1 * 2) + 2 + 1
+
     cov.stop()
 
     out = StringIO()
@@ -84,10 +82,10 @@
 
     executed = set(exec_lines) - set(missing_lines)
     # check that everything that runs with the gil owned was executed
-    assert all(line in executed for line in [13, 17, 18, 20]), '%s / %s' % 
(exec_lines, missing_lines)
+    assert all(line in executed for line in [12, 13, 16, 17, 18, 20]), '%s / 
%s' % (exec_lines, missing_lines)
     # check that everything that runs in nogil sections was executed
-    assert all(line in executed for line in [6, 7, 8, 9]), '%s / %s' % 
(exec_lines, missing_lines)
+    assert all(line in executed for line in [4, 6, 7, 8, 9]), '%s / %s' % 
(exec_lines, missing_lines)
 
 
 if __name__ == '__main__':
-    run_coverage(coverage_test_nogil)
+    run_coverage()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/tests/run/cython3.pyx 
new/Cython-0.29.7/tests/run/cython3.pyx
--- old/Cython-0.29.6/tests/run/cython3.pyx     2018-11-24 10:20:06.000000000 
+0100
+++ new/Cython-0.29.7/tests/run/cython3.pyx     2019-04-14 12:00:58.000000000 
+0200
@@ -551,3 +551,16 @@
     result : int = a + b
 
     return result
+
+
+async def async_def_annotations(x: 'int') -> 'float':
+    """
+    >>> ret, arg = sorted(async_def_annotations.__annotations__.items())
+    >>> print(ret[0]); print(ret[1])
+    return
+    float
+    >>> print(arg[0]); print(arg[1])
+    x
+    int
+    """
+    return float(x)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cython-0.29.6/tests/run/generators_py35.py 
new/Cython-0.29.7/tests/run/generators_py35.py
--- old/Cython-0.29.6/tests/run/generators_py35.py      2018-09-22 
16:18:56.000000000 +0200
+++ new/Cython-0.29.7/tests/run/generators_py35.py      2019-04-14 
12:00:58.000000000 +0200
@@ -22,3 +22,19 @@
             yield i
         raise StopIteration
     return generator
+
+
+def anno_gen(x: 'int') -> 'float':
+    """
+    >>> gen = anno_gen(2)
+    >>> next(gen)
+    2.0
+    >>> ret, arg = sorted(anno_gen.__annotations__.items())
+    >>> print(ret[0]); print(ret[1])
+    return
+    float
+    >>> print(arg[0]); print(arg[1])
+    x
+    int
+    """
+    yield float(x)


Reply via email to