void setupSysEnd() { std::vector<Box*, StlCompatAllocator<Box*>> builtin_module_names; for (const auto& p : *sys_modules_dict) { builtin_module_names.push_back(p.first); } std::sort<decltype(builtin_module_names)::iterator, PyLt>(builtin_module_names.begin(), builtin_module_names.end(), PyLt()); sys_module->giveAttr("builtin_module_names", BoxedTuple::create(builtin_module_names.size(), &builtin_module_names[0])); sys_flags_cls->finishInitialization(); /* version_info */ if (VersionInfoType.tp_name == 0) PyStructSequence_InitType((PyTypeObject*)&VersionInfoType, &version_info_desc); /* prevent user from creating new instances */ VersionInfoType.tp_init = NULL; VersionInfoType.tp_new = NULL; SET_SYS_FROM_STRING("version_info", make_version_info()); /* float_info */ if (FloatInfoType.tp_name == 0) PyStructSequence_InitType((PyTypeObject*)&FloatInfoType, &float_info_desc); /* prevent user from creating new instances */ FloatInfoType.tp_init = NULL; FloatInfoType.tp_new = NULL; SET_SYS_FROM_STRING("float_info", PyFloat_GetInfo()); }
void setupSysEnd() { std::vector<Box*> builtin_module_names; for (int i = 0; PyImport_Inittab[i].name != NULL; i++) builtin_module_names.push_back(boxString(PyImport_Inittab[i].name)); std::sort<decltype(builtin_module_names)::iterator, PyLt>(builtin_module_names.begin(), builtin_module_names.end(), PyLt()); sys_module->giveAttr("builtin_module_names", BoxedTuple::create(builtin_module_names.size(), &builtin_module_names[0])); for (Box* b : builtin_module_names) Py_DECREF(b); #ifndef NDEBUG for (const auto& p : *sys_modules_dict) { assert(PyString_Check(p.first)); bool found = false; for (int i = 0; PyImport_Inittab[i].name != NULL; i++) { if (((BoxedString*)p.first)->s() == PyImport_Inittab[i].name) { found = true; } } if (!found) assert(0 && "found a module which is inside sys.modules but not listed inside PyImport_Inittab!"); } #endif /* version_info */ if (VersionInfoType.tp_name == 0) PyStructSequence_InitType((PyTypeObject*)&VersionInfoType, &version_info_desc); /* prevent user from creating new instances */ VersionInfoType.tp_init = NULL; VersionInfoType.tp_new = NULL; SET_SYS_FROM_STRING("version_info", make_version_info()); /* float_info */ if (FloatInfoType.tp_name == 0) PyStructSequence_InitType((PyTypeObject*)&FloatInfoType, &float_info_desc); /* flags */ if (FlagsType.tp_name == 0) PyStructSequence_InitType((PyTypeObject*)&FlagsType, &flags_desc); SET_SYS_FROM_STRING("flags", make_flags()); /* prevent user from creating new instances */ FlagsType.tp_init = NULL; FlagsType.tp_new = NULL; /* prevent user from creating new instances */ FloatInfoType.tp_init = NULL; FloatInfoType.tp_new = NULL; SET_SYS_FROM_STRING("float_info", PyFloat_GetInfo()); }