@@ -622,6 +622,8 @@ pycore_init_types(PyThreadState *tstate)
622
622
static PyStatus
623
623
pycore_init_builtins (PyThreadState * tstate )
624
624
{
625
+ assert (!_PyErr_Occurred (tstate ));
626
+
625
627
PyObject * bimod = _PyBuiltin_Init (tstate );
626
628
if (bimod == NULL ) {
627
629
goto error ;
@@ -649,6 +651,9 @@ pycore_init_builtins(PyThreadState *tstate)
649
651
goto error ;
650
652
}
651
653
Py_DECREF (bimod );
654
+
655
+ assert (!_PyErr_Occurred (tstate ));
656
+
652
657
return _PyStatus_OK ();
653
658
654
659
error :
@@ -660,13 +665,14 @@ pycore_init_builtins(PyThreadState *tstate)
660
665
static PyStatus
661
666
pycore_init_import_warnings (PyThreadState * tstate , PyObject * sysmod )
662
667
{
663
- const PyConfig * config = & tstate -> interp -> config ;
668
+ assert (! _PyErr_Occurred ( tstate )) ;
664
669
665
670
PyStatus status = _PyImportHooks_Init (tstate );
666
671
if (_PyStatus_EXCEPTION (status )) {
667
672
return status ;
668
673
}
669
674
675
+ const PyConfig * config = & tstate -> interp -> config ;
670
676
if (_Py_IsMainInterpreter (tstate )) {
671
677
/* Initialize _warnings. */
672
678
if (_PyWarnings_Init () == NULL ) {
@@ -688,6 +694,9 @@ pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
688
694
return status ;
689
695
}
690
696
}
697
+
698
+ assert (!_PyErr_Occurred (tstate ));
699
+
691
700
return _PyStatus_OK ();
692
701
}
693
702
@@ -929,6 +938,8 @@ _Py_ReconfigureMainInterpreter(PyThreadState *tstate)
929
938
static PyStatus
930
939
init_interp_main (PyThreadState * tstate )
931
940
{
941
+ assert (!_PyErr_Occurred (tstate ));
942
+
932
943
PyStatus status ;
933
944
int is_main_interp = _Py_IsMainInterpreter (tstate );
934
945
PyInterpreterState * interp = tstate -> interp ;
@@ -950,10 +961,10 @@ init_interp_main(PyThreadState *tstate)
950
961
if (_PyTime_Init () < 0 ) {
951
962
return _PyStatus_ERR ("can't initialize time" );
952
963
}
964
+ }
953
965
954
- if (_PySys_InitMain (tstate ) < 0 ) {
955
- return _PyStatus_ERR ("can't finish initializing sys" );
956
- }
966
+ if (_PySys_InitMain (tstate ) < 0 ) {
967
+ return _PyStatus_ERR ("can't finish initializing sys" );
957
968
}
958
969
959
970
status = init_importlib_external (tstate );
@@ -1031,6 +1042,8 @@ init_interp_main(PyThreadState *tstate)
1031
1042
#endif
1032
1043
}
1033
1044
1045
+ assert (!_PyErr_Occurred (tstate ));
1046
+
1034
1047
return _PyStatus_OK ();
1035
1048
}
1036
1049
@@ -1534,70 +1547,40 @@ new_interpreter(PyThreadState **tstate_p)
1534
1547
1535
1548
status = _PyConfig_Copy (& interp -> config , config );
1536
1549
if (_PyStatus_EXCEPTION (status )) {
1537
- goto done ;
1550
+ goto error ;
1538
1551
}
1539
1552
config = & interp -> config ;
1540
1553
1541
1554
status = pycore_init_types (tstate );
1542
-
1543
- /* XXX The following is lax in error checking */
1544
- PyObject * modules = PyDict_New ();
1545
- if (modules == NULL ) {
1546
- status = _PyStatus_ERR ("can't make modules dictionary" );
1547
- goto done ;
1555
+ if (_PyStatus_EXCEPTION (status )) {
1556
+ goto error ;
1548
1557
}
1549
- interp -> modules = modules ;
1550
1558
1551
- PyObject * sysmod = _PyImport_FindBuiltin (tstate , "sys" );
1552
- if (sysmod != NULL ) {
1553
- interp -> sysdict = PyModule_GetDict (sysmod );
1554
- if (interp -> sysdict == NULL ) {
1555
- goto handle_exc ;
1556
- }
1557
- Py_INCREF (interp -> sysdict );
1558
- PyDict_SetItemString (interp -> sysdict , "modules" , modules );
1559
- if (_PySys_InitMain (tstate ) < 0 ) {
1560
- status = _PyStatus_ERR ("can't finish initializing sys" );
1561
- goto done ;
1562
- }
1563
- }
1564
- else if (_PyErr_Occurred (tstate )) {
1565
- goto handle_exc ;
1559
+ PyObject * sysmod ;
1560
+ status = _PySys_Create (tstate , & sysmod );
1561
+ if (_PyStatus_EXCEPTION (status )) {
1562
+ return status ;
1566
1563
}
1567
1564
1568
1565
status = pycore_init_builtins (tstate );
1569
1566
if (_PyStatus_EXCEPTION (status )) {
1570
- goto done ;
1567
+ goto error ;
1571
1568
}
1572
1569
1573
- if (sysmod != NULL ) {
1574
- status = _PySys_SetPreliminaryStderr (interp -> sysdict );
1575
- if (_PyStatus_EXCEPTION (status )) {
1576
- goto done ;
1577
- }
1578
-
1579
- status = pycore_init_import_warnings (tstate , sysmod );
1580
- if (_PyStatus_EXCEPTION (status )) {
1581
- goto done ;
1582
- }
1583
-
1584
- status = init_interp_main (tstate );
1585
- if (_PyStatus_EXCEPTION (status )) {
1586
- goto done ;
1587
- }
1570
+ status = pycore_init_import_warnings (tstate , sysmod );
1571
+ if (_PyStatus_EXCEPTION (status )) {
1572
+ goto error ;
1588
1573
}
1589
1574
1590
- if (_PyErr_Occurred (tstate )) {
1591
- goto handle_exc ;
1575
+ status = init_interp_main (tstate );
1576
+ if (_PyStatus_EXCEPTION (status )) {
1577
+ goto error ;
1592
1578
}
1593
1579
1594
1580
* tstate_p = tstate ;
1595
1581
return _PyStatus_OK ();
1596
1582
1597
- handle_exc :
1598
- status = _PyStatus_OK ();
1599
-
1600
- done :
1583
+ error :
1601
1584
* tstate_p = NULL ;
1602
1585
1603
1586
/* Oops, it didn't work. Undo it all. */
0 commit comments