@@ -622,25 +622,36 @@ pycore_init_types(PyThreadState *tstate)
622622static PyStatus
623623pycore_init_builtins (PyThreadState * tstate )
624624{
625- PyInterpreterState * interp = tstate -> interp ;
626-
627625 PyObject * bimod = _PyBuiltin_Init (tstate );
628626 if (bimod == NULL ) {
629- return _PyStatus_ERR ("can't initialize builtins modules" );
627+ goto error ;
628+ }
629+
630+ PyInterpreterState * interp = tstate -> interp ;
631+ if (_PyImport_FixupBuiltin (bimod , "builtins" , interp -> modules ) < 0 ) {
632+ goto error ;
630633 }
631- _PyImport_FixupBuiltin (bimod , "builtins" , interp -> modules );
632634
633- interp -> builtins = PyModule_GetDict (bimod );
634- if (interp -> builtins == NULL ) {
635- return _PyStatus_ERR ( "can't initialize builtins dict" ) ;
635+ PyObject * builtins_dict = PyModule_GetDict (bimod );
636+ if (builtins_dict == NULL ) {
637+ goto error ;
636638 }
637- Py_INCREF (interp -> builtins );
639+ Py_INCREF (builtins_dict );
640+ interp -> builtins = builtins_dict ;
638641
639642 PyStatus status = _PyBuiltins_AddExceptions (bimod );
640643 if (_PyStatus_EXCEPTION (status )) {
641644 return status ;
642645 }
646+
647+ interp -> builtins_copy = PyDict_Copy (interp -> builtins );
648+ if (interp -> builtins_copy == NULL ) {
649+ goto error ;
650+ }
643651 return _PyStatus_OK ();
652+
653+ error :
654+ return _PyStatus_ERR ("can't initialize builtins module" );
644655}
645656
646657
@@ -649,12 +660,7 @@ pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
649660{
650661 const PyConfig * config = & tstate -> interp -> config ;
651662
652- PyStatus status = _PyImport_Init (tstate );
653- if (_PyStatus_EXCEPTION (status )) {
654- return status ;
655- }
656-
657- status = _PyImportHooks_Init (tstate );
663+ PyStatus status = _PyImportHooks_Init (tstate );
658664 if (_PyStatus_EXCEPTION (status )) {
659665 return status ;
660666 }
@@ -1558,23 +1564,12 @@ new_interpreter(PyThreadState **tstate_p)
15581564 goto handle_exc ;
15591565 }
15601566
1561- PyObject * bimod = _PyImport_FindBuiltin (tstate , "builtins" );
1562- if (bimod != NULL ) {
1563- interp -> builtins = PyModule_GetDict (bimod );
1564- if (interp -> builtins == NULL )
1565- goto handle_exc ;
1566- Py_INCREF (interp -> builtins );
1567- }
1568- else if (_PyErr_Occurred (tstate )) {
1569- goto handle_exc ;
1567+ status = pycore_init_builtins (tstate );
1568+ if (_PyStatus_EXCEPTION (status )) {
1569+ goto done ;
15701570 }
15711571
1572- if (bimod != NULL && sysmod != NULL ) {
1573- status = _PyBuiltins_AddExceptions (bimod );
1574- if (_PyStatus_EXCEPTION (status )) {
1575- goto done ;
1576- }
1577-
1572+ if (sysmod != NULL ) {
15781573 status = _PySys_SetPreliminaryStderr (interp -> sysdict );
15791574 if (_PyStatus_EXCEPTION (status )) {
15801575 goto done ;
0 commit comments