From 30128043d2bb707d2938ecfa04b3f88235b9d892 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 7 Nov 2016 12:40:49 +0530 Subject: [PATCH] Fix allocation of cursor objects --- kitty/cursor.c | 23 ++++++++++++++--------- kitty/data-types.h | 3 ++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/kitty/cursor.c b/kitty/cursor.c index fac35ab95..8841b757a 100644 --- a/kitty/cursor.c +++ b/kitty/cursor.c @@ -17,26 +17,27 @@ new(PyTypeObject *type, PyObject UNUSED *args, PyObject UNUSED *kwds) { self = (Cursor *)type->tp_alloc(type, 0); if (self != NULL) { + self->x = PyLong_FromLong(0); + if (self->x == NULL) { Py_CLEAR(self); return NULL; } + self->y = self->x; Py_INCREF(self->y); INIT_NONE(self->shape); INIT_NONE(self->blink); INIT_NONE(self->color); self->hidden = Py_False; Py_INCREF(Py_False); self->bold = 0; self->italic = 0; self->reverse = 0; self->strikethrough = 0; self->decoration = 0; self->fg = 0; self->bg = 0; self->decoration_fg = 0; - self->x = PyLong_FromLong(0); self->y = PyLong_FromLong(0); - if (self->x == NULL || self->y == NULL) { Py_DECREF(self); self = NULL; } } return (PyObject*) self; } static void dealloc(Cursor* self) { - Py_XDECREF(self->shape); - Py_XDECREF(self->blink); - Py_XDECREF(self->color); - Py_XDECREF(self->hidden); - Py_XDECREF(self->x); - Py_XDECREF(self->y); + Py_CLEAR(self->shape); + Py_CLEAR(self->blink); + Py_CLEAR(self->color); + Py_CLEAR(self->hidden); + Py_CLEAR(self->x); + Py_CLEAR(self->y); Py_TYPE(self)->tp_free((PyObject*)self); } @@ -112,11 +113,15 @@ copy(Cursor *self, PyObject UNUSED *args) { #define CPY(x) ans->x = self->x; Py_XINCREF(self->x); #define CCY(x) ans->x = self->x; Cursor* ans; - ans = PyObject_New(Cursor, &Cursor_Type); + ans = alloc_cursor(); if (ans == NULL) { PyErr_NoMemory(); return NULL; } CPY(x); CPY(y); CPY(shape); CPY(blink); CPY(color); CPY(hidden); CCY(bold); CCY(italic); CCY(strikethrough); CCY(reverse); CCY(decoration); CCY(fg); CCY(bg); CCY(decoration_fg); return (PyObject*)ans; } +Cursor *alloc_cursor() { + return (Cursor*)new(&Cursor_Type, NULL, NULL); +} + INIT_TYPE(Cursor) diff --git a/kitty/data-types.h b/kitty/data-types.h index f4d8698d8..5adcc3a9f 100644 --- a/kitty/data-types.h +++ b/kitty/data-types.h @@ -128,4 +128,5 @@ typedef struct { } Cursor; -Line *alloc_line(); +Line* alloc_line(); +Cursor* alloc_cursor();