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

updated for version 7.3.1096

Problem:    Python: popitem() was not defined in a standard way.
Solution:   Remove the argument from popitem(). (ZyX)
This commit is contained in:
Bram Moolenaar
2013-06-02 17:41:54 +02:00
parent 525666f282
commit de71b5658f
7 changed files with 44 additions and 31 deletions

View File

@@ -174,7 +174,7 @@ vim.eval(str) *python-eval*
vim.bindeval(str) *python-bindeval*
Like |python-eval|, but returns special objects described in
|python-bindeval-objects|. These python objects let you modify (|List|
or |Dictionary|) or call (|Funcref|) vim objecs.
or |Dictionary|) or call (|Funcref|) vim objects.
Error object of the "vim" module
@@ -208,7 +208,7 @@ vim.windows *python-windows*
:py w in vim.windows # Membership test
:py n = len(vim.windows) # Number of elements
:py for w in vim.windows: # Sequential access
< Note: vim.windows object always accesses current tab page,.
< Note: vim.windows object always accesses current tab page.
|python-tabpage|.windows objects are bound to parent |python-tabpage|
object and always use windows from that tab page (or throw vim.error
in case tab page was deleted). You can keep a reference to both
@@ -494,10 +494,9 @@ vim.Dictionary object *python-Dictionary*
Remove specified key from dictionary and return
corresponding value. If key is not found and default is
given returns the default, otherwise raises KeyError.
popitem(key)
Remove specified key from dictionary and return a pair
with it and the corresponding value. Returned key is a new
object.
popitem()
Remove random key from dictionary and return (key, value)
pair.
has_key(key)
Check whether dictionary contains specified key, similar
to `key in dict`.

View File

@@ -1061,17 +1061,6 @@ _DictionaryItem(DictionaryObject *self, PyObject *args, int flags)
dictitem_free(di);
}
if (flags & DICT_FLAG_RETURN_PAIR)
{
PyObject *tmp = r;
if (!(r = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, tmp)))
{
Py_DECREF(tmp);
return NULL;
}
}
return r;
}
@@ -1457,15 +1446,38 @@ DictionaryPop(DictionaryObject *self, PyObject *args)
}
static PyObject *
DictionaryPopItem(DictionaryObject *self, PyObject *args)
DictionaryPopItem(DictionaryObject *self)
{
PyObject *keyObject;
hashitem_T *hi;
PyObject *r;
PyObject *valObject;
dictitem_T *di;
if (!PyArg_ParseTuple(args, "O", &keyObject))
if (self->dict->dv_hashtab.ht_used == 0)
{
PyErr_SetNone(PyExc_KeyError);
return NULL;
}
hi = self->dict->dv_hashtab.ht_array;
while (HASHITEM_EMPTY(hi))
++hi;
di = dict_lookup(hi);
if (!(valObject = ConvertToPyObject(&di->di_tv)))
return NULL;
return _DictionaryItem(self, keyObject,
DICT_FLAG_POP|DICT_FLAG_RETURN_PAIR);
if (!(r = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, valObject)))
{
Py_DECREF(valObject);
return NULL;
}
hash_remove(&self->dict->dv_hashtab, hi);
dictitem_free(di);
return r;
}
static PyObject *
@@ -1505,7 +1517,7 @@ static struct PyMethodDef DictionaryMethods[] = {
{"update", (PyCFunction)DictionaryUpdate, METH_VARARGS|METH_KEYWORDS, ""},
{"get", (PyCFunction)DictionaryGet, METH_VARARGS, ""},
{"pop", (PyCFunction)DictionaryPop, METH_VARARGS, ""},
{"popitem", (PyCFunction)DictionaryPopItem, METH_VARARGS, ""},
{"popitem", (PyCFunction)DictionaryPopItem, METH_NOARGS, ""},
{"has_key", (PyCFunction)DictionaryHasKey, METH_VARARGS, ""},
{"__dir__", (PyCFunction)DictionaryDir, METH_NOARGS, ""},
{ NULL, NULL, 0, NULL}

View File

@@ -83,7 +83,7 @@ EOF
:$put =pyeval('repr(''1'' in d)')
:$put =pyeval('repr(list(iter(d)))')
:$put =string(d)
:$put =pyeval('repr(d.popitem(''0''))')
:$put =pyeval('repr(d.popitem())')
:$put =pyeval('repr(d.get(''0''))')
:$put =pyeval('repr(list(iter(d)))')
:"
@@ -226,7 +226,7 @@ em('d["a\\0b"]=1')
em('d[u"a\\0b"]=1')
em('d.pop("abc")')
em('d.popitem("abc")')
em('d.popitem()')
EOF
:$put =messages
:unlet messages

View File

@@ -26,7 +26,7 @@ True
False
['0']
{'0': -1}
('', -1L)
('0', -1L)
None
[]
[0, 1, 2, 3]
@@ -666,7 +666,7 @@ d.update((("a", FailingMapping()),)):(<type 'exceptions.NotImplementedError'>, N
d.update((("a", FailingMappingKey()),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
<<< Finished
>> DictionaryPopItem
d.popitem(1, 2):(<type 'exceptions.TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
d.popitem(1, 2):(<type 'exceptions.TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
>> DictionaryHasKey
d.has_key():(<type 'exceptions.TypeError'>, TypeError('function takes exactly 1 argument (0 given)',))
> List

View File

@@ -77,7 +77,7 @@ EOF
:$put =py3eval('repr(''1'' in d)')
:$put =py3eval('repr(list(iter(d)))')
:$put =string(d)
:$put =py3eval('repr(d.popitem(''0''))')
:$put =py3eval('repr(d.popitem())')
:$put =py3eval('repr(d.get(''0''))')
:$put =py3eval('repr(list(iter(d)))')
:"
@@ -220,7 +220,7 @@ em('d["a\\0b"]=1')
em('d[b"a\\0b"]=1')
em('d.pop("abc")')
em('d.popitem("abc")')
em('d.popitem()')
EOF
:$put =messages
:unlet messages

View File

@@ -26,7 +26,7 @@ True
False
[b'0']
{'0': -1}
(b'', -1)
(b'0', -1)
None
[]
[0, 1, 2, 3]
@@ -663,7 +663,7 @@ d.update((("a", FailingMapping()),)):(<class 'NotImplementedError'>, NotImplemen
d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError())
<<< Finished
>> DictionaryPopItem
d.popitem(1, 2):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
>> DictionaryHasKey
d.has_key():(<class 'TypeError'>, TypeError('function takes exactly 1 argument (0 given)',))
> List

View File

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