mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef Py_CEVAL_H
 | |
| #define Py_CEVAL_H
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /***********************************************************
 | |
| Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
 | |
| The Netherlands.
 | |
| 
 | |
|                         All Rights Reserved
 | |
| 
 | |
| Permission to use, copy, modify, and distribute this software and its 
 | |
| documentation for any purpose and without fee is hereby granted, 
 | |
| provided that the above copyright notice appear in all copies and that
 | |
| both that copyright notice and this permission notice appear in 
 | |
| supporting documentation, and that the names of Stichting Mathematisch
 | |
| Centrum or CWI not be used in advertising or publicity pertaining to
 | |
| distribution of the software without specific, written prior permission.
 | |
| 
 | |
| STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
 | |
| THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
 | |
| FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
 | |
| FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | |
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 | |
| OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | |
| 
 | |
| ******************************************************************/
 | |
| 
 | |
| /* Interface to random parts in ceval.c */
 | |
| 
 | |
| PyObject *PyEval_CallObject Py_PROTO((PyObject *, PyObject *));
 | |
| PyObject *PyEval_CallObjectWithKeywords
 | |
| 	Py_PROTO((PyObject *, PyObject *, PyObject *));
 | |
| 
 | |
| PyObject *PyEval_GetBuiltins Py_PROTO((void));
 | |
| PyObject *PyEval_GetGlobals Py_PROTO((void));
 | |
| PyObject *PyEval_GetLocals Py_PROTO((void));
 | |
| PyObject *PyEval_GetOwner Py_PROTO((void));
 | |
| PyObject *PyEval_GetFrame Py_PROTO((void));
 | |
| int PyEval_GetRestricted Py_PROTO((void));
 | |
| 
 | |
| void Py_FlushLine Py_PROTO((void));
 | |
| 
 | |
| int Py_AddPendingCall Py_PROTO((int (*func) Py_PROTO((ANY *)), ANY *arg));
 | |
| int Py_MakePendingCalls Py_PROTO((void));
 | |
| 
 | |
| 
 | |
| /* Interface for threads.
 | |
| 
 | |
|    A module that plans to do a blocking system call (or something else
 | |
|    that lasts a long time and doesn't touch Python data) can allow other
 | |
|    threads to run as follows:
 | |
| 
 | |
| 	...preparations here...
 | |
| 	Py_BEGIN_ALLOW_THREADS
 | |
| 	...blocking system call here...
 | |
| 	Py_END_ALLOW_THREADS
 | |
| 	...interpret result here...
 | |
| 
 | |
|    The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a
 | |
|    {}-surrounded block.
 | |
|    To leave the block in the middle (e.g., with return), you must insert
 | |
|    a line containing RET_SAVE before the return, e.g.
 | |
| 
 | |
| 	if (...premature_exit...) {
 | |
| 		Py_BLOCK_THREADS
 | |
| 		PyErr_SetFromErrno(PyExc_IOError);
 | |
| 		return NULL;
 | |
| 	}
 | |
| 
 | |
|    An alternative is:
 | |
| 
 | |
| 	Py_BLOCK_THREADS
 | |
| 	if (...premature_exit...) {
 | |
| 		PyErr_SetFromErrno(PyExc_IOError);
 | |
| 		return NULL;
 | |
| 	}
 | |
| 	Py_UNBLOCK_THREADS
 | |
| 
 | |
|    For convenience, that the value of 'errno' is restored across
 | |
|    Py_END_ALLOW_THREADS and RET_SAVE.
 | |
| 
 | |
|    WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND
 | |
|    Py_END_ALLOW_THREADS!!!
 | |
| 
 | |
|    The function PyEval_InitThreads() should be called only from
 | |
|    initthread() in "threadmodule.c".
 | |
| 
 | |
|    Note that not yet all candidates have been converted to use this
 | |
|    mechanism!
 | |
| */
 | |
| 
 | |
| extern void PyEval_InitThreads Py_PROTO((void));
 | |
| extern PyObject *PyEval_SaveThread Py_PROTO((void));
 | |
| extern void PyEval_RestoreThread Py_PROTO((PyObject *));
 | |
| 
 | |
| #ifdef WITH_THREAD
 | |
| 
 | |
| #define Py_BEGIN_ALLOW_THREADS { \
 | |
| 			PyObject *_save; \
 | |
| 			_save = PyEval_SaveThread();
 | |
| #define Py_BLOCK_THREADS	PyEval_RestoreThread(_save);
 | |
| #define Py_UNBLOCK_THREADS	_save = PyEval_SaveThread();
 | |
| #define Py_END_ALLOW_THREADS	PyEval_RestoreThread(_save); \
 | |
| 		 }
 | |
| 
 | |
| #else /* !WITH_THREAD */
 | |
| 
 | |
| #define Py_BEGIN_ALLOW_THREADS {
 | |
| #define Py_BLOCK_THREADS
 | |
| #define Py_UNBLOCK_THREADS
 | |
| #define Py_END_ALLOW_THREADS }
 | |
| 
 | |
| #endif /* !WITH_THREAD */
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| #endif /* !Py_CEVAL_H */
 | 
