mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	Reorganize pycore_interp_init() to initialize singletons before the the first PyType_Ready() call. Fix an issue when Python is configured using --without-doc-strings.
		
			
				
	
	
		
			40 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			1.2 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)
 | 
						|
{
 | 
						|
    PyInterpreterState *interp = _PyInterpreterState_GET();
 | 
						|
    assert(-_PY_NSMALLNEGINTS <= value && value < _PY_NSMALLPOSINTS);
 | 
						|
    size_t index = _PY_NSMALLNEGINTS + value;
 | 
						|
    PyObject *obj = (PyObject*)interp->small_ints[index];
 | 
						|
    // _PyLong_GetZero(), _PyLong_GetOne() and get_small_int() 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 */
 |