0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

updated for version 7.3.1057

Problem:    Python: not enough compatibilty.
Solution:   Python patch 16: Make OutputWritelines support any sequence object
            (ZyX) Note: tests fail
This commit is contained in:
Bram Moolenaar
2013-05-30 12:26:58 +02:00
parent 9bb77d6fe6
commit 01a7a720ad
6 changed files with 52 additions and 17 deletions

View File

@@ -312,36 +312,30 @@ OutputWrite(OutputObject *self, PyObject *args)
static PyObject * static PyObject *
OutputWritelines(OutputObject *self, PyObject *args) OutputWritelines(OutputObject *self, PyObject *args)
{ {
PyInt n; PyObject *seq;
PyInt i; PyObject *iterator;
PyObject *list; PyObject *item;
int error = self->error; int error = self->error;
if (!PyArg_ParseTuple(args, "O", &list)) if (!PyArg_ParseTuple(args, "O", &seq))
return NULL; return NULL;
Py_INCREF(list);
if (!PyList_Check(list)) if (!(iterator = PyObject_GetIter(seq)))
{
PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
Py_DECREF(list);
return NULL; return NULL;
}
n = PyList_Size(list); while ((item = PyIter_Next(iterator)))
for (i = 0; i < n; ++i)
{ {
PyObject *line = PyList_GetItem(list, i);
char *str = NULL; char *str = NULL;
PyInt len; PyInt len;
if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len)) if (!PyArg_Parse(item, "et#", ENC_OPT, &str, &len))
{ {
PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings")); PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
Py_DECREF(list); Py_DECREF(iterator);
Py_DECREF(item);
return NULL; return NULL;
} }
Py_DECREF(item);
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
Python_Lock_Vim(); Python_Lock_Vim();
@@ -351,7 +345,12 @@ OutputWritelines(OutputObject *self, PyObject *args)
PyMem_Free(str); PyMem_Free(str);
} }
Py_DECREF(list); Py_DECREF(iterator);
/* Iterator may have finished due to an exception */
if (PyErr_Occurred())
return NULL;
Py_INCREF(Py_None); Py_INCREF(Py_None);
return Py_None; return Py_None;
} }

View File

@@ -709,6 +709,16 @@ del name
del o del o
EOF EOF
:" :"
:"
:" Test stdout/stderr
:redir => messages
:py sys.stdout.write('abc') ; sys.stdout.write('def')
:py sys.stderr.write('abc') ; sys.stderr.write('def')
:py sys.stdout.writelines(iter('abc'))
:py sys.stderr.writelines(iter('abc'))
:redir END
:$put =string(substitute(messages, '\d\+', '', 'g'))
:"
:" Test exceptions :" Test exceptions
:fun Exe(e) :fun Exe(e)
: execute a:e : execute a:e

View File

@@ -391,6 +391,13 @@ dictionary:__dir__,__members__,keys,locked,scope
list:__dir__,__members__,extend,locked list:__dir__,__members__,extend,locked
function:__call__,__dir__,__members__,softspace function:__call__,__dir__,__members__,softspace
output:__dir__,__members__,flush,softspace,write,writelines output:__dir__,__members__,flush,softspace,write,writelines
'
abcdef
line :
abcdef
abc
line :
abc'
(<class 'vim.error'>, error('abc',)) (<class 'vim.error'>, error('abc',))
(<class 'vim.error'>, error('def',)) (<class 'vim.error'>, error('def',))
(<class 'vim.error'>, error('ghi',)) (<class 'vim.error'>, error('ghi',))

View File

@@ -687,6 +687,16 @@ del name
del o del o
EOF EOF
:" :"
:"
:" Test stdout/stderr
:redir => messages
:py sys.stdout.write('abc') ; sys.stdout.write('def')
:py sys.stderr.write('abc') ; sys.stderr.write('def')
:py sys.stdout.writelines(iter('abc'))
:py sys.stderr.writelines(iter('abc'))
:redir END
:$put =string(substitute(messages, '\d\+', '', 'g'))
:"
:" Test exceptions :" Test exceptions
:fun Exe(e) :fun Exe(e)
: execute a:e : execute a:e

View File

@@ -380,6 +380,13 @@ dictionary:__dir__,keys,locked,scope
list:__dir__,extend,locked list:__dir__,extend,locked
function:__call__,__dir__,softspace function:__call__,__dir__,softspace
output:__dir__,flush,softspace,write,writelines output:__dir__,flush,softspace,write,writelines
'
abcdef
line :
abcdef
abc
line :
abc'
(<class 'vim.error'>, error('abc',)) (<class 'vim.error'>, error('abc',))
(<class 'vim.error'>, error('def',)) (<class 'vim.error'>, error('def',))
(<class 'vim.error'>, error('ghi',)) (<class 'vim.error'>, error('ghi',))

View File

@@ -728,6 +728,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1057,
/**/ /**/
1056, 1056,
/**/ /**/