[vim] - patchlevel 1163
Karsten Hopp
karsten at fedoraproject.org
Thu Jun 13 22:34:47 UTC 2013
commit 828576ebcb890715b92aed92c519a99cf00d1ff6
Author: Karsten Hopp <karsten at redhat.com>
Date: Fri Jun 14 00:28:49 2013 +0200
- patchlevel 1163
7.3.1163 | 1313 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 1313 insertions(+), 0 deletions(-)
---
diff --git a/7.3.1163 b/7.3.1163
new file mode 100644
index 0000000..35d9270
--- /dev/null
+++ b/7.3.1163
@@ -0,0 +1,1313 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.1163
+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.1163
+Problem: Not easy to load Python modules.
+Solution: Search "python2", "python3" and "pythonx" directories in
+ 'runtimepath' for Python modules. (ZyX)
+Files: runtime/doc/if_pyth.txt, src/configure.in, src/ex_cmds2.c,
+ src/if_py_both.h, src/if_python.c, src/if_python3.c,
+ src/testdir/test86.in, src/testdir/test87.in, src/auto/configure
+
+
+*** ../vim-7.3.1162/runtime/doc/if_pyth.txt 2013-06-02 18:20:12.000000000 +0200
+--- runtime/doc/if_pyth.txt 2013-06-10 20:51:21.000000000 +0200
+***************
+*** 180,185 ****
+--- 180,191 ----
+ Like |strwidth()|: returns number of display cells str occupies, tab
+ is counted as one cell.
+
++ vim.foreach_rtp(callable) *python-foreach_rtp*
++ Call the given callable for each path in 'runtimepath' until either
++ callable returns something but None, the exception is raised or there
++ are no longer paths. If stopped in case callable returned non-None,
++ vim.foreach_rtp function returns the value returned by callable.
++
+ vim.chdir(*args, **kwargs) *python-chdir*
+ vim.fchdir(*args, **kwargs) *python-fchdir*
+ Run os.chdir or os.fchdir, then all appropriate vim stuff.
+***************
+*** 300,305 ****
+--- 306,418 ----
+ supported, and may cause the program to crash. This should probably be
+ fixed.
+
++ *python2-directory* *python3-directory* *pythonx-directory*
++ Python 'runtimepath' handling *python-special-path*
++
++ In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
++ the list of paths found in 'runtimepath': with this directory in sys.path and
++ vim.path_hooks in sys.path_hooks python will try to load module from
++ {rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
++ each {rtp} found in 'runtimepath'.
++
++ Implementation for python 2 is the following: usual importing code with empty
++ lists in place of sys.path_hooks and sys.meta_path. Code is similar to the
++ below, but written in C: >
++
++ # Assuming vim variable is already accessible and is set to the current
++ # module
++ import sys
++
++ def find_module(fullname):
++ return vim
++
++ def load_module(fullname):
++ # see vim._get_paths below
++ new_path = _get_paths()
++
++ try: old_path = sys.path
++ except: pass
++ try: old_meta_path = sys.meta_path
++ except: pass
++ try: old_path_hooks = sys.path_hooks
++ except: pass
++
++ sys.meta_path = []
++ sys.path_hooks = sys.meta_path
++ sys.path = new_path
++
++ try:
++ exec ('import ' + fullname + ' as m') # No actual exec in C code
++ return m
++ finally:
++ e = None
++ try: sys.path = old_path
++ except Exception as e: pass
++ try: sys.meta_path = old_meta_path
++ except Exception as e: pass
++ try: sys.path_hooks = old_path_hooks
++ except Exception as e: pass
++ if e:
++ raise e
++
++ def path_hook(d):
++ if d == VIM_SPECIAL_PATH:
++ return vim
++ raise ImportError
++
++ sys.path_hooks.append(path_hook)
++
++ Implementation for python 3 is cleaner: code is similar to the following, but,
++ again, written in C: >
++
++ from importlib.machinery import PathFinder
++ import sys
++
++ class Finder(PathFinder):
++ @classmethod
++ def find_module(cls, fullname):
++ # see vim._get_paths below
++ new_path = _get_paths()
++
++ # super().find_module is also a class method
++ # super() is not used because this variant is easier to implement
++ # in C
++ return PathFinder.find_module(fullname, new_path)
++
++ def path_hook(path):
++ if path == VIM_SPECIAL_PATH:
++ return Finder
++ raise ImportError
++
++ sys.path_hooks.append(path_hook)
++
++ vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
++ String constant used in conjunction with vim path hook. If path hook
++ installed by vim is requested to handle anything but path equal to
++ vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
++ case it uses special loader.
++
++ Note: you must not use value of this constant directly, always use
++ vim.VIM_SPECIAL_PATH object.
++
++ vim.load_module(name) *python-load_module*
++ vim.find_module(...) *python-find_module*
++ vim.path_hook(path) *python-path_hook*
++ Methods or objects used to implement path loading as described above.
++ You should not be using any of these directly except for vim.path_hook
++ in case you need to do something with sys.meta_path. It is not
++ guaranteed that any of the objects will exist in the future vim
++ versions. In fact, load_module and find_module methods do not exists
++ in python3.
++
++ vim._get_paths *python-_get_paths*
++ Methods returning a list of paths which will be searched for by path
++ hook. You should not rely on this method being present in future
++ versions, but can use it for debugging.
++
++ It returns a list of {rtp}/python2 (or {rtp}/python3) and
++ {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
++
+ ==============================================================================
+ 3. Buffer objects *python-buffer*
+
+***************
+*** 340,346 ****
+ |BufFilePost| autocommands are launched.
+ b.number Buffer number. Can be used as |python-buffers| key.
+ Read-only.
+! b.valid True or False. Buffer object becames invalid when
+ corresponding buffer is wiped out.
+
+ The buffer object methods are:
+--- 453,459 ----
+ |BufFilePost| autocommands are launched.
+ b.number Buffer number. Can be used as |python-buffers| key.
+ Read-only.
+! b.valid True or False. Buffer object becomes invalid when
+ corresponding buffer is wiped out.
+
+ The buffer object methods are:
+***************
+*** 446,452 ****
+ row, col (read-only) On-screen window position in display cells.
+ First position is zero.
+ tabpage (read-only) Window tab page.
+! valid (read-write) True or False. Window object becames invalid
+ when corresponding window is closed.
+
+ The height attribute is writable only if the screen is split horizontally.
+--- 559,565 ----
+ row, col (read-only) On-screen window position in display cells.
+ First position is zero.
+ tabpage (read-only) Window tab page.
+! valid (read-write) True or False. Window object becomes invalid
+ when corresponding window is closed.
+
+ The height attribute is writable only if the screen is split horizontally.
+***************
+*** 471,477 ****
+ windows Like |python-windows|, but for current tab page.
+ vars The tab page |t:| variables.
+ window Current tabpage window.
+! valid True or False. Tab page object becames invalid when
+ corresponding tab page is closed.
+
+ TabPage object type is available using "TabPage" attribute of vim module.
+--- 584,590 ----
+ windows Like |python-windows|, but for current tab page.
+ vars The tab page |t:| variables.
+ window Current tabpage window.
+! valid True or False. Tab page object becomes invalid when
+ corresponding tab page is closed.
+
+ TabPage object type is available using "TabPage" attribute of vim module.
+*** ../vim-7.3.1162/src/configure.in 2013-06-02 19:14:11.000000000 +0200
+--- src/configure.in 2013-06-10 20:51:21.000000000 +0200
+***************
+*** 863,872 ****
+ ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
+ ]])
+
+! dnl -- it must be at least version 2.2
+! AC_MSG_CHECKING(Python is 2.2 or better)
+ if ${vi_cv_path_python} -c \
+! "import sys; sys.exit(${vi_cv_var_python_version} < 2.2)"
+ then
+ AC_MSG_RESULT(yep)
+
+--- 863,872 ----
+ ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
+ ]])
+
+! dnl -- it must be at least version 2.3
+! AC_MSG_CHECKING(Python is 2.3 or better)
+ if ${vi_cv_path_python} -c \
+! "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
+ then
+ AC_MSG_RESULT(yep)
+
+*** ../vim-7.3.1162/src/ex_cmds2.c 2013-06-10 20:10:40.000000000 +0200
+--- src/ex_cmds2.c 2013-06-10 20:51:21.000000000 +0200
+***************
+*** 2737,2742 ****
+--- 2737,2746 ----
+ * When "all" is TRUE repeat for all matches, otherwise only the first one is
+ * used.
+ * Returns OK when at least one match found, FAIL otherwise.
++ *
++ * If "name" is NULL calls callback for each entry in runtimepath. Cookie is
++ * passed by reference in this case, setting it to NULL indicates that callback
++ * has done its job.
+ */
+ int
+ do_in_runtimepath(name, all, callback, cookie)
+***************
+*** 2768,2774 ****
+ buf = alloc(MAXPATHL);
+ if (buf != NULL && rtp_copy != NULL)
+ {
+! if (p_verbose > 1)
+ {
+ verbose_enter();
+ smsg((char_u *)_("Searching for \"%s\" in \"%s\""),
+--- 2772,2778 ----
+ buf = alloc(MAXPATHL);
+ if (buf != NULL && rtp_copy != NULL)
+ {
+! if (p_verbose > 1 && name != NULL)
+ {
+ verbose_enter();
+ smsg((char_u *)_("Searching for \"%s\" in \"%s\""),
+***************
+*** 2782,2788 ****
+ {
+ /* Copy the path from 'runtimepath' to buf[]. */
+ copy_option_part(&rtp, buf, MAXPATHL, ",");
+! if (STRLEN(buf) + STRLEN(name) + 2 < MAXPATHL)
+ {
+ add_pathsep(buf);
+ tail = buf + STRLEN(buf);
+--- 2786,2798 ----
+ {
+ /* Copy the path from 'runtimepath' to buf[]. */
+ copy_option_part(&rtp, buf, MAXPATHL, ",");
+! if (name == NULL)
+! {
+! (*callback)(buf, (void *) &cookie);
+! if (!did_one)
+! did_one = (cookie == NULL);
+! }
+! else if (STRLEN(buf) + STRLEN(name) + 2 < MAXPATHL)
+ {
+ add_pathsep(buf);
+ tail = buf + STRLEN(buf);
+***************
+*** 2821,2827 ****
+ }
+ vim_free(buf);
+ vim_free(rtp_copy);
+! if (p_verbose > 0 && !did_one)
+ {
+ verbose_enter();
+ smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name);
+--- 2831,2837 ----
+ }
+ vim_free(buf);
+ vim_free(rtp_copy);
+! if (p_verbose > 0 && !did_one && name != NULL)
+ {
+ verbose_enter();
+ smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name);
+*** ../vim-7.3.1162/src/if_py_both.h 2013-06-10 20:47:33.000000000 +0200
+--- src/if_py_both.h 2013-06-10 20:55:17.000000000 +0200
+***************
+*** 24,29 ****
+--- 24,31 ----
+ #endif
+ #define DOPY_FUNC "_vim_pydo"
+
++ static const char *vim_special_path = "_vim_path_";
++
+ #define PyErr_SetVim(str) PyErr_SetString(VimError, str)
+
+ #define RAISE_NO_EMPTY_KEYS PyErr_SetString(PyExc_ValueError, \
+***************
+*** 55,60 ****
+--- 57,64 ----
+ static PyObject *py_chdir;
+ static PyObject *py_fchdir;
+ static PyObject *py_getcwd;
++ static PyObject *vim_module;
++ static PyObject *vim_special_path_object;
+
+ /*
+ * obtain a lock on the Vim data structures
+***************
+*** 779,797 ****
+ return _VimChdir(py_fchdir, args, kwargs);
+ }
+
+ /*
+ * Vim module - Definitions
+ */
+
+ static struct PyMethodDef VimMethods[] = {
+! /* name, function, calling, documentation */
+! {"command", VimCommand, METH_VARARGS, "Execute a Vim ex-mode command" },
+! {"eval", VimEval, METH_VARARGS, "Evaluate an expression using Vim evaluator" },
+! {"bindeval", VimEvalPy, METH_VARARGS, "Like eval(), but returns objects attached to vim ones"},
+! {"strwidth", VimStrwidth, METH_VARARGS, "Screen string width, counts <Tab> as having width 1"},
+! {"chdir", (PyCFunction)VimChdir, METH_VARARGS|METH_KEYWORDS, "Change directory"},
+! {"fchdir", (PyCFunction)VimFchdir, METH_VARARGS|METH_KEYWORDS, "Change directory"},
+! { NULL, NULL, 0, NULL }
+ };
+
+ /*
+--- 783,950 ----
+ return _VimChdir(py_fchdir, args, kwargs);
+ }
+
++ typedef struct {
++ PyObject *callable;
++ PyObject *result;
++ } map_rtp_data;
++
++ static void
++ map_rtp_callback(char_u *path, void *_data)
++ {
++ void **data = (void **) _data;
++ PyObject *pathObject;
++ map_rtp_data *mr_data = *((map_rtp_data **) data);
++
++ if (!(pathObject = PyString_FromString((char *) path)))
++ {
++ *data = NULL;
++ return;
++ }
++
++ mr_data->result = PyObject_CallFunctionObjArgs(mr_data->callable,
++ pathObject, NULL);
++
++ Py_DECREF(pathObject);
++
++ if (!mr_data->result || mr_data->result != Py_None)
++ *data = NULL;
++ else
++ {
++ Py_DECREF(mr_data->result);
++ mr_data->result = NULL;
++ }
++ }
++
++ static PyObject *
++ VimForeachRTP(PyObject *self UNUSED, PyObject *args)
++ {
++ map_rtp_data data;
++
++ if (!PyArg_ParseTuple(args, "O", &data.callable))
++ return NULL;
++
++ data.result = NULL;
++
++ do_in_runtimepath(NULL, FALSE, &map_rtp_callback, &data);
++
++ if (data.result == NULL)
++ {
++ if (PyErr_Occurred())
++ return NULL;
++ else
++ {
++ Py_INCREF(Py_None);
++ return Py_None;
++ }
++ }
++ return data.result;
++ }
++
++ /*
++ * _vim_runtimepath_ special path implementation.
++ */
++
++ static void
++ map_finder_callback(char_u *path, void *_data)
++ {
++ void **data = (void **) _data;
++ PyObject *list = *((PyObject **) data);
++ PyObject *pathObject1, *pathObject2;
++ char *pathbuf;
++ size_t pathlen;
++
++ pathlen = STRLEN(path);
++
++ #if PY_MAJOR_VERSION < 3
++ # define PY_MAIN_DIR_STRING "python2"
++ #else
++ # define PY_MAIN_DIR_STRING "python3"
++ #endif
++ #define PY_ALTERNATE_DIR_STRING "pythonx"
++
++ #define PYTHONX_STRING_LENGTH 7 /* STRLEN("pythonx") */
++ if (!(pathbuf = PyMem_New(char,
++ pathlen + STRLEN(PATHSEPSTR) + PYTHONX_STRING_LENGTH + 1)))
++ {
++ PyErr_NoMemory();
++ *data = NULL;
++ return;
++ }
++
++ mch_memmove(pathbuf, path, pathlen + 1);
++ add_pathsep((char_u *) pathbuf);
++
++ pathlen = STRLEN(pathbuf);
++ mch_memmove(pathbuf + pathlen, PY_MAIN_DIR_STRING,
++ PYTHONX_STRING_LENGTH + 1);
++
++ if (!(pathObject1 = PyString_FromString(pathbuf)))
++ {
++ *data = NULL;
++ PyMem_Free(pathbuf);
++ return;
++ }
++
++ mch_memmove(pathbuf + pathlen, PY_ALTERNATE_DIR_STRING,
++ PYTHONX_STRING_LENGTH + 1);
++
++ if (!(pathObject2 = PyString_FromString(pathbuf)))
++ {
++ Py_DECREF(pathObject1);
++ PyMem_Free(pathbuf);
++ *data = NULL;
++ return;
++ }
++
++ PyMem_Free(pathbuf);
++
++ if (PyList_Append(list, pathObject1)
++ || PyList_Append(list, pathObject2))
++ *data = NULL;
++
++ Py_DECREF(pathObject1);
++ Py_DECREF(pathObject2);
++ }
++
++ static PyObject *
++ Vim_GetPaths(PyObject *self UNUSED)
++ {
++ PyObject *r;
++
++ if (!(r = PyList_New(0)))
++ return NULL;
++
++ do_in_runtimepath(NULL, FALSE, &map_finder_callback, r);
++
++ if (PyErr_Occurred())
++ {
++ Py_DECREF(r);
++ return NULL;
++ }
++
++ return r;
++ }
++
+ /*
+ * Vim module - Definitions
+ */
+
+ static struct PyMethodDef VimMethods[] = {
+! /* name, function, calling, documentation */
+! {"command", VimCommand, METH_VARARGS, "Execute a Vim ex-mode command" },
+! {"eval", VimEval, METH_VARARGS, "Evaluate an expression using Vim evaluator" },
+! {"bindeval", VimEvalPy, METH_VARARGS, "Like eval(), but returns objects attached to vim ones"},
+! {"strwidth", VimStrwidth, METH_VARARGS, "Screen string width, counts <Tab> as having width 1"},
+! {"chdir", (PyCFunction)VimChdir, METH_VARARGS|METH_KEYWORDS, "Change directory"},
+! {"fchdir", (PyCFunction)VimFchdir, METH_VARARGS|METH_KEYWORDS, "Change directory"},
+! {"foreach_rtp", VimForeachRTP, METH_VARARGS, "Call given callable for each path in &rtp"},
+! #if PY_MAJOR_VERSION < 3
+! {"find_module", FinderFindModule, METH_VARARGS, "Internal use only, returns loader object for any input it receives"},
+! {"load_module", LoaderLoadModule, METH_VARARGS, "Internal use only, tries importing the given module from &rtp by temporary mocking sys.path (to an rtp-based one) and unsetting sys.meta_path and sys.path_hooks"},
+! #endif
+! {"path_hook", VimPathHook, METH_VARARGS, "Hook function to install in sys.path_hooks"},
+! {"_get_paths", (PyCFunction)Vim_GetPaths, METH_NOARGS, "Get &rtp-based additions to sys.path"},
+! { NULL, NULL, 0, NULL}
+ };
+
+ /*
+***************
+*** 5036,5041 ****
+--- 5189,5202 ----
+ } CurrentObject;
+ static PyTypeObject CurrentType;
+
++ #if PY_MAJOR_VERSION >= 3
++ typedef struct
++ {
++ PyObject_HEAD
++ } FinderObject;
++ static PyTypeObject FinderType;
++ #endif
++
+ static void
+ init_structs(void)
+ {
+***************
+*** 5281,5286 ****
+--- 5442,5522 ----
+ PYTYPE_READY(FunctionType);
+ PYTYPE_READY(OptionsType);
+ PYTYPE_READY(OutputType);
++ #if PY_MAJOR_VERSION >= 3
++ PYTYPE_READY(FinderType);
++ #endif
++ return 0;
++ }
++
++ static int
++ init_sys_path()
++ {
++ PyObject *path;
++ PyObject *path_hook;
++ PyObject *path_hooks;
++
++ if (!(path_hook = PyObject_GetAttrString(vim_module, "path_hook")))
++ return -1;
++
++ if (!(path_hooks = PySys_GetObject("path_hooks")))
++ {
++ PyErr_Clear();
++ path_hooks = PyList_New(1);
++ PyList_SET_ITEM(path_hooks, 0, path_hook);
++ if (PySys_SetObject("path_hooks", path_hooks))
++ {
++ Py_DECREF(path_hooks);
++ return -1;
++ }
++ Py_DECREF(path_hooks);
++ }
++ else if (PyList_Check(path_hooks))
++ {
++ if (PyList_Append(path_hooks, path_hook))
++ {
++ Py_DECREF(path_hook);
++ return -1;
++ }
++ Py_DECREF(path_hook);
++ }
++ else
++ {
++ VimTryStart();
++ EMSG(_("Failed to set path hook: sys.path_hooks is not a list\n"
++ "You should now do the following:\n"
++ "- append vim.path_hook to sys.path_hooks\n"
++ "- append vim.VIM_SPECIAL_PATH to sys.path\n"));
++ VimTryEnd(); /* Discard the error */
++ Py_DECREF(path_hook);
++ return 0;
++ }
++
++ if (!(path = PySys_GetObject("path")))
++ {
++ PyErr_Clear();
++ path = PyList_New(1);
++ Py_INCREF(vim_special_path_object);
++ PyList_SET_ITEM(path, 0, vim_special_path_object);
++ if (PySys_SetObject("path", path))
++ {
++ Py_DECREF(path);
++ return -1;
++ }
++ Py_DECREF(path);
++ }
++ else if (PyList_Check(path))
++ {
++ if (PyList_Append(path, vim_special_path_object))
++ return -1;
++ }
++ else
++ {
++ VimTryStart();
++ EMSG(_("Failed to set path: sys.path is not a list\n"
++ "You should now append vim.VIM_SPECIAL_PATH to sys.path"));
++ VimTryEnd(); /* Discard the error */
++ }
++
+ return 0;
+ }
+
+***************
+*** 5332,5337 ****
+--- 5568,5576 ----
+ {"List", (PyObject *)&ListType},
+ {"Function", (PyObject *)&FunctionType},
+ {"Options", (PyObject *)&OptionsType},
++ #if PY_MAJOR_VERSION >= 3
++ {"Finder", (PyObject *)&FinderType},
++ #endif
+ };
+
+ typedef int (*object_adder)(PyObject *, const char *, PyObject *);
+***************
+*** 5417,5421 ****
+--- 5656,5672 ----
+ else
+ PyErr_Clear();
+
++ if (!(vim_special_path_object = PyString_FromString(vim_special_path)))
++ return -1;
++
++ ADD_OBJECT(m, "VIM_SPECIAL_PATH", vim_special_path_object);
++
++ #if PY_MAJOR_VERSION >= 3
++ ADD_OBJECT(m, "_PathFinder", path_finder);
++ ADD_CHECKED_OBJECT(m, "_find_module",
++ (py_find_module = PyObject_GetAttrString(path_finder,
++ "find_module")));
++ #endif
++
+ return 0;
+ }
+*** ../vim-7.3.1162/src/if_python.c 2013-06-10 20:47:33.000000000 +0200
+--- src/if_python.c 2013-06-10 20:55:04.000000000 +0200
+***************
+*** 24,32 ****
+ /* uncomment this if used with the debug version of python.
+ * Checked on 2.7.4. */
+ /* #define Py_DEBUG */
+! /* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting
+ */
+! /* uncomment this if used with the debug version of python, but without its
+ * allocator */
+ /* #define Py_DEBUG_NO_PYMALLOC */
+
+--- 24,32 ----
+ /* uncomment this if used with the debug version of python.
+ * Checked on 2.7.4. */
+ /* #define Py_DEBUG */
+! /* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting
+ */
+! /* uncomment this if used with the debug version of python, but without its
+ * allocator */
+ /* #define Py_DEBUG_NO_PYMALLOC */
+
+***************
+*** 168,173 ****
+--- 168,174 ----
+ # define PyErr_SetNone dll_PyErr_SetNone
+ # define PyErr_SetString dll_PyErr_SetString
+ # define PyErr_SetObject dll_PyErr_SetObject
++ # define PyErr_ExceptionMatches dll_PyErr_ExceptionMatches
+ # define PyEval_InitThreads dll_PyEval_InitThreads
+ # define PyEval_RestoreThread dll_PyEval_RestoreThread
+ # define PyEval_SaveThread dll_PyEval_SaveThread
+***************
+*** 184,189 ****
+--- 185,191 ----
+ # define PyLong_Type (*dll_PyLong_Type)
+ # define PyList_GetItem dll_PyList_GetItem
+ # define PyList_Append dll_PyList_Append
++ # define PyList_Insert dll_PyList_Insert
+ # define PyList_New dll_PyList_New
+ # define PyList_SetItem dll_PyList_SetItem
+ # define PyList_Size dll_PyList_Size
+***************
+*** 233,238 ****
+--- 235,241 ----
+ # define PyFloat_Type (*dll_PyFloat_Type)
+ # define PyImport_AddModule (*dll_PyImport_AddModule)
+ # define PySys_SetObject dll_PySys_SetObject
++ # define PySys_GetObject dll_PySys_GetObject
+ # define PySys_SetArgv dll_PySys_SetArgv
+ # define PyType_Type (*dll_PyType_Type)
+ # define PyType_Ready (*dll_PyType_Ready)
+***************
+*** 305,310 ****
+--- 308,314 ----
+ static void(*dll_PyErr_SetNone)(PyObject *);
+ static void(*dll_PyErr_SetString)(PyObject *, const char *);
+ static void(*dll_PyErr_SetObject)(PyObject *, PyObject *);
++ static int(*dll_PyErr_ExceptionMatches)(PyObject *);
+ static void(*dll_PyEval_InitThreads)(void);
+ static void(*dll_PyEval_RestoreThread)(PyThreadState *);
+ static PyThreadState*(*dll_PyEval_SaveThread)(void);
+***************
+*** 320,326 ****
+ static PyTypeObject* dll_PyInt_Type;
+ static PyTypeObject* dll_PyLong_Type;
+ static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
+! static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *);
+ static PyObject*(*dll_PyList_New)(PyInt size);
+ static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
+ static PyInt(*dll_PyList_Size)(PyObject *);
+--- 324,331 ----
+ static PyTypeObject* dll_PyInt_Type;
+ static PyTypeObject* dll_PyLong_Type;
+ static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
+! static int(*dll_PyList_Append)(PyObject *, PyObject *);
+! static int(*dll_PyList_Insert)(PyObject *, int, PyObject *);
+ static PyObject*(*dll_PyList_New)(PyInt size);
+ static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
+ static PyInt(*dll_PyList_Size)(PyObject *);
+***************
+*** 366,371 ****
+--- 371,377 ----
+ static PyObject*(*dll_PyFloat_FromDouble)(double);
+ static PyTypeObject* dll_PyFloat_Type;
+ static int(*dll_PySys_SetObject)(char *, PyObject *);
++ static PyObject *(*dll_PySys_GetObject)(char *);
+ static int(*dll_PySys_SetArgv)(int, char **);
+ static PyTypeObject* dll_PyType_Type;
+ static int (*dll_PyType_Ready)(PyTypeObject *type);
+***************
+*** 431,436 ****
+--- 437,443 ----
+ static PyObject *imp_PyExc_TypeError;
+ static PyObject *imp_PyExc_ValueError;
+ static PyObject *imp_PyExc_RuntimeError;
++ static PyObject *imp_PyExc_ImportError;
+
+ # define PyExc_AttributeError imp_PyExc_AttributeError
+ # define PyExc_IndexError imp_PyExc_IndexError
+***************
+*** 439,444 ****
+--- 446,452 ----
+ # define PyExc_TypeError imp_PyExc_TypeError
+ # define PyExc_ValueError imp_PyExc_ValueError
+ # define PyExc_RuntimeError imp_PyExc_RuntimeError
++ # define PyExc_ImportError imp_PyExc_ImportError
+
+ /*
+ * Table of name to function pointer of python.
+***************
+*** 471,476 ****
+--- 479,485 ----
+ {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone},
+ {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString},
+ {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject},
++ {"PyErr_ExceptionMatches", (PYTHON_PROC*)&dll_PyErr_ExceptionMatches},
+ {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads},
+ {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread},
+ {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread},
+***************
+*** 487,492 ****
+--- 496,502 ----
+ {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
+ {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
+ {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append},
++ {"PyList_Insert", (PYTHON_PROC*)&dll_PyList_Insert},
+ {"PyList_New", (PYTHON_PROC*)&dll_PyList_New},
+ {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem},
+ {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size},
+***************
+*** 532,537 ****
+--- 542,548 ----
+ {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble},
+ {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule},
+ {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject},
++ {"PySys_GetObject", (PYTHON_PROC*)&dll_PySys_GetObject},
+ {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
+ {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
+ {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
+***************
+*** 706,711 ****
+--- 717,723 ----
+ imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
+ imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
+ imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
++ imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError");
+ Py_XINCREF(imp_PyExc_AttributeError);
+ Py_XINCREF(imp_PyExc_IndexError);
+ Py_XINCREF(imp_PyExc_KeyError);
+***************
+*** 713,718 ****
+--- 725,731 ----
+ Py_XINCREF(imp_PyExc_TypeError);
+ Py_XINCREF(imp_PyExc_ValueError);
+ Py_XINCREF(imp_PyExc_RuntimeError);
++ Py_XINCREF(imp_PyExc_ImportError);
+ Py_XDECREF(exmod);
+ }
+ #endif /* DYNAMIC_PYTHON */
+***************
+*** 735,740 ****
+--- 748,757 ----
+ static PyObject *ListGetattr(PyObject *, char *);
+ static PyObject *FunctionGetattr(PyObject *, char *);
+
++ static PyObject *LoaderLoadModule(PyObject *, PyObject *);
++ static PyObject *FinderFindModule(PyObject *, PyObject *);
++ static PyObject *VimPathHook(PyObject *, PyObject *);
++
+ #ifndef Py_VISIT
+ # define Py_VISIT(obj) visit(obj, arg)
+ #endif
+***************
+*** 1359,1369 ****
+ }
+ #endif
+
+ static int
+ PythonMod_Init(void)
+ {
+- PyObject *mod;
+-
+ /* The special value is removed from sys.path in Python_Init(). */
+ static char *(argv[2]) = {"/must>not&exist/foo", NULL};
+
+--- 1376,1487 ----
+ }
+ #endif
+
++ static PyObject *
++ LoaderLoadModule(PyObject *self, PyObject *args)
++ {
++ char *fullname;
++ PyObject *path;
++ PyObject *meta_path;
++ PyObject *path_hooks;
++ PyObject *new_path;
++ PyObject *r;
++ PyObject *new_list;
++
++ if (!PyArg_ParseTuple(args, "s", &fullname))
++ return NULL;
++
++ if (!(new_path = Vim_GetPaths(self)))
++ return NULL;
++
++ if (!(new_list = PyList_New(0)))
++ return NULL;
++
++ #define GET_SYS_OBJECT(objstr, obj) \
++ obj = PySys_GetObject(objstr); \
++ PyErr_Clear(); \
++ Py_XINCREF(obj);
++
++ GET_SYS_OBJECT("meta_path", meta_path);
++ if (PySys_SetObject("meta_path", new_list))
++ {
++ Py_XDECREF(meta_path);
++ Py_DECREF(new_list);
++ return NULL;
++ }
++ Py_DECREF(new_list); /* Now it becomes a reference borrowed from
++ sys.meta_path */
++
++ #define RESTORE_SYS_OBJECT(objstr, obj) \
++ if (obj) \
++ { \
++ PySys_SetObject(objstr, obj); \
++ Py_DECREF(obj); \
++ }
++
++ GET_SYS_OBJECT("path_hooks", path_hooks);
++ if (PySys_SetObject("path_hooks", new_list))
++ {
++ RESTORE_SYS_OBJECT("meta_path", meta_path);
++ Py_XDECREF(path_hooks);
++ return NULL;
++ }
++
++ GET_SYS_OBJECT("path", path);
++ if (PySys_SetObject("path", new_path))
++ {
++ RESTORE_SYS_OBJECT("meta_path", meta_path);
++ RESTORE_SYS_OBJECT("path_hooks", path_hooks);
++ Py_XDECREF(path);
++ return NULL;
++ }
++ Py_DECREF(new_path);
++
++ r = PyImport_ImportModule(fullname);
++
++ RESTORE_SYS_OBJECT("meta_path", meta_path);
++ RESTORE_SYS_OBJECT("path_hooks", path_hooks);
++ RESTORE_SYS_OBJECT("path", path);
++
++ if (PyErr_Occurred())
++ {
++ Py_XDECREF(r);
++ return NULL;
++ }
++
++ return r;
++ }
++
++ static PyObject *
++ FinderFindModule(PyObject *self UNUSED, PyObject *args UNUSED)
++ {
++ /*
++ * Don't bother actually finding the module, it is delegated to the "loader"
++ * object (which is basically the same object: vim module).
++ */
++ Py_INCREF(vim_module);
++ return vim_module;
++ }
++
++ static PyObject *
++ VimPathHook(PyObject *self UNUSED, PyObject *args)
++ {
++ char *path;
++
++ if (PyArg_ParseTuple(args, "s", &path)
++ && STRCMP(path, vim_special_path) == 0)
++ {
++ Py_INCREF(vim_module);
++ return vim_module;
++ }
++
++ PyErr_Clear();
++ PyErr_SetNone(PyExc_ImportError);
++ return NULL;
++ }
++
+ static int
+ PythonMod_Init(void)
+ {
+ /* The special value is removed from sys.path in Python_Init(). */
+ static char *(argv[2]) = {"/must>not&exist/foo", NULL};
+
+***************
+*** 1373,1382 ****
+ /* Set sys.argv[] to avoid a crash in warn(). */
+ PySys_SetArgv(1, argv);
+
+! mod = Py_InitModule4("vim", VimMethods, (char *)NULL, (PyObject *)NULL,
+! PYTHON_API_VERSION);
+
+! return populate_module(mod, PyModule_AddObject, PyObject_GetAttrString);
+ }
+
+ /*************************************************************************
+--- 1491,1507 ----
+ /* Set sys.argv[] to avoid a crash in warn(). */
+ PySys_SetArgv(1, argv);
+
+! vim_module = Py_InitModule4("vim", VimMethods, (char *)NULL,
+! (PyObject *)NULL, PYTHON_API_VERSION);
+!
+! if (populate_module(vim_module, PyModule_AddObject,
+! PyObject_GetAttrString))
+! return -1;
+!
+! if (init_sys_path())
+! return -1;
+
+! return 0;
+ }
+
+ /*************************************************************************
+*** ../vim-7.3.1162/src/if_python3.c 2013-06-10 18:36:20.000000000 +0200
+--- src/if_python3.c 2013-06-10 20:55:44.000000000 +0200
+***************
+*** 134,139 ****
+--- 134,140 ----
+ # define PyErr_SetNone py3_PyErr_SetNone
+ # define PyErr_SetString py3_PyErr_SetString
+ # define PyErr_SetObject py3_PyErr_SetObject
++ # define PyErr_ExceptionMatches py3_PyErr_ExceptionMatches
+ # define PyEval_InitThreads py3_PyEval_InitThreads
+ # define PyEval_RestoreThread py3_PyEval_RestoreThread
+ # define PyEval_SaveThread py3_PyEval_SaveThread
+***************
+*** 143,148 ****
+--- 144,150 ----
+ # define PyLong_FromLong py3_PyLong_FromLong
+ # define PyList_GetItem py3_PyList_GetItem
+ # define PyList_Append py3_PyList_Append
++ # define PyList_Insert py3_PyList_Insert
+ # define PyList_New py3_PyList_New
+ # define PyList_SetItem py3_PyList_SetItem
+ # define PyList_Size py3_PyList_Size
+***************
+*** 177,182 ****
+--- 179,185 ----
+ # define PyEval_GetLocals py3_PyEval_GetLocals
+ # define PyEval_GetGlobals py3_PyEval_GetGlobals
+ # define PySys_SetObject py3_PySys_SetObject
++ # define PySys_GetObject py3_PySys_GetObject
+ # define PySys_SetArgv py3_PySys_SetArgv
+ # define PyType_Ready py3_PyType_Ready
+ #undef Py_BuildValue
+***************
+*** 268,274 ****
+ static PyGILState_STATE (*py3_PyGILState_Ensure)(void);
+ static void (*py3_PyGILState_Release)(PyGILState_STATE);
+ static int (*py3_PySys_SetObject)(char *, PyObject *);
+! static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+ static Py_ssize_t (*py3_PyList_Size)(PyObject *);
+ static int (*py3_PySequence_Check)(PyObject *);
+ static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
+--- 271,279 ----
+ static PyGILState_STATE (*py3_PyGILState_Ensure)(void);
+ static void (*py3_PyGILState_Release)(PyGILState_STATE);
+ static int (*py3_PySys_SetObject)(char *, PyObject *);
+! static PyObject* (*py3_PySys_GetObject)(char *);
+! static int (*py3_PyList_Append)(PyObject *, PyObject *);
+! static int (*py3_PyList_Insert)(PyObject *, int, PyObject *);
+ static Py_ssize_t (*py3_PyList_Size)(PyObject *);
+ static int (*py3_PySequence_Check)(PyObject *);
+ static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
+***************
+*** 284,289 ****
+--- 289,295 ----
+ static void (*py3_Py_Finalize)(void);
+ static void (*py3_PyErr_SetString)(PyObject *, const char *);
+ static void (*py3_PyErr_SetObject)(PyObject *, PyObject *);
++ static int (*py3_PyErr_ExceptionMatches)(PyObject *);
+ static int (*py3_PyRun_SimpleString)(char *);
+ static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
+ static PyObject* (*py3_PyObject_GetAttrString)(PyObject *, const char *);
+***************
+*** 393,398 ****
+--- 399,405 ----
+ static PyObject *p3imp_PyExc_TypeError;
+ static PyObject *p3imp_PyExc_ValueError;
+ static PyObject *p3imp_PyExc_RuntimeError;
++ static PyObject *p3imp_PyExc_ImportError;
+
+ # define PyExc_AttributeError p3imp_PyExc_AttributeError
+ # define PyExc_IndexError p3imp_PyExc_IndexError
+***************
+*** 401,406 ****
+--- 408,414 ----
+ # define PyExc_TypeError p3imp_PyExc_TypeError
+ # define PyExc_ValueError p3imp_PyExc_ValueError
+ # define PyExc_RuntimeError p3imp_PyExc_RuntimeError
++ # define PyExc_ImportError p3imp_PyExc_ImportError
+
+ /*
+ * Table of name to function pointer of python.
+***************
+*** 428,434 ****
+--- 436,444 ----
+ {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
+ {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
+ {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject},
++ {"PySys_GetObject", (PYTHON_PROC*)&py3_PySys_GetObject},
+ {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append},
++ {"PyList_Insert", (PYTHON_PROC*)&py3_PyList_Insert},
+ {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size},
+ {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check},
+ {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size},
+***************
+*** 441,446 ****
+--- 451,457 ----
+ {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
+ {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
+ {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject},
++ {"PyErr_ExceptionMatches", (PYTHON_PROC*)&py3_PyErr_ExceptionMatches},
+ {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
+ {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
+ {"PyObject_GetAttrString", (PYTHON_PROC*)&py3_PyObject_GetAttrString},
+***************
+*** 664,669 ****
+--- 675,681 ----
+ p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
+ p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
+ p3imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
++ p3imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError");
+ Py_XINCREF(p3imp_PyExc_AttributeError);
+ Py_XINCREF(p3imp_PyExc_IndexError);
+ Py_XINCREF(p3imp_PyExc_KeyError);
+***************
+*** 671,676 ****
+--- 683,689 ----
+ Py_XINCREF(p3imp_PyExc_TypeError);
+ Py_XINCREF(p3imp_PyExc_ValueError);
+ Py_XINCREF(p3imp_PyExc_RuntimeError);
++ Py_XINCREF(p3imp_PyExc_ImportError);
+ Py_XDECREF(exmod);
+ }
+ #endif /* DYNAMIC_PYTHON3 */
+***************
+*** 723,730 ****
+--- 736,748 ----
+ static int ListSetattro(PyObject *, PyObject *, PyObject *);
+ static PyObject *FunctionGetattro(PyObject *, PyObject *);
+
++ static PyObject *VimPathHook(PyObject *, PyObject *);
++
+ static struct PyModuleDef vimmodule;
+
++ static PyObject *path_finder;
++ static PyObject *py_find_module = NULL;
++
+ #define PY_CAN_RECURSE
+
+ /*
+***************
+*** 1585,1596 ****
+ #endif
+
+ static PyObject *
+! Py3Init_vim(void)
+ {
+! PyObject *mod;
+
+ /* The special value is removed from sys.path in Python3_Init(). */
+ static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL};
+
+ if (init_types())
+ return NULL;
+--- 1603,1672 ----
+ #endif
+
+ static PyObject *
+! VimPathHook(PyObject *self UNUSED, PyObject *args)
+ {
+! char *path;
+!
+! if (PyArg_ParseTuple(args, "s", &path)
+! && STRCMP(path, vim_special_path) == 0)
+! {
+! Py_INCREF(&FinderType);
+! return (PyObject *) &FinderType;
+! }
+!
+! PyErr_Clear();
+! PyErr_SetNone(PyExc_ImportError);
+! return NULL;
+! }
+!
+! static PyObject *
+! FinderFindModule(PyObject *cls UNUSED, PyObject *fullname)
+! {
+! PyObject *new_path;
+! PyObject *r;
+!
+! if (!(new_path = Vim_GetPaths(NULL)))
+! return NULL;
+!
+! /* call find_module of the super() class */
+! r = PyObject_CallFunctionObjArgs(py_find_module, fullname, new_path, NULL);
+!
+! Py_DECREF(new_path);
+!
+! return r;
+! }
+
++ static struct PyMethodDef FinderMethods[] = {
++ {"find_module", FinderFindModule, METH_CLASS|METH_O, ""},
++ {NULL, NULL, 0, NULL}
++ };
++
++ static PyObject *
++ Py3Init_vim(void)
++ {
+ /* The special value is removed from sys.path in Python3_Init(). */
+ static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL};
++ PyObject *importlib_machinery;
++
++ if (!(importlib_machinery = PyImport_ImportModule("importlib.machinery")))
++ return NULL;
++
++ if (!(path_finder = PyObject_GetAttrString(importlib_machinery,
++ "PathFinder")))
++ {
++ Py_DECREF(importlib_machinery);
++ return NULL;
++ }
++
++ Py_DECREF(importlib_machinery);
++
++ vim_memset(&FinderType, 0, sizeof(FinderObject));
++ FinderType.tp_name = "vim.Finder";
++ FinderType.tp_basicsize = sizeof(FinderObject);
++ FinderType.tp_base = (PyTypeObject *) path_finder;
++ FinderType.tp_flags = Py_TPFLAGS_DEFAULT;
++ FinderType.tp_doc = "Vim finder class, for use with path hook";
++ FinderType.tp_methods = FinderMethods;
+
+ if (init_types())
+ return NULL;
+***************
+*** 1598,1611 ****
+ /* Set sys.argv[] to avoid a crash in warn(). */
+ PySys_SetArgv(1, argv);
+
+! mod = PyModule_Create(&vimmodule);
+! if (mod == NULL)
+ return NULL;
+
+! if (populate_module(mod, PyModule_AddObject, PyObject_GetAttrString))
+ return NULL;
+
+! return mod;
+ }
+
+ /*************************************************************************
+--- 1674,1689 ----
+ /* Set sys.argv[] to avoid a crash in warn(). */
+ PySys_SetArgv(1, argv);
+
+! if ((vim_module = PyModule_Create(&vimmodule)) == NULL)
+! return NULL;
+!
+! if (populate_module(vim_module, PyModule_AddObject, PyObject_GetAttrString))
+ return NULL;
+
+! if (init_sys_path())
+ return NULL;
+
+! return vim_module;
+ }
+
+ /*************************************************************************
+*** ../vim-7.3.1162/src/testdir/test86.in 2013-06-02 18:54:16.000000000 +0200
+--- src/testdir/test86.in 2013-06-10 21:05:44.000000000 +0200
+***************
+*** 1069,1074 ****
+--- 1069,1082 ----
+ ee('vim.current.xxx = True')
+ EOF
+ :"
++ :" Test import TODO: BROKEN
++ :"py << EOF
++ :"vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
++ :"from module import dir as d
++ :"from modulex import ddir
++ :"cb.append(d + ',' + ddir)
++ :"EOF
++ :"
+ :" Test exceptions
+ :fun Exe(e)
+ : execute a:e
+*** ../vim-7.3.1162/src/testdir/test87.in 2013-06-02 18:54:16.000000000 +0200
+--- src/testdir/test87.in 2013-06-10 21:06:37.000000000 +0200
+***************
+*** 1036,1041 ****
+--- 1036,1049 ----
+ ee('vim.current.xxx = True')
+ EOF
+ :"
++ :" Test import TODO: BROKEN
++ :"py3 << EOF
++ :"vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
++ :"from module import dir as d
++ :"from modulex import ddir
++ :"cb.append(d + ',' + ddir)
++ :"EOF
++ :"
+ :" Test exceptions
+ :fun Exe(e)
+ : execute a:e
+*** ../vim-7.3.1162/src/auto/configure 2013-06-02 19:14:11.000000000 +0200
+--- src/auto/configure 2013-06-10 21:22:52.000000000 +0200
+***************
+*** 5289,5298 ****
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python_version" >&5
+ $as_echo "$vi_cv_var_python_version" >&6; }
+
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 2.2 or better" >&5
+! $as_echo_n "checking Python is 2.2 or better... " >&6; }
+ if ${vi_cv_path_python} -c \
+! "import sys; sys.exit(${vi_cv_var_python_version} < 2.2)"
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yep" >&5
+ $as_echo "yep" >&6; }
+--- 5289,5298 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python_version" >&5
+ $as_echo "$vi_cv_var_python_version" >&6; }
+
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 2.3 or better" >&5
+! $as_echo_n "checking Python is 2.3 or better... " >&6; }
+ if ${vi_cv_path_python} -c \
+! "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yep" >&5
+ $as_echo "yep" >&6; }
+*** ../vim-7.3.1162/src/version.c 2013-06-10 20:47:33.000000000 +0200
+--- src/version.c 2013-06-10 20:53:23.000000000 +0200
+***************
+*** 730,731 ****
+--- 730,733 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1163,
+ /**/
+
+--
+The coffee just wasn't strong enough to defend itself -- Tom Waits
+
+ /// 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