@@ -610,7 +610,6 @@ _curses_panel_update_panels_impl(PyObject *module)
610610 Py_RETURN_NONE ;
611611}
612612
613-
614613/* List of functions defined in the module */
615614
616615static PyMethodDef PyCurses_methods [] = {
@@ -622,57 +621,54 @@ static PyMethodDef PyCurses_methods[] = {
622621};
623622
624623/* Initialization function for the module */
625-
626-
627- static struct PyModuleDef _curses_panelmodule = {
628- PyModuleDef_HEAD_INIT ,
629- "_curses_panel" ,
630- NULL ,
631- sizeof (_curses_panelstate ),
632- PyCurses_methods ,
633- NULL ,
634- _curses_panel_traverse ,
635- _curses_panel_clear ,
636- _curses_panel_free
637- };
638-
639- PyMODINIT_FUNC
640- PyInit__curses_panel (void )
624+ static int
625+ _curses_exec (PyObject * m )
641626{
642- PyObject * m , * d , * v ;
643-
644- /* Create the module and add the functions */
645- m = PyModule_Create (& _curses_panelmodule );
646- if (m == NULL )
647- goto fail ;
648- d = PyModule_GetDict (m );
649-
627+ _curses_panel_state * st = get_curses_panelstate (m );
650628 /* Initialize object type */
651- v = PyType_FromSpec (& PyCursesPanel_Type_spec );
652- if (v == NULL )
653- goto fail ;
654- ((PyTypeObject * )v )-> tp_new = NULL ;
655- get_curses_panelstate (m )-> PyCursesPanel_Type = v ;
629+ st -> PyCursesPanel_Type = PyType_FromSpec (& PyCursesPanel_Type_spec );
630+ if (st -> PyCursesPanel_Type == NULL )
631+ return -1 ;
632+
633+ if (PyModule_AddType (m , st -> PyCursesPanel_Type ) < 0 )
634+ return -1 ;
656635
657636 import_curses ();
658637 if (PyErr_Occurred ())
659- goto fail ;
638+ return -1 ;
660639
640+ PyObject * d = PyModule_GetDict (m );
661641 /* For exception _curses_panel.error */
662- get_curses_panelstate ( m ) -> PyCursesError = PyErr_NewException ("_curses_panel.error" , NULL , NULL );
663- PyDict_SetItemString (d , "error" , get_curses_panelstate ( m ) -> PyCursesError );
642+ st -> PyCursesError = PyErr_NewException ("_curses_panel.error" , NULL , NULL );
643+ PyDict_SetItemString (d , "error" , st -> PyCursesError );
664644
665645 /* Make the version available */
666- v = PyUnicode_FromString (PyCursesVersion );
646+ PyObject * v = PyUnicode_FromString (PyCursesVersion );
667647 PyDict_SetItemString (d , "version" , v );
668648 PyDict_SetItemString (d , "__version__" , v );
669649 Py_DECREF (v );
670650
671- Py_INCREF (get_curses_panelstate (m )-> PyCursesPanel_Type );
672- PyModule_AddObject (m , "panel" ,
673- (PyObject * )get_curses_panelstate (m )-> PyCursesPanel_Type );
674- return m ;
675- fail :
676- Py_XDECREF (m );
677- return NULL ;
651+ return 0 ;
678652}
653+
654+ static PyModuleDef_Slot _curses_slots [] = {
655+ {Py_mod_exec , _curses_exec },
656+ {0 , NULL }
657+ };
658+
659+ static struct PyModuleDef _curses_panelmodule = {
660+ PyModuleDef_HEAD_INIT ,
661+ .m_name = "_curses_panel" ,
662+ .m_size = sizeof (_curses_panelstate ),
663+ .m_methods = PyCurses_methods ,
664+ .m_slots = _curses_slots ,
665+ .m_traverse = _curses_panel_traverse ,
666+ .m_clear = _curses_panel_clear ,
667+ .m_free = _curses_panel_free
668+ };
669+
670+ PyMODINIT_FUNC
671+ PyInit__curses_panel (void )
672+ {
673+ return PyModuleDef_Init (& _curses_panelmodule );
674+ }
0 commit comments