Author: Ronan Lamy <[email protected]>
Branch: py3.5
Changeset: r92458:8d9b5b766682
Date: 2017-09-24 19:52 +0100
http://bitbucket.org/pypy/pypy/changeset/8d9b5b766682/
Log: fix
diff --git a/pypy/module/cpyext/genobject.py b/pypy/module/cpyext/genobject.py
--- a/pypy/module/cpyext/genobject.py
+++ b/pypy/module/cpyext/genobject.py
@@ -1,7 +1,8 @@
+from rpython.rtyper.lltypesystem import lltype
from pypy.interpreter.generator import GeneratorIterator, Coroutine
from pypy.module.cpyext.api import (
- build_type_checkers, cts, parse_dir, bootstrap_function)
-from pypy.module.cpyext.pyobject import make_typedescr, as_pyobj
+ build_type_checkers, cts, parse_dir, bootstrap_function, slot_function)
+from pypy.module.cpyext.pyobject import PyObject, make_typedescr, as_pyobj
from pypy.module.cpyext.object import _dealloc
cts.parse_header(parse_dir / 'cpyext_genobject.h')
@@ -11,7 +12,7 @@
make_typedescr(GeneratorIterator.typedef,
basestruct=cts.gettype('PyGenObject'),
attach=gi_attach,
- dealloc=_dealloc)
+ dealloc=gi_dealloc)
PyGen_Check, PyGen_CheckExact = build_type_checkers("Gen", GeneratorIterator)
@@ -19,11 +20,12 @@
_, PyCoro_CheckExact = build_type_checkers("Coro", Coroutine)
def gi_attach(space, py_obj, w_obj, w_userdata=None):
- py_obj.c_gi_code = as_pyobj(space, w_obj.pycode)
+ cts.cast('PyGenObject*', py_obj).c_gi_code = as_pyobj(space, w_obj.pycode)
def gi_realize(space, py_obj):
raise NotImplementedError(
"PyPy doesn't support creation of generators from the C-API.")
+@slot_function([PyObject], lltype.Void)
def gi_dealloc(space, py_obj):
_dealloc(space, py_obj)
diff --git a/pypy/module/cpyext/include/Python.h
b/pypy/module/cpyext/include/Python.h
--- a/pypy/module/cpyext/include/Python.h
+++ b/pypy/module/cpyext/include/Python.h
@@ -127,6 +127,7 @@
#include "pycapsule.h"
#include "bytesobject.h"
#include "sliceobject.h"
+#include "genobject.h"
#include "datetime.h"
#include "pystate.h"
#include "fileobject.h"
diff --git a/pypy/module/cpyext/test/test_genobject.py
b/pypy/module/cpyext/test/test_genobject.py
--- a/pypy/module/cpyext/test/test_genobject.py
+++ b/pypy/module/cpyext/test/test_genobject.py
@@ -40,15 +40,16 @@
else
Py_RETURN_FALSE;
''')])
+
def it():
yield 42
print(module.is_coroutine(it()))
assert module.is_coroutine(it()) is False
+ self.debug_collect() # don't crash while deallocating
from types import coroutine
assert module.is_coroutine(coroutine(it)()) is True
-
def test_await(self):
"""
module = self.import_extension('test_coroutine', [
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit