Issue #13783: the PEP 380 implementation no longer expands the public C API

This commit is contained in:
Nick Coghlan 2012-06-17 15:15:49 +10:00
parent 8d5c0b8c19
commit c40bc09942
6 changed files with 12 additions and 14 deletions

View File

@ -34,7 +34,7 @@ PyAPI_DATA(PyTypeObject) PyGen_Type;
PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *); PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *);
PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *); PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *);
PyAPI_FUNC(int) PyGen_FetchStopIterationValue(PyObject **); PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
PyObject *_PyGen_Send(PyGenObject *, PyObject *); PyObject *_PyGen_Send(PyGenObject *, PyObject *);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -400,9 +400,6 @@ PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason(
const char *reason /* UTF-8 encoded string */ const char *reason /* UTF-8 encoded string */
); );
/* create a StopIteration exception with the given value */
PyAPI_FUNC(PyObject *) PyStopIteration_Create(PyObject *);
/* These APIs aren't really part of the error implementation, but /* These APIs aren't really part of the error implementation, but
often needed to format error messages; the native C lib APIs are often needed to format error messages; the native C lib APIs are
not available on all platforms, which is why we provide emulations not available on all platforms, which is why we provide emulations

View File

@ -111,6 +111,12 @@ Library
- Issue #14963: Convert contextlib.ExitStack.__exit__ to use an iterative - Issue #14963: Convert contextlib.ExitStack.__exit__ to use an iterative
algorithm (Patch by Alon Horev) algorithm (Patch by Alon Horev)
C-API
-----
- Issue #13783: Inadvertent additions to the public C API in the PEP 380
implementation have either been removed or marked as private interfaces.
Extension Modules Extension Modules
----------------- -----------------

View File

@ -516,12 +516,6 @@ StopIteration_traverse(PyStopIterationObject *self, visitproc visit, void *arg)
return BaseException_traverse((PyBaseExceptionObject *)self, visit, arg); return BaseException_traverse((PyBaseExceptionObject *)self, visit, arg);
} }
PyObject *
PyStopIteration_Create(PyObject *value)
{
return PyObject_CallFunctionObjArgs(PyExc_StopIteration, value, NULL);
}
ComplexExtendsException( ComplexExtendsException(
PyExc_Exception, /* base */ PyExc_Exception, /* base */
StopIteration, /* name */ StopIteration, /* name */

View File

@ -97,7 +97,8 @@ gen_send_ex(PyGenObject *gen, PyObject *arg, int exc)
/* Delay exception instantiation if we can */ /* Delay exception instantiation if we can */
PyErr_SetNone(PyExc_StopIteration); PyErr_SetNone(PyExc_StopIteration);
} else { } else {
PyObject *e = PyStopIteration_Create(result); PyObject *e = PyObject_CallFunctionObjArgs(
PyExc_StopIteration, result, NULL);
if (e != NULL) { if (e != NULL) {
PyErr_SetObject(PyExc_StopIteration, e); PyErr_SetObject(PyExc_StopIteration, e);
Py_DECREF(e); Py_DECREF(e);
@ -339,7 +340,7 @@ gen_throw(PyGenObject *gen, PyObject *args)
Py_DECREF(ret); Py_DECREF(ret);
/* Termination repetition of YIELD_FROM */ /* Termination repetition of YIELD_FROM */
gen->gi_frame->f_lasti++; gen->gi_frame->f_lasti++;
if (PyGen_FetchStopIterationValue(&val) == 0) { if (_PyGen_FetchStopIterationValue(&val) == 0) {
ret = gen_send_ex(gen, val, 0); ret = gen_send_ex(gen, val, 0);
Py_DECREF(val); Py_DECREF(val);
} else { } else {
@ -428,7 +429,7 @@ gen_iternext(PyGenObject *gen)
*/ */
int int
PyGen_FetchStopIterationValue(PyObject **pvalue) { _PyGen_FetchStopIterationValue(PyObject **pvalue) {
PyObject *et, *ev, *tb; PyObject *et, *ev, *tb;
PyObject *value = NULL; PyObject *value = NULL;

View File

@ -1852,7 +1852,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
PyObject *val; PyObject *val;
x = POP(); /* Remove iter from stack */ x = POP(); /* Remove iter from stack */
Py_DECREF(x); Py_DECREF(x);
err = PyGen_FetchStopIterationValue(&val); err = _PyGen_FetchStopIterationValue(&val);
if (err < 0) { if (err < 0) {
x = NULL; x = NULL;
break; break;