diff options
-rw-r--r-- | src/if_py_both.h | 46 | ||||
-rw-r--r-- | src/if_python.c | 9 | ||||
-rw-r--r-- | src/if_python3.c | 16 | ||||
-rw-r--r-- | src/testdir/test86.in | 5 | ||||
-rw-r--r-- | src/testdir/test86.ok | 5 | ||||
-rw-r--r-- | src/testdir/test87.in | 5 | ||||
-rw-r--r-- | src/testdir/test87.ok | 5 | ||||
-rw-r--r-- | src/version.c | 2 |
8 files changed, 85 insertions, 8 deletions
diff --git a/src/if_py_both.h b/src/if_py_both.h index 2098ed1f0..c1464331f 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -1815,6 +1815,19 @@ TabPageDestructor(TabPageObject *self) } static PyObject * +TabPageAttrValid(TabPageObject *self, char *name) +{ + PyObject *r; + + if (strcmp(name, "valid") != 0) + return NULL; + + r = ((self->tab == INVALID_TABPAGE_VALUE) ? Py_False : Py_True); + Py_INCREF(r); + return r; +} + + static PyObject * TabPageAttr(TabPageObject *self, char *name) { if (strcmp(name, "windows") == 0) @@ -2010,6 +2023,19 @@ get_firstwin(TabPageObject *tabObject) } static PyObject * +WindowAttrValid(WindowObject *self, char *name) +{ + PyObject *r; + + if (strcmp(name, "valid") != 0) + return NULL; + + r = ((self->win == INVALID_WINDOW_VALUE) ? Py_False : Py_True); + Py_INCREF(r); + return r; +} + + static PyObject * WindowAttr(WindowObject *self, char *name) { if (strcmp(name, "buffer") == 0) @@ -2050,8 +2076,8 @@ WindowAttr(WindowObject *self, char *name) return (PyObject *)(self->tabObject); } else if (strcmp(name,"__members__") == 0) - return Py_BuildValue("[sssssssss]", "buffer", "cursor", "height", - "vars", "options", "number", "row", "col", "tabpage"); + return Py_BuildValue("[ssssssssss]", "buffer", "cursor", "height", + "vars", "options", "number", "row", "col", "tabpage", "valid"); else return NULL; } @@ -3186,6 +3212,19 @@ BufferSlice(BufferObject *self, PyInt lo, PyInt hi) } static PyObject * +BufferAttrValid(BufferObject *self, char *name) +{ + PyObject *r; + + if (strcmp(name, "valid") != 0) + return NULL; + + r = ((self->buf == INVALID_BUFFER_VALUE) ? Py_False : Py_True); + Py_INCREF(r); + return r; +} + + static PyObject * BufferAttr(BufferObject *self, char *name) { if (strcmp(name, "name") == 0) @@ -3198,7 +3237,8 @@ BufferAttr(BufferObject *self, char *name) return OptionsNew(SREQ_BUF, self->buf, (checkfun) CheckBuffer, (PyObject *) self); else if (strcmp(name,"__members__") == 0) - return Py_BuildValue("[ssss]", "name", "number", "vars", "options"); + return Py_BuildValue("[sssss]", "name", "number", "vars", "options", + "valid"); else return NULL; } diff --git a/src/if_python.c b/src/if_python.c index 7b82a7f11..f8e72f5fc 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -1125,6 +1125,9 @@ BufferGetattr(PyObject *self, char *name) { PyObject *r; + if ((r = BufferAttrValid((BufferObject *)(self), name))) + return r; + if (CheckBuffer((BufferObject *)(self))) return NULL; @@ -1206,6 +1209,9 @@ TabPageGetattr(PyObject *self, char *name) { PyObject *r; + if ((r = TabPageAttrValid((TabPageObject *)(self), name))) + return r; + if (CheckTabPage((TabPageObject *)(self))) return NULL; @@ -1224,6 +1230,9 @@ WindowGetattr(PyObject *self, char *name) { PyObject *r; + if ((r = WindowAttrValid((WindowObject *)(self), name))) + return r; + if (CheckWindow((WindowObject *)(self))) return NULL; diff --git a/src/if_python3.c b/src/if_python3.c index b7323c2a9..923d04696 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -1067,12 +1067,15 @@ static PyMappingMethods BufferAsMapping = { */ static PyObject * -BufferGetattro(PyObject *self, PyObject*nameobj) +BufferGetattro(PyObject *self, PyObject *nameobj) { PyObject *r; GET_ATTR_STRING(name, nameobj); + if ((r = BufferAttrValid((BufferObject *)(self), name))) + return r; + if (CheckBuffer((BufferObject *)(self))) return NULL; @@ -1094,8 +1097,9 @@ BufferSetattro(PyObject *self, PyObject *nameobj, PyObject *val) static PyObject * BufferDir(PyObject *self UNUSED) { - return Py_BuildValue("[sssss]", "name", "number", - "append", "mark", "range"); + return Py_BuildValue("[ssssssss]", + "name", "number", "vars", "options", "valid", + "append", "mark", "range"); } /******************/ @@ -1283,6 +1287,9 @@ TabPageGetattro(PyObject *self, PyObject *nameobj) GET_ATTR_STRING(name, nameobj); + if ((r = TabPageAttrValid((TabPageObject *)(self), name))) + return r; + if (CheckTabPage((TabPageObject *)(self))) return NULL; @@ -1303,6 +1310,9 @@ WindowGetattro(PyObject *self, PyObject *nameobj) GET_ATTR_STRING(name, nameobj); + if ((r = WindowAttrValid((WindowObject *)(self), name))) + return r; + if (CheckWindow((WindowObject *)(self))) return NULL; diff --git a/src/testdir/test86.in b/src/testdir/test86.in index ae90b27cf..267657c0a 100644 --- a/src/testdir/test86.in +++ b/src/testdir/test86.in @@ -513,6 +513,7 @@ for _b in vim.buffers: if _b is not cb: vim.command('bwipeout! ' + str(_b.number)) del _b +cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid))) for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")', 'b.name = "!"'): try: exec(expr) @@ -663,9 +664,13 @@ cb.append('Current tab page: ' + repr(vim.current.tabpage)) cb.append('Current window: ' + repr(vim.current.window)) cb.append('Current buffer: ' + repr(vim.current.buffer)) cb.append('Current line: ' + repr(vim.current.line)) +ws = list(vim.windows) +ts = list(vim.tabpages) for b in vim.buffers: if b is not cb: vim.command('bwipeout! ' + str(b.number)) +cb.append('w.valid: ' + repr([w.valid for w in ws])) +cb.append('t.valid: ' + repr([t.valid for t in ts])) EOF :tabonly! :only! diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok index 1d3e81a0f..efa80019b 100644 --- a/src/testdir/test86.ok +++ b/src/testdir/test86.ok @@ -328,6 +328,7 @@ testdir/bar 1:BufFilePre:1 7:BufFilePost:1 testdir/test86.in +valid: b:False, cb:True i:<buffer test86.in> i2:<buffer test86.in> i:<buffer a> @@ -344,7 +345,7 @@ Number of tabs: 4 Current tab pages: <tabpage 0>(1): 1 windows, current is <window object (unknown)> Windows: - <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (36, 0) + <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (37, 0) <tabpage 1>(2): 1 windows, current is <window object (unknown)> Windows: <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0) @@ -370,6 +371,8 @@ Current tab page: <tabpage 2> Current window: <window 0> Current buffer: <buffer test86.in> Current line: 'Type error at assigning None to vim.current.buffer' +w.valid: [True, False] +t.valid: [True, False, True, False] vim.vars:Dictionary:True vim.options:Options:True vim.bindeval("{}"):Dictionary:True diff --git a/src/testdir/test87.in b/src/testdir/test87.in index a23cadc29..8f70fcf90 100644 --- a/src/testdir/test87.in +++ b/src/testdir/test87.in @@ -500,6 +500,7 @@ for _b in vim.buffers: if _b is not cb: vim.command('bwipeout! ' + str(_b.number)) del _b +cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid))) for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'): try: exec(expr) @@ -641,9 +642,13 @@ cb.append('Current tab page: ' + repr(vim.current.tabpage)) cb.append('Current window: ' + repr(vim.current.window)) cb.append('Current buffer: ' + repr(vim.current.buffer)) cb.append('Current line: ' + repr(vim.current.line)) +ws = list(vim.windows) +ts = list(vim.tabpages) for b in vim.buffers: if b is not cb: vim.command('bwipeout! ' + str(b.number)) +cb.append('w.valid: ' + repr([w.valid for w in ws])) +cb.append('t.valid: ' + repr([t.valid for t in ts])) EOF :tabonly! :only! diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok index 697e6e371..c04d2201e 100644 --- a/src/testdir/test87.ok +++ b/src/testdir/test87.ok @@ -317,6 +317,7 @@ testdir/bar 1:BufFilePre:1 7:BufFilePost:1 testdir/test87.in +valid: b:False, cb:True i:<buffer test87.in> i2:<buffer test87.in> i:<buffer a> @@ -333,7 +334,7 @@ Number of tabs: 4 Current tab pages: <tabpage 0>(1): 1 windows, current is <window object (unknown)> Windows: - <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (36, 0) + <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (37, 0) <tabpage 1>(2): 1 windows, current is <window object (unknown)> Windows: <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0) @@ -359,6 +360,8 @@ Current tab page: <tabpage 2> Current window: <window 0> Current buffer: <buffer test87.in> Current line: 'Type error at assigning None to vim.current.buffer' +w.valid: [True, False] +t.valid: [True, False, True, False] vim.vars:Dictionary:True vim.options:Options:True vim.bindeval("{}"):Dictionary:True diff --git a/src/version.c b/src/version.c index 4407e0e24..b3bd87493 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1044, +/**/ 1043, /**/ 1042, |