mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	gh-76785: Crossinterp utils additions (gh-111530)
This moves several general internal APIs out of _xxsubinterpretersmodule.c and into the new Python/crossinterp.c (and the corresponding internal headers). Specifically: * _Py_excinfo, etc.: the initial implementation for non-object exception snapshots (in pycore_pyerrors.h and Python/errors.c) * _PyXI_exception_info, etc.: helpers for passing an exception beween interpreters (wraps _Py_excinfo) * _PyXI_namespace, etc.: helpers for copying a dict of attrs between interpreters * _PyXI_Enter(), _PyXI_Exit(): functions that abstract out the transitions between one interpreter and a second that will do some work temporarily Again, these were all abstracted out of _xxsubinterpretersmodule.c as generalizations. I plan on proposing these as public API at some point.
This commit is contained in:
		
							parent
							
								
									cde1071b2a
								
							
						
					
					
						commit
						9322ce90ac
					
				
					 11 changed files with 1309 additions and 472 deletions
				
			
		|  | @ -68,6 +68,30 @@ extern PyStatus _PyErr_InitTypes(PyInterpreterState *); | |||
| extern void _PyErr_FiniTypes(PyInterpreterState *); | ||||
| 
 | ||||
| 
 | ||||
| /* exception snapshots */ | ||||
| 
 | ||||
| // Ultimately we'd like to preserve enough information about the
 | ||||
| // exception and traceback that we could re-constitute (or at least
 | ||||
| // simulate, a la traceback.TracebackException), and even chain, a copy
 | ||||
| // of the exception in the calling interpreter.
 | ||||
| 
 | ||||
| typedef struct _excinfo { | ||||
|     const char *type; | ||||
|     const char *msg; | ||||
| } _Py_excinfo; | ||||
| 
 | ||||
| extern void _Py_excinfo_Clear(_Py_excinfo *info); | ||||
| extern int _Py_excinfo_Copy(_Py_excinfo *dest, _Py_excinfo *src); | ||||
| extern const char * _Py_excinfo_InitFromException( | ||||
|     _Py_excinfo *info, | ||||
|     PyObject *exc); | ||||
| extern void _Py_excinfo_Apply(_Py_excinfo *info, PyObject *exctype); | ||||
| extern const char * _Py_excinfo_AsUTF8( | ||||
|     _Py_excinfo *info, | ||||
|     char *buf, | ||||
|     size_t bufsize); | ||||
| 
 | ||||
| 
 | ||||
| /* other API */ | ||||
| 
 | ||||
| static inline PyObject* _PyErr_Occurred(PyThreadState *tstate) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric Snow
						Eric Snow