@@ -1441,31 +1441,88 @@ _PyMainInterpreterConfig_Copy(_PyMainInterpreterConfig *config,
14411441{
14421442 _PyMainInterpreterConfig_Clear (config );
14431443
1444- #define COPY_ATTR (ATTR ) \
1444+ #define COPY_ATTR (ATTR ) config->ATTR = config2->ATTR
1445+ #define COPY_OBJ_ATTR (OBJ_ATTR ) \
14451446 do { \
1446- if (config2->ATTR != NULL) { \
1447- config->ATTR = config_copy_attr(config2->ATTR ); \
1448- if (config->ATTR == NULL) { \
1447+ if (config2->OBJ_ATTR != NULL) { \
1448+ config->OBJ_ATTR = config_copy_attr(config2->OBJ_ATTR ); \
1449+ if (config->OBJ_ATTR == NULL) { \
14491450 return -1; \
14501451 } \
14511452 } \
14521453 } while (0)
14531454
1454- COPY_ATTR (argv );
1455- COPY_ATTR (executable );
1456- COPY_ATTR (prefix );
1457- COPY_ATTR (base_prefix );
1458- COPY_ATTR (exec_prefix );
1459- COPY_ATTR (base_exec_prefix );
1460- COPY_ATTR (warnoptions );
1461- COPY_ATTR (xoptions );
1462- COPY_ATTR (module_search_path );
1463- COPY_ATTR (pycache_prefix );
1455+ COPY_ATTR (install_signal_handlers );
1456+ COPY_OBJ_ATTR (argv );
1457+ COPY_OBJ_ATTR (executable );
1458+ COPY_OBJ_ATTR (prefix );
1459+ COPY_OBJ_ATTR (base_prefix );
1460+ COPY_OBJ_ATTR (exec_prefix );
1461+ COPY_OBJ_ATTR (base_exec_prefix );
1462+ COPY_OBJ_ATTR (warnoptions );
1463+ COPY_OBJ_ATTR (xoptions );
1464+ COPY_OBJ_ATTR (module_search_path );
1465+ COPY_OBJ_ATTR (pycache_prefix );
14641466#undef COPY_ATTR
1467+ #undef COPY_OBJ_ATTR
14651468 return 0 ;
14661469}
14671470
14681471
1472+ PyObject *
1473+ _PyMainInterpreterConfig_AsDict (const _PyMainInterpreterConfig * config )
1474+ {
1475+ PyObject * dict , * obj ;
1476+ int res ;
1477+
1478+ dict = PyDict_New ();
1479+ if (dict == NULL ) {
1480+ return NULL ;
1481+ }
1482+
1483+ #define SET_ITEM (KEY , ATTR ) \
1484+ do { \
1485+ obj = config->ATTR; \
1486+ if (obj == NULL) { \
1487+ obj = Py_None; \
1488+ } \
1489+ res = PyDict_SetItemString(dict, (KEY), obj); \
1490+ if (res < 0) { \
1491+ goto fail; \
1492+ } \
1493+ } while (0)
1494+
1495+ obj = PyLong_FromLong (config -> install_signal_handlers );
1496+ if (obj == NULL ) {
1497+ goto fail ;
1498+ }
1499+ res = PyDict_SetItemString (dict , "install_signal_handlers" , obj );
1500+ Py_DECREF (obj );
1501+ if (res < 0 ) {
1502+ goto fail ;
1503+ }
1504+
1505+ SET_ITEM ("argv" , argv );
1506+ SET_ITEM ("executable" , executable );
1507+ SET_ITEM ("prefix" , prefix );
1508+ SET_ITEM ("base_prefix" , base_prefix );
1509+ SET_ITEM ("exec_prefix" , exec_prefix );
1510+ SET_ITEM ("base_exec_prefix" , base_exec_prefix );
1511+ SET_ITEM ("warnoptions" , warnoptions );
1512+ SET_ITEM ("xoptions" , xoptions );
1513+ SET_ITEM ("module_search_path" , module_search_path );
1514+ SET_ITEM ("pycache_prefix" , pycache_prefix );
1515+
1516+ return dict ;
1517+
1518+ fail :
1519+ Py_DECREF (dict );
1520+ return NULL ;
1521+
1522+ #undef SET_ITEM
1523+ }
1524+
1525+
14691526_PyInitError
14701527_PyMainInterpreterConfig_Read (_PyMainInterpreterConfig * main_config ,
14711528 const _PyCoreConfig * config )
0 commit comments