mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #13783: the PEP 380 implementation no longer expands the public C API
This commit is contained in:
		
							parent
							
								
									8d5c0b8c19
								
							
						
					
					
						commit
						c40bc09942
					
				
					 6 changed files with 12 additions and 14 deletions
				
			
		|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
| ----------------- | ----------------- | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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 */ | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Nick Coghlan
						Nick Coghlan