mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #ifndef Py_INTERNAL_LONG_H
 | ||
|  | #define Py_INTERNAL_LONG_H
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifndef Py_BUILD_CORE
 | ||
|  | #  error "this header requires Py_BUILD_CORE define"
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #include "pycore_interp.h"        // PyInterpreterState.small_ints
 | ||
|  | #include "pycore_pystate.h"       // _PyThreadState_GET()
 | ||
|  | 
 | ||
|  | // Don't call this function but _PyLong_GetZero() and _PyLong_GetOne()
 | ||
|  | static inline PyObject* __PyLong_GetSmallInt_internal(int value) | ||
|  | { | ||
|  |     PyThreadState *tstate = _PyThreadState_GET(); | ||
|  | #ifdef Py_DEBUG
 | ||
|  |     _Py_EnsureTstateNotNULL(tstate); | ||
|  | #endif
 | ||
|  |     assert(-_PY_NSMALLNEGINTS <= value && value < _PY_NSMALLPOSINTS); | ||
|  |     size_t index = _PY_NSMALLNEGINTS + value; | ||
|  |     PyObject *obj = (PyObject*)tstate->interp->small_ints[index]; | ||
|  |     // _PyLong_GetZero() and _PyLong_GetOne() must not be called
 | ||
|  |     // before _PyLong_Init() nor after _PyLong_Fini()
 | ||
|  |     assert(obj != NULL); | ||
|  |     return obj; | ||
|  | } | ||
|  | 
 | ||
|  | // Return a borrowed reference to the zero singleton.
 | ||
|  | // The function cannot return NULL.
 | ||
|  | static inline PyObject* _PyLong_GetZero(void) | ||
|  | { return __PyLong_GetSmallInt_internal(0); } | ||
|  | 
 | ||
|  | // Return a borrowed reference to the one singleton.
 | ||
|  | // The function cannot return NULL.
 | ||
|  | static inline PyObject* _PyLong_GetOne(void) | ||
|  | { return __PyLong_GetSmallInt_internal(1); } | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | #endif /* !Py_INTERNAL_LONG_H */
 |