|
28 | 28 | #include "pycore_runtime.h" // _Py_ID() |
29 | 29 | #include "pycore_runtime_init.h" // _PyRuntimeState_INIT |
30 | 30 | #include "pycore_setobject.h" // _PySet_NextEntry() |
| 31 | +#include "pycore_stackref.h" // PyStackRef_FromPyObjectBorrow() |
31 | 32 | #include "pycore_stats.h" // _PyStats_InterpInit() |
32 | 33 | #include "pycore_sysmodule.h" // _PySys_ClearAttrString() |
33 | 34 | #include "pycore_traceback.h" // PyUnstable_TracebackThreads() |
@@ -878,25 +879,28 @@ pycore_init_builtins(PyThreadState *tstate) |
878 | 879 | goto error; |
879 | 880 | } |
880 | 881 |
|
881 | | - interp->common_consts[CONSTANT_ASSERTIONERROR] = PyExc_AssertionError; |
882 | | - interp->common_consts[CONSTANT_NOTIMPLEMENTEDERROR] = PyExc_NotImplementedError; |
883 | | - interp->common_consts[CONSTANT_BUILTIN_TUPLE] = (PyObject *)&PyTuple_Type; |
884 | | - interp->common_consts[CONSTANT_BUILTIN_ALL] = all; |
885 | | - interp->common_consts[CONSTANT_BUILTIN_ANY] = any; |
886 | | - interp->common_consts[CONSTANT_BUILTIN_LIST] = (PyObject *)&PyList_Type; |
887 | | - interp->common_consts[CONSTANT_BUILTIN_SET] = (PyObject *)&PySet_Type; |
888 | | - interp->common_consts[CONSTANT_NONE] = Py_None; |
889 | | - interp->common_consts[CONSTANT_EMPTY_STR] = |
| 882 | + PyObject *common_objs[NUM_COMMON_CONSTANTS] = {NULL}; |
| 883 | + common_objs[CONSTANT_ASSERTIONERROR] = PyExc_AssertionError; |
| 884 | + common_objs[CONSTANT_NOTIMPLEMENTEDERROR] = PyExc_NotImplementedError; |
| 885 | + common_objs[CONSTANT_BUILTIN_TUPLE] = (PyObject *)&PyTuple_Type; |
| 886 | + common_objs[CONSTANT_BUILTIN_ALL] = all; |
| 887 | + common_objs[CONSTANT_BUILTIN_ANY] = any; |
| 888 | + common_objs[CONSTANT_BUILTIN_LIST] = (PyObject *)&PyList_Type; |
| 889 | + common_objs[CONSTANT_BUILTIN_SET] = (PyObject *)&PySet_Type; |
| 890 | + common_objs[CONSTANT_NONE] = Py_None; |
| 891 | + common_objs[CONSTANT_EMPTY_STR] = |
890 | 892 | Py_GetConstantBorrowed(Py_CONSTANT_EMPTY_STR); |
891 | | - interp->common_consts[CONSTANT_TRUE] = Py_True; |
892 | | - interp->common_consts[CONSTANT_FALSE] = Py_False; |
893 | | - interp->common_consts[CONSTANT_MINUS_ONE] = |
| 893 | + common_objs[CONSTANT_TRUE] = Py_True; |
| 894 | + common_objs[CONSTANT_FALSE] = Py_False; |
| 895 | + common_objs[CONSTANT_MINUS_ONE] = |
894 | 896 | (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS - 1]; |
895 | | - interp->common_consts[CONSTANT_BUILTIN_FROZENSET] = (PyObject *)&PyFrozenSet_Type; |
896 | | - interp->common_consts[CONSTANT_EMPTY_TUPLE] = |
| 897 | + common_objs[CONSTANT_BUILTIN_FROZENSET] = (PyObject *)&PyFrozenSet_Type; |
| 898 | + common_objs[CONSTANT_EMPTY_TUPLE] = |
897 | 899 | Py_GetConstantBorrowed(Py_CONSTANT_EMPTY_TUPLE); |
898 | 900 | for (int i = 0; i < NUM_COMMON_CONSTANTS; i++) { |
899 | | - assert(interp->common_consts[i] != NULL); |
| 901 | + assert(common_objs[i] != NULL); |
| 902 | + _Py_SetImmortal(common_objs[i]); |
| 903 | + interp->common_consts[i] = PyStackRef_FromPyObjectBorrow(common_objs[i]); |
900 | 904 | } |
901 | 905 |
|
902 | 906 | PyObject *list_append = _PyType_Lookup(&PyList_Type, &_Py_ID(append)); |
|
0 commit comments