updated for version 7.3.951
Problem: Python exceptions have problems.
Solution: Change some IndexErrors to TypeErrors. Make “line number out of
range” an IndexError. Make “unable to get option value” a
RuntimeError. Make all PyErr_SetString messages start with
lowercase letter and use _(). (ZyX)
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 2850540..3267f81 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -71,7 +71,8 @@
{
if (val == NULL)
{
- PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+ PyErr_SetString(PyExc_AttributeError,
+ _("can't delete OutputObject attributes"));
return -1;
}
@@ -919,7 +920,7 @@
if (index>=ListLength(self))
{
- PyErr_SetString(PyExc_IndexError, "list index out of range");
+ PyErr_SetString(PyExc_IndexError, _("list index out of range"));
return NULL;
}
li = list_find(((ListObject *) (self))->list, (long) index);
@@ -1047,7 +1048,7 @@
}
if (index>length || (index==length && obj==NULL))
{
- PyErr_SetString(PyExc_IndexError, "list index out of range");
+ PyErr_SetString(PyExc_IndexError, _("list index out of range"));
return -1;
}
@@ -1186,7 +1187,8 @@
if (val == NULL)
{
- PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes"));
+ PyErr_SetString(PyExc_AttributeError,
+ _("cannot delete vim.dictionary attributes"));
return -1;
}
@@ -1194,7 +1196,7 @@
{
if (this->list->lv_lock == VAR_FIXED)
{
- PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed list"));
+ PyErr_SetString(PyExc_TypeError, _("cannot modify fixed list"));
return -1;
}
else
@@ -1208,7 +1210,7 @@
}
else
{
- PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute"));
+ PyErr_SetString(PyExc_AttributeError, _("cannot set this attribute"));
return -1;
}
}
@@ -1377,7 +1379,8 @@
return PyBytes_FromString((char *) stringval);
else
{
- PyErr_SetString(PyExc_ValueError, "Unable to get option value");
+ PyErr_SetString(PyExc_RuntimeError,
+ _("unable to get option value"));
return NULL;
}
}
@@ -1455,13 +1458,14 @@
{
if (this->opt_type == SREQ_GLOBAL)
{
- PyErr_SetString(PyExc_ValueError, "Unable to unset global option");
+ PyErr_SetString(PyExc_ValueError,
+ _("unable to unset global option"));
return -1;
}
else if (!(flags & SOPT_GLOBAL))
{
- PyErr_SetString(PyExc_ValueError, "Unable to unset option without "
- "global value");
+ PyErr_SetString(PyExc_ValueError, _("unable to unset option "
+ "without global value"));
return -1;
}
else
@@ -1491,7 +1495,7 @@
val = PyLong_AsLong(valObject);
else
{
- PyErr_SetString(PyExc_ValueError, "Object must be integer");
+ PyErr_SetString(PyExc_TypeError, _("object must be integer"));
return -1;
}
@@ -1529,7 +1533,7 @@
}
else
{
- PyErr_SetString(PyExc_ValueError, "Object must be string");
+ PyErr_SetString(PyExc_TypeError, _("object must be string"));
return -1;
}
@@ -2766,7 +2770,7 @@
if (n < 0 || n > max)
{
- PyErr_SetString(PyExc_ValueError, _("line number out of range"));
+ PyErr_SetString(PyExc_IndexError, _("line number out of range"));
return NULL;
}
@@ -3135,7 +3139,7 @@
bnr = PyLong_AsLong(keyObject);
else
{
- PyErr_SetString(PyExc_ValueError, _("key must be integer"));
+ PyErr_SetString(PyExc_TypeError, _("key must be integer"));
return NULL;
}
@@ -3654,7 +3658,8 @@
return convert_dl(obj, tv, pymap_to_tv, lookupDict);
else
{
- PyErr_SetString(PyExc_TypeError, _("unable to convert to vim structure"));
+ PyErr_SetString(PyExc_TypeError,
+ _("unable to convert to vim structure"));
return -1;
}
return 0;
diff --git a/src/if_python.c b/src/if_python.c
index edbba21..8a459fd 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -358,6 +358,7 @@
static PyObject *imp_PyExc_KeyboardInterrupt;
static PyObject *imp_PyExc_TypeError;
static PyObject *imp_PyExc_ValueError;
+static PyObject *imp_PyExc_RuntimeError;
# define PyExc_AttributeError imp_PyExc_AttributeError
# define PyExc_IndexError imp_PyExc_IndexError
@@ -365,6 +366,7 @@
# define PyExc_KeyboardInterrupt imp_PyExc_KeyboardInterrupt
# define PyExc_TypeError imp_PyExc_TypeError
# define PyExc_ValueError imp_PyExc_ValueError
+# define PyExc_RuntimeError imp_PyExc_RuntimeError
/*
* Table of name to function pointer of python.
@@ -593,12 +595,14 @@
imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
+ imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
Py_XINCREF(imp_PyExc_AttributeError);
Py_XINCREF(imp_PyExc_IndexError);
Py_XINCREF(imp_PyExc_KeyError);
Py_XINCREF(imp_PyExc_KeyboardInterrupt);
Py_XINCREF(imp_PyExc_TypeError);
Py_XINCREF(imp_PyExc_ValueError);
+ Py_XINCREF(imp_PyExc_RuntimeError);
Py_XDECREF(exmod);
}
#endif /* DYNAMIC_PYTHON */
diff --git a/src/if_python3.c b/src/if_python3.c
index 8acab9d..02da1b0 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -336,6 +336,7 @@
static PyObject *p3imp_PyExc_KeyboardInterrupt;
static PyObject *p3imp_PyExc_TypeError;
static PyObject *p3imp_PyExc_ValueError;
+static PyObject *p3imp_PyExc_RuntimeError;
# define PyExc_AttributeError p3imp_PyExc_AttributeError
# define PyExc_IndexError p3imp_PyExc_IndexError
@@ -343,6 +344,7 @@
# define PyExc_KeyboardInterrupt p3imp_PyExc_KeyboardInterrupt
# define PyExc_TypeError p3imp_PyExc_TypeError
# define PyExc_ValueError p3imp_PyExc_ValueError
+# define PyExc_RuntimeError p3imp_PyExc_RuntimeError
/*
* Table of name to function pointer of python.
@@ -580,12 +582,14 @@
p3imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
+ p3imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
Py_XINCREF(p3imp_PyExc_AttributeError);
Py_XINCREF(p3imp_PyExc_IndexError);
Py_XINCREF(p3imp_PyExc_KeyError);
Py_XINCREF(p3imp_PyExc_KeyboardInterrupt);
Py_XINCREF(p3imp_PyExc_TypeError);
Py_XINCREF(p3imp_PyExc_ValueError);
+ Py_XINCREF(p3imp_PyExc_RuntimeError);
Py_XDECREF(exmod);
}
#endif /* DYNAMIC_PYTHON3 */
@@ -1132,7 +1136,7 @@
}
else
{
- PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
return NULL;
}
}
@@ -1166,7 +1170,7 @@
}
else
{
- PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
return -1;
}
}
@@ -1248,7 +1252,7 @@
}
else
{
- PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
return NULL;
}
}
@@ -1275,7 +1279,7 @@
}
else
{
- PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
return -1;
}
}
@@ -1450,7 +1454,7 @@
}
else
{
- PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
return NULL;
}
}
@@ -1474,7 +1478,7 @@
}
else
{
- PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+ PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
return -1;
}
}
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
index 481acae..dd08b37 100644
--- a/src/testdir/test86.ok
+++ b/src/testdir/test86.ok
@@ -102,7 +102,7 @@
B: 1:1 2:1 3:1 4:1
>>> previewheight
p/gopts1: 12
- inv: 'a'! ValueError
+ inv: 'a'! TypeError
p/wopts1! KeyError
inv: 'a'! KeyError
wopts1! KeyError
@@ -123,7 +123,7 @@
B: 1:5 2:5 3:5 4:5
>>> operatorfunc
p/gopts1: ''
- inv: 2! ValueError
+ inv: 2! TypeError
p/wopts1! KeyError
inv: 2! KeyError
wopts1! KeyError
@@ -198,9 +198,9 @@
B: 1:'+2' 2:'+3' 3:'+1' 4:''
>>> statusline
p/gopts1: ''
- inv: 0! ValueError
+ inv: 0! TypeError
p/wopts1: None
- inv: 0! ValueError
+ inv: 0! TypeError
p/bopts1! KeyError
inv: 0! KeyError
bopts1! KeyError
@@ -259,7 +259,7 @@
wopts2! KeyError
wopts3! KeyError
p/bopts1: ''
- inv: 1! ValueError
+ inv: 1! TypeError
G: ''
W: 1:'A' 2:'B' 3:'' 4:'C'
B: 1:'A' 2:'B' 3:'' 4:'C'
@@ -288,14 +288,14 @@
B: 1:0 2:1 3:0 4:1
>>> path
p/gopts1: '.,/usr/include,,'
- inv: 0! ValueError
+ inv: 0! TypeError
p/wopts1! KeyError
inv: 0! KeyError
wopts1! KeyError
wopts2! KeyError
wopts3! KeyError
p/bopts1: None
- inv: 0! ValueError
+ inv: 0! TypeError
G: '.,,'
W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok
index 3addec8..d7fb06b 100644
--- a/src/testdir/test87.ok
+++ b/src/testdir/test87.ok
@@ -91,7 +91,7 @@
B: 1:1 2:1 3:1 4:1
>>> previewheight
p/gopts1: 12
- inv: 'a'! ValueError
+ inv: 'a'! TypeError
p/wopts1! KeyError
inv: 'a'! KeyError
wopts1! KeyError
@@ -112,7 +112,7 @@
B: 1:5 2:5 3:5 4:5
>>> operatorfunc
p/gopts1: b''
- inv: 2! ValueError
+ inv: 2! TypeError
p/wopts1! KeyError
inv: 2! KeyError
wopts1! KeyError
@@ -187,9 +187,9 @@
B: 1:'+2' 2:'+3' 3:'+1' 4:''
>>> statusline
p/gopts1: b''
- inv: 0! ValueError
+ inv: 0! TypeError
p/wopts1: None
- inv: 0! ValueError
+ inv: 0! TypeError
p/bopts1! KeyError
inv: 0! KeyError
bopts1! KeyError
@@ -248,7 +248,7 @@
wopts2! KeyError
wopts3! KeyError
p/bopts1: b''
- inv: 1! ValueError
+ inv: 1! TypeError
G: ''
W: 1:'A' 2:'B' 3:'' 4:'C'
B: 1:'A' 2:'B' 3:'' 4:'C'
@@ -277,14 +277,14 @@
B: 1:0 2:1 3:0 4:1
>>> path
p/gopts1: b'.,/usr/include,,'
- inv: 0! ValueError
+ inv: 0! TypeError
p/wopts1! KeyError
inv: 0! KeyError
wopts1! KeyError
wopts2! KeyError
wopts3! KeyError
p/bopts1: None
- inv: 0! ValueError
+ inv: 0! TypeError
G: '.,,'
W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
diff --git a/src/version.c b/src/version.c
index eb7d0db..3f09459 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 951,
+/**/
950,
/**/
949,