mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 8e3b9f9283
			
		
	
	
		8e3b9f9283
		
			
		
	
	
	
	
		
			
			Add _PyLong_GetZero() and _PyLong_GetOne() functions and a new internal pycore_long.h header file. Python cannot be built without small integer singletons anymore.
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			43 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 */
 |