[vim/f18] - patchlevel 672
Karsten Hopp
karsten at fedoraproject.org
Thu Oct 4 21:39:34 UTC 2012
commit 8b653467651852339d9a58421a7c8bc8eca1c6b1
Author: Karsten Hopp <karsten at redhat.com>
Date: Fri Oct 5 00:36:26 2012 +0200
- patchlevel 672
7.3.672 | 699 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 699 insertions(+), 0 deletions(-)
---
diff --git a/7.3.672 b/7.3.672
new file mode 100644
index 0000000..b43b0f1
--- /dev/null
+++ b/7.3.672
@@ -0,0 +1,699 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.672
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.672
+Problem: Not possible to lock/unlock lists in Python interface.
+Solution: Add .locked and .scope attributes. (ZyX)
+Files: runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python.c,
+ src/if_python3.c, src/testdir/test86.in, src/testdir/test86.ok,
+ src/testdir/test87.in, src/testdir/test87.ok
+
+
+*** ../vim-7.3.671/runtime/doc/if_pyth.txt 2012-06-29 12:54:32.000000000 +0200
+--- runtime/doc/if_pyth.txt 2012-09-21 13:49:14.000000000 +0200
+***************
+*** 27,33 ****
+
+ *:python* *:py* *E205* *E263* *E264*
+ :[range]py[thon] {stmt}
+! Execute Python statement {stmt}.
+
+ :[range]py[thon] << {endmarker}
+ {script}
+--- 27,35 ----
+
+ *:python* *:py* *E205* *E263* *E264*
+ :[range]py[thon] {stmt}
+! Execute Python statement {stmt}. A simple check if
+! the `:python` command is working: >
+! :python print "Hello"
+
+ :[range]py[thon] << {endmarker}
+ {script}
+***************
+*** 157,162 ****
+--- 159,184 ----
+ vimlist or vimdictionary python type that are connected to original
+ list or dictionary. Thus modifications to these objects imply
+ modifications of the original.
++
++ Additionally, vimlist and vimdictionary type have read-write
++ `.locked` attribute that returns
++ Value Meaning ~
++ zero Variable is not locked
++ vim.VAR_LOCKED Variable is locked, but can be unlocked
++ vim.VAR_FIXED Variable is locked and can’t be unlocked
++ integer constants. If variable is not fixed, you can do
++ `var.locked=True` to lock it and `var.locked=False` to unlock.
++ There is no recursive locking like |:lockvar|! does. There is also
++ no way to lock a specific key or check whether it is locked (in any
++ case these locks are ignored by anything except |:let|: |extend()|
++ does not care, neither does python interface).
++
++ Vimdictionary type also supports `.scope` attribute which is one of
++ Value Meaning ~
++ zero Dictionary is not a scope one
++ vim.VAR_DEF_SCOPE Function-local or global scope dictionary
++ vim.VAR_SCOPE Other scope dictionary
++
+ 2. if expression evaluates to a function reference, then it returns
+ callable vimfunction object. Use self keyword argument to assign
+ |self| object for dictionary functions.
+***************
+*** 362,369 ****
+ 8. Python 3 *python3*
+
+ *:py3* *:python3*
+! The |:py3| and |:python3| commands work similar to |:python|.
+! *:py3file*
+ The |:py3file| command works similar to |:pyfile|.
+
+
+--- 384,393 ----
+ 8. Python 3 *python3*
+
+ *:py3* *:python3*
+! The |:py3| and |:python3| commands work similar to |:python|. A simple check
+! if the `:py3` command is wrong: >
+! :py3 print("Hello")
+! < *:py3file*
+ The |:py3file| command works similar to |:pyfile|.
+
+
+*** ../vim-7.3.671/src/if_py_both.h 2012-09-21 13:45:57.000000000 +0200
+--- src/if_py_both.h 2012-09-21 13:49:14.000000000 +0200
+***************
+*** 808,813 ****
+--- 808,851 ----
+ }
+
+ static PyInt
++ DictionarySetattr(DictionaryObject *self, char *name, PyObject *val)
++ {
++ if (val == NULL)
++ {
++ PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes"));
++ return -1;
++ }
++
++ if (strcmp(name, "locked") == 0)
++ {
++ if (self->dict->dv_lock == VAR_FIXED)
++ {
++ PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed dictionary"));
++ return -1;
++ }
++ else
++ {
++ if (!PyBool_Check(val))
++ {
++ PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed"));
++ return -1;
++ }
++
++ if (val == Py_True)
++ self->dict->dv_lock = VAR_LOCKED;
++ else
++ self->dict->dv_lock = 0;
++ }
++ return 0;
++ }
++ else
++ {
++ PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute"));
++ return -1;
++ }
++ }
++
++ static PyInt
+ DictionaryLength(PyObject *self)
+ {
+ return ((PyInt) ((((DictionaryObject *)(self))->dict->dv_hashtab.ht_used)));
+***************
+*** 1271,1276 ****
+--- 1309,1352 ----
+ return self;
+ }
+
++ static int
++ ListSetattr(ListObject *self, char *name, PyObject *val)
++ {
++ if (val == NULL)
++ {
++ PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes"));
++ return -1;
++ }
++
++ if (strcmp(name, "locked") == 0)
++ {
++ if (self->list->lv_lock == VAR_FIXED)
++ {
++ PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed list"));
++ return -1;
++ }
++ else
++ {
++ if (!PyBool_Check(val))
++ {
++ PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed"));
++ return -1;
++ }
++
++ if (val == Py_True)
++ self->list->lv_lock = VAR_LOCKED;
++ else
++ self->list->lv_lock = 0;
++ }
++ return 0;
++ }
++ else
++ {
++ PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute"));
++ return -1;
++ }
++ }
++
+ static struct PyMethodDef ListMethods[] = {
+ {"extend", (PyCFunction)ListConcatInPlace, METH_O, ""},
+ { NULL, NULL, 0, NULL }
+*** ../vim-7.3.671/src/if_python.c 2012-09-21 13:45:57.000000000 +0200
+--- src/if_python.c 2012-09-21 13:49:14.000000000 +0200
+***************
+*** 163,168 ****
+--- 163,169 ----
+ # define PyInt_FromLong dll_PyInt_FromLong
+ # define PyLong_AsLong dll_PyLong_AsLong
+ # define PyLong_FromLong dll_PyLong_FromLong
++ # define PyBool_Type (*dll_PyBool_Type)
+ # define PyInt_Type (*dll_PyInt_Type)
+ # define PyLong_Type (*dll_PyLong_Type)
+ # define PyList_GetItem dll_PyList_GetItem
+***************
+*** 221,226 ****
+--- 222,229 ----
+ # define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
+ # endif
+ # define _Py_NoneStruct (*dll__Py_NoneStruct)
++ # define _Py_ZeroStruct (*dll__Py_ZeroStruct)
++ # define _Py_TrueStruct (*dll__Py_TrueStruct)
+ # define PyObject_Init dll__PyObject_Init
+ # define PyObject_GetIter dll_PyObject_GetIter
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+***************
+*** 263,268 ****
+--- 266,272 ----
+ static PyObject*(*dll_PyInt_FromLong)(long);
+ static long(*dll_PyLong_AsLong)(PyObject *);
+ static PyObject*(*dll_PyLong_FromLong)(long);
++ static PyTypeObject* dll_PyBool_Type;
+ static PyTypeObject* dll_PyInt_Type;
+ static PyTypeObject* dll_PyLong_Type;
+ static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
+***************
+*** 320,325 ****
+--- 324,331 ----
+ static iternextfunc dll__PyObject_NextNotImplemented;
+ # endif
+ static PyObject* dll__Py_NoneStruct;
++ static PyObject* _Py_ZeroStruct;
++ static PyObject* dll__Py_TrueStruct;
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
+ # endif
+***************
+*** 389,394 ****
+--- 395,401 ----
+ {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong},
+ {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong},
+ {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong},
++ {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type},
+ {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type},
+ {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
+ {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
+***************
+*** 449,454 ****
+--- 456,463 ----
+ {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
+ # endif
+ {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
++ {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct},
++ {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct},
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
+ # endif
+***************
+*** 1563,1568 ****
+--- 1572,1581 ----
+ PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList);
+ PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
+ PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
++ PyDict_SetItemString(dict, "VAR_LOCKED", PyInt_FromLong(VAR_LOCKED));
++ PyDict_SetItemString(dict, "VAR_FIXED", PyInt_FromLong(VAR_FIXED));
++ PyDict_SetItemString(dict, "VAR_SCOPE", PyInt_FromLong(VAR_SCOPE));
++ PyDict_SetItemString(dict, "VAR_DEF_SCOPE", PyInt_FromLong(VAR_DEF_SCOPE));
+
+ if (PyErr_Occurred())
+ return -1;
+***************
+*** 1629,1635 ****
+ (destructor) DictionaryDestructor,
+ (printfunc) 0,
+ (getattrfunc) DictionaryGetattr,
+! (setattrfunc) 0,
+ (cmpfunc) 0,
+ (reprfunc) 0,
+
+--- 1642,1648 ----
+ (destructor) DictionaryDestructor,
+ (printfunc) 0,
+ (getattrfunc) DictionaryGetattr,
+! (setattrfunc) DictionarySetattr,
+ (cmpfunc) 0,
+ (reprfunc) 0,
+
+***************
+*** 1656,1661 ****
+--- 1669,1681 ----
+ static PyObject *
+ DictionaryGetattr(PyObject *self, char *name)
+ {
++ DictionaryObject *this = ((DictionaryObject *) (self));
++
++ if (strcmp(name, "locked") == 0)
++ return PyInt_FromLong(this->dict->dv_lock);
++ else if (strcmp(name, "scope") == 0)
++ return PyInt_FromLong(this->dict->dv_scope);
++
+ return Py_FindMethod(DictionaryMethods, self, name);
+ }
+
+***************
+*** 1687,1693 ****
+ (destructor) ListDestructor,
+ (printfunc) 0,
+ (getattrfunc) ListGetattr,
+! (setattrfunc) 0,
+ (cmpfunc) 0,
+ (reprfunc) 0,
+
+--- 1707,1713 ----
+ (destructor) ListDestructor,
+ (printfunc) 0,
+ (getattrfunc) ListGetattr,
+! (setattrfunc) ListSetattr,
+ (cmpfunc) 0,
+ (reprfunc) 0,
+
+***************
+*** 1714,1719 ****
+--- 1734,1742 ----
+ static PyObject *
+ ListGetattr(PyObject *self, char *name)
+ {
++ if (strcmp(name, "locked") == 0)
++ return PyInt_FromLong(((ListObject *)(self))->list->lv_lock);
++
+ return Py_FindMethod(ListMethods, self, name);
+ }
+
+*** ../vim-7.3.671/src/if_python3.c 2012-09-21 13:45:57.000000000 +0200
+--- src/if_python3.c 2012-09-21 13:49:14.000000000 +0200
+***************
+*** 161,167 ****
+ # define PyRun_String py3_PyRun_String
+ # define PySys_SetObject py3_PySys_SetObject
+ # define PySys_SetArgv py3_PySys_SetArgv
+- # define PyType_Type (*py3_PyType_Type)
+ # define PyType_Ready py3_PyType_Ready
+ #undef Py_BuildValue
+ # define Py_BuildValue py3_Py_BuildValue
+--- 161,166 ----
+***************
+*** 170,175 ****
+--- 169,176 ----
+ # define Py_Finalize py3_Py_Finalize
+ # define Py_IsInitialized py3_Py_IsInitialized
+ # define _Py_NoneStruct (*py3__Py_NoneStruct)
++ # define _Py_FalseStruct (*py3__Py_FalseStruct)
++ # define _Py_TrueStruct (*py3__Py_TrueStruct)
+ # define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented)
+ # define PyModule_AddObject py3_PyModule_AddObject
+ # define PyImport_AppendInittab py3_PyImport_AppendInittab
+***************
+*** 184,191 ****
+--- 185,194 ----
+ # define PyFloat_FromDouble py3_PyFloat_FromDouble
+ # define PyFloat_AsDouble py3_PyFloat_AsDouble
+ # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
++ # define PyType_Type (*py3_PyType_Type)
+ # define PySlice_Type (*py3_PySlice_Type)
+ # define PyFloat_Type (*py3_PyFloat_Type)
++ # define PyBool_Type (*py3_PyBool_Type)
+ # define PyErr_NewException py3_PyErr_NewException
+ # ifdef Py_DEBUG
+ # define _Py_NegativeRefcount py3__Py_NegativeRefcount
+***************
+*** 245,251 ****
+ static PyObject* (*py3_PyImport_ImportModule)(const char *);
+ static PyObject* (*py3_PyImport_AddModule)(const char *);
+ static int (*py3_PyErr_BadArgument)(void);
+- static PyTypeObject* py3_PyType_Type;
+ static PyObject* (*py3_PyErr_Occurred)(void);
+ static PyObject* (*py3_PyModule_GetDict)(PyObject *);
+ static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *);
+--- 248,253 ----
+***************
+*** 275,280 ****
+--- 277,284 ----
+ static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
+ static iternextfunc py3__PyObject_NextNotImplemented;
+ static PyObject* py3__Py_NoneStruct;
++ static PyObject* py3__Py_FalseStruct;
++ static PyObject* py3__Py_TrueStruct;
+ static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
+ static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
+ static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
+***************
+*** 288,295 ****
+--- 292,301 ----
+ static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
+ static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
+ static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
++ static PyTypeObject* py3_PyType_Type;
+ static PyTypeObject* py3_PySlice_Type;
+ static PyTypeObject* py3_PyFloat_Type;
++ static PyTypeObject* py3_PyBool_Type;
+ static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
+ static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+ static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
+***************
+*** 363,369 ****
+ {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule},
+ {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule},
+ {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument},
+- {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
+ {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred},
+ {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict},
+ {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem},
+--- 369,374 ----
+***************
+*** 386,391 ****
+--- 391,398 ----
+ {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
+ {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented},
+ {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
++ {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct},
++ {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct},
+ {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
+ {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
+ {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
+***************
+*** 400,407 ****
+--- 407,416 ----
+ {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
+ {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
+ {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
++ {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
+ {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
+ {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
++ {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type},
+ {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
+ # ifdef Py_DEBUG
+ {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
+***************
+*** 1534,1539 ****
+--- 1543,1570 ----
+ /* mp_ass_subscript */ (objobjargproc) DictionaryAssItem,
+ };
+
++ static PyObject *
++ DictionaryGetattro(PyObject *self, PyObject *nameobj)
++ {
++ DictionaryObject *this = ((DictionaryObject *) (self));
++
++ GET_ATTR_STRING(name, nameobj);
++
++ if (strcmp(name, "locked") == 0)
++ return PyLong_FromLong(this->dict->dv_lock);
++ else if (strcmp(name, "scope") == 0)
++ return PyLong_FromLong(this->dict->dv_scope);
++
++ return PyObject_GenericGetAttr(self, nameobj);
++ }
++
++ static int
++ DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
++ {
++ GET_ATTR_STRING(name, nameobj);
++ return DictionarySetattr((DictionaryObject *) self, name, val);
++ }
++
+ static PyTypeObject DictionaryType;
+
+ static void
+***************
+*** 1625,1630 ****
+--- 1656,1679 ----
+ }
+ }
+
++ static PyObject *
++ ListGetattro(PyObject *self, PyObject *nameobj)
++ {
++ GET_ATTR_STRING(name, nameobj);
++
++ if (strcmp(name, "locked") == 0)
++ return PyLong_FromLong(((ListObject *) (self))->list->lv_lock);
++
++ return PyObject_GenericGetAttr(self, nameobj);
++ }
++
++ static int
++ ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
++ {
++ GET_ATTR_STRING(name, nameobj);
++ return ListSetattr((ListObject *) self, name, val);
++ }
++
+ static void
+ ListDestructor(PyObject *self)
+ {
+***************
+*** 1713,1718 ****
+--- 1762,1768 ----
+ PyMODINIT_FUNC Py3Init_vim(void)
+ {
+ PyObject *mod;
++ PyObject *tmp;
+ /* The special value is removed from sys.path in Python3_Init(). */
+ static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL};
+
+***************
+*** 1744,1749 ****
+--- 1794,1809 ----
+ Py_INCREF((PyObject *)(void *)&TheWindowList);
+ PyModule_AddObject(mod, "windows", (PyObject *)(void *)&TheWindowList);
+
++ #define ADD_INT_CONSTANT(name, value) \
++ tmp = PyLong_FromLong(value); \
++ Py_INCREF(tmp); \
++ PyModule_AddObject(mod, name, tmp)
++
++ ADD_INT_CONSTANT("VAR_LOCKED", VAR_LOCKED);
++ ADD_INT_CONSTANT("VAR_FIXED", VAR_FIXED);
++ ADD_INT_CONSTANT("VAR_SCOPE", VAR_SCOPE);
++ ADD_INT_CONSTANT("VAR_DEF_SCOPE", VAR_DEF_SCOPE);
++
+ if (PyErr_Occurred())
+ return NULL;
+
+***************
+*** 1899,1904 ****
+--- 1959,1966 ----
+ vim_memset(&DictionaryType, 0, sizeof(DictionaryType));
+ DictionaryType.tp_name = "vim.dictionary";
+ DictionaryType.tp_basicsize = sizeof(DictionaryObject);
++ DictionaryType.tp_getattro = DictionaryGetattro;
++ DictionaryType.tp_setattro = DictionarySetattro;
+ DictionaryType.tp_dealloc = DictionaryDestructor;
+ DictionaryType.tp_as_mapping = &DictionaryAsMapping;
+ DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT;
+***************
+*** 1909,1914 ****
+--- 1971,1978 ----
+ ListType.tp_name = "vim.list";
+ ListType.tp_dealloc = ListDestructor;
+ ListType.tp_basicsize = sizeof(ListObject);
++ ListType.tp_getattro = ListGetattro;
++ ListType.tp_setattro = ListSetattro;
+ ListType.tp_as_sequence = &ListAsSeq;
+ ListType.tp_as_mapping = &ListAsMapping;
+ ListType.tp_flags = Py_TPFLAGS_DEFAULT;
+*** ../vim-7.3.671/src/testdir/test86.in 2012-09-05 19:17:37.000000000 +0200
+--- src/testdir/test86.in 2012-09-21 13:49:14.000000000 +0200
+***************
+*** 211,216 ****
+--- 211,251 ----
+ m.extend([e.__class__.__name__])
+ EOF
+ :$put =messages
++ :unlet messages
++ :" locked and scope attributes
++ :let d={} | let dl={} | lockvar dl
++ :for s in split("d dl v: g:")
++ : let name=tr(s, ':', 's')
++ : execute 'py '.name.'=vim.bindeval("'.s.'")'
++ : let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';')
++ : $put =toput
++ :endfor
++ :silent! let d.abc=1
++ :silent! let dl.abc=1
++ :py d.locked=True
++ :py dl.locked=False
++ :silent! let d.def=1
++ :silent! let dl.def=1
++ :put ='d:'.string(d)
++ :put ='dl:'.string(dl)
++ :unlet d dl
++ :
++ :let l=[] | let ll=[] | lockvar ll
++ :for s in split("l ll")
++ : let name=tr(s, ':', 's')
++ : execute 'py '.name.'=vim.bindeval("'.s.'")'
++ : let toput=s.' : locked:'.pyeval(name.'.locked')
++ : $put =toput
++ :endfor
++ :silent! call extend(l, [0])
++ :silent! call extend(ll, [0])
++ :py l.locked=True
++ :py ll.locked=False
++ :silent! call extend(l, [1])
++ :silent! call extend(ll, [1])
++ :put ='l:'.string(l)
++ :put ='ll:'.string(ll)
++ :unlet l ll
+ :"
+ :" pyeval()
+ :let l=pyeval('range(3)')
+***************
+*** 240,245 ****
+--- 275,281 ----
+ :call garbagecollect(1)
+ :"
+ :/^start:/,$wq! test.out
++ :call getchar()
+ ENDTEST
+
+ start:
+*** ../vim-7.3.671/src/testdir/test86.ok 2012-09-05 19:17:37.000000000 +0200
+--- src/testdir/test86.ok 2012-09-21 13:49:14.000000000 +0200
+***************
+*** 44,49 ****
+--- 44,59 ----
+ ValueError
+ TypeError
+ TypeError
++ d : locked:0;scope:0
++ dl : locked:1;scope:0
++ v: : locked:2;scope:1
++ g: : locked:0;scope:2
++ d:{'abc': 1}
++ dl:{'def': 1}
++ l : locked:0
++ ll : locked:1
++ l:[0]
++ ll:[1]
+ [0, 1, 2]
+ ['a', 'b']
+ ['c', 1]
+*** ../vim-7.3.671/src/testdir/test87.in 2012-09-05 19:17:37.000000000 +0200
+--- src/testdir/test87.in 2012-09-21 13:49:14.000000000 +0200
+***************
+*** 211,216 ****
+--- 211,251 ----
+ m.extend([e.__class__.__name__])
+ EOF
+ :$put =messages
++ :unlet messages
++ :" locked and scope attributes
++ :let d={} | let dl={} | lockvar dl
++ :for s in split("d dl v: g:")
++ : let name=tr(s, ':', 's')
++ : execute 'py3 '.name.'=vim.bindeval("'.s.'")'
++ : let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
++ : $put =toput
++ :endfor
++ :silent! let d.abc=1
++ :silent! let dl.abc=1
++ :py3 d.locked=True
++ :py3 dl.locked=False
++ :silent! let d.def=1
++ :silent! let dl.def=1
++ :put ='d:'.string(d)
++ :put ='dl:'.string(dl)
++ :unlet d dl
++ :
++ :let l=[] | let ll=[] | lockvar ll
++ :for s in split("l ll")
++ : let name=tr(s, ':', 's')
++ : execute 'py3 '.name.'=vim.bindeval("'.s.'")'
++ : let toput=s.' : locked:'.py3eval(name.'.locked')
++ : $put =toput
++ :endfor
++ :silent! call extend(l, [0])
++ :silent! call extend(ll, [0])
++ :py3 l.locked=True
++ :py3 ll.locked=False
++ :silent! call extend(l, [1])
++ :silent! call extend(ll, [1])
++ :put ='l:'.string(l)
++ :put ='ll:'.string(ll)
++ :unlet l ll
+ :"
+ :" py3eval()
+ :let l=py3eval('[0, 1, 2]')
+*** ../vim-7.3.671/src/testdir/test87.ok 2012-09-05 19:17:37.000000000 +0200
+--- src/testdir/test87.ok 2012-09-21 13:49:14.000000000 +0200
+***************
+*** 44,49 ****
+--- 44,59 ----
+ ValueError
+ TypeError
+ TypeError
++ d : locked:0;scope:0
++ dl : locked:1;scope:0
++ v: : locked:2;scope:1
++ g: : locked:0;scope:2
++ d:{'abc': 1}
++ dl:{'def': 1}
++ l : locked:0
++ ll : locked:1
++ l:[0]
++ ll:[1]
+ [0, 1, 2]
+ ['a', 'b']
+ ['c', 1]
+*** ../vim-7.3.671/src/version.c 2012-09-21 13:45:57.000000000 +0200
+--- src/version.c 2012-09-21 13:48:18.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 672,
+ /**/
+
+--
+Vi beats Emacs to death, and then again!
+ http://linuxtoday.com/stories/5764.html
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
More information about the scm-commits
mailing list