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()); }
Box* listSort1(BoxedList* self) { LOCK_REGION(self->lock.asWrite()); assert(self->cls == list_cls); std::sort<Box**, PyLt>(self->elts->elts, self->elts->elts + self->size, PyLt()); return None; }
void setupSysEnd() { BoxedTuple::GCVector builtin_module_names; for (auto& p : sys_modules_dict->d) { 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", new BoxedTuple(std::move(builtin_module_names))); }
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()); }
void setupSysEnd() { std::vector<Box*, StlCompatAllocator<Box*>> builtin_module_names; for (auto& p : sys_modules_dict->d) { 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(); }
Box* sorted(Box* obj) { RELEASE_ASSERT(obj->cls == list_cls, ""); BoxedList *lobj = static_cast<BoxedList*>(obj); BoxedList *rtn = new BoxedList(); int size = lobj->size; rtn->elts = new (size) BoxedList::ElementArray(); rtn->size = size; rtn->capacity = size; for (int i = 0; i < size; i++) { Box* t = rtn->elts->elts[i] = lobj->elts->elts[i]; } std::sort<Box**, PyLt>(rtn->elts->elts, rtn->elts->elts + size, PyLt()); return rtn; }