Skip to content

Commit

Permalink
Issue #14936: curses_panel was converted to PEP 3121 and PEP 384 API.
Browse files Browse the repository at this point in the history
Patch by Robin Schreiber.
  • Loading branch information
loewis committed Jun 14, 2012
1 parent c838ec1 commit bc07cb8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 44 deletions.
2 changes: 1 addition & 1 deletion Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Core and Builtins
Library
-------

- Issue #14936: curses_panel was converted to PEP 3121 API.
- Issue #14936: curses_panel was converted to PEP 3121 and PEP 384 API.
Patch by Robin Schreiber.

- Issue #1667546: On platforms supporting tm_zone and tm_gmtoff fields
Expand Down
72 changes: 29 additions & 43 deletions Modules/_curses_panel.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,11 @@ static char *PyCursesVersion = "2.1";

typedef struct {
PyObject *PyCursesError;
PyObject *PyCursesPanel_Type;
} _curses_panelstate;

#define _curses_panelstate(o) ((_curses_panelstate *)PyModule_GetState(o))

/*static PyObject *PyCursesError;*/

static int
_curses_panel_clear(PyObject *m)
{
Expand Down Expand Up @@ -84,9 +83,8 @@ typedef struct {
PyCursesWindowObject *wo; /* for reference counts */
} PyCursesPanelObject;

PyTypeObject PyCursesPanel_Type;

#define PyCursesPanel_Check(v) (Py_TYPE(v) == &PyCursesPanel_Type)
#define PyCursesPanel_Check(v) \
(Py_TYPE(v) == _curses_panelstate_global->PyCursesPanel_Type)

/* Some helper functions. The problem is that there's always a window
associated with a panel. To ensure that Python's GC doesn't pull
Expand Down Expand Up @@ -205,7 +203,8 @@ PyCursesPanel_New(PANEL *pan, PyCursesWindowObject *wo)
{
PyCursesPanelObject *po;

po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type);
po = PyObject_NEW(PyCursesPanelObject,
(PyTypeObject *)(_curses_panelstate_global)->PyCursesPanel_Type);
if (po == NULL) return NULL;
po->pan = pan;
if (insert_lop(po) < 0) {
Expand Down Expand Up @@ -364,36 +363,18 @@ static PyMethodDef PyCursesPanel_Methods[] = {

/* -------------------------------------------------------*/

PyTypeObject PyCursesPanel_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
"_curses_panel.curses panel", /*tp_name*/
sizeof(PyCursesPanelObject), /*tp_basicsize*/
0, /*tp_itemsize*/
/* methods */
(destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/
0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_reserved*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash*/
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
0, /*tp_doc*/
0, /*tp_traverse*/
0, /*tp_clear*/
0, /*tp_richcompare*/
0, /*tp_weaklistoffset*/
0, /*tp_iter*/
0, /*tp_iternext*/
PyCursesPanel_Methods, /*tp_methods*/
static PyType_Slot PyCursesPanel_Type_slots[] = {
{Py_tp_dealloc, PyCursesPanel_Dealloc},
{Py_tp_methods, PyCursesPanel_Methods},
{0, 0},
};

static PyType_Spec PyCursesPanel_Type_spec = {
"_curses_panel.curses panel",
sizeof(PyCursesPanelObject),
0,
Py_TPFLAGS_DEFAULT,
PyCursesPanel_Type_slots
};

/* Wrapper for panel_above(NULL). This function returns the bottom
Expand Down Expand Up @@ -510,18 +491,20 @@ PyInit__curses_panel(void)
{
PyObject *m, *d, *v;

/* Initialize object type */
if (PyType_Ready(&PyCursesPanel_Type) < 0)
return NULL;

import_curses();

/* Create the module and add the functions */
m = PyModule_Create(&_curses_panelmodule);
if (m == NULL)
return NULL;
goto fail;
d = PyModule_GetDict(m);

/* Initialize object type */
_curses_panelstate(m)->PyCursesPanel_Type = \
PyType_FromSpec(&PyCursesPanel_Type_spec);
if (_curses_panelstate(m)->PyCursesPanel_Type == NULL)
goto fail;

import_curses();

/* For exception _curses_panel.error */
_curses_panelstate(m)->PyCursesError = PyErr_NewException("_curses_panel.error", NULL, NULL);
PyDict_SetItemString(d, "error", _curses_panelstate(m)->PyCursesError);
Expand All @@ -532,4 +515,7 @@ PyInit__curses_panel(void)
PyDict_SetItemString(d, "__version__", v);
Py_DECREF(v);
return m;
fail:
Py_XDECREF(m);
return NULL;
}

0 comments on commit bc07cb8

Please sign in to comment.