diff options
Diffstat (limited to 'source/ap/vim/patches/7.3.220')
-rw-r--r-- | source/ap/vim/patches/7.3.220 | 1230 |
1 files changed, 0 insertions, 1230 deletions
diff --git a/source/ap/vim/patches/7.3.220 b/source/ap/vim/patches/7.3.220 deleted file mode 100644 index 0122e7fc..00000000 --- a/source/ap/vim/patches/7.3.220 +++ /dev/null @@ -1,1230 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 7.3.220 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.3.220 -Problem: Python 3: vim.error is a 'str' instead of an 'Exception' object, - so 'except' or 'raise' it causes a 'SystemError' exception. - Buffer objects do not support slice assignment. - When exchanging text between Vim and Python, multibyte texts become - gabage or cause Unicode Expceptions, etc. - 'py3file' tries to read in the file as Unicode, sometimes causes - UnicodeDecodeException -Solution: Fix the problems. (lilydjwg) -Files: src/if_py_both.h, src/if_python.c, src/if_python3.c - - -*** ../mercurial/vim73/src/if_py_both.h 2011-03-22 15:47:18.000000000 +0100 ---- src/if_py_both.h 2011-06-18 23:54:25.000000000 +0200 -*************** -*** 65,74 **** - OutputWrite(PyObject *self, PyObject *args) - { - int len; -! char *str; - int error = ((OutputObject *)(self))->error; - -! if (!PyArg_ParseTuple(args, "s#", &str, &len)) - return NULL; - - Py_BEGIN_ALLOW_THREADS ---- 65,74 ---- - OutputWrite(PyObject *self, PyObject *args) - { - int len; -! char *str = NULL; - int error = ((OutputObject *)(self))->error; - -! if (!PyArg_ParseTuple(args, "es#", p_enc, &str, &len)) - return NULL; - - Py_BEGIN_ALLOW_THREADS -*************** -*** 76,81 **** ---- 76,82 ---- - writer((writefn)(error ? emsg : msg), (char_u *)str, len); - Python_Release_Vim(); - Py_END_ALLOW_THREADS -+ PyMem_Free(str); - - Py_INCREF(Py_None); - return Py_None; -*************** -*** 104,113 **** - for (i = 0; i < n; ++i) - { - PyObject *line = PyList_GetItem(list, i); -! char *str; - PyInt len; - -! if (!PyArg_Parse(line, "s#", &str, &len)) { - PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings")); - Py_DECREF(list); - return NULL; ---- 105,114 ---- - for (i = 0; i < n; ++i) - { - PyObject *line = PyList_GetItem(list, i); -! char *str = NULL; - PyInt len; - -! if (!PyArg_Parse(line, "es#", p_enc, &str, &len)) { - PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings")); - Py_DECREF(list); - return NULL; -*************** -*** 118,123 **** ---- 119,125 ---- - writer((writefn)(error ? emsg : msg), (char_u *)str, len); - Python_Release_Vim(); - Py_END_ALLOW_THREADS -+ PyMem_Free(str); - } - - Py_DECREF(list); -*************** -*** 681,686 **** ---- 683,689 ---- - { - const char *str; - char *save; -+ PyObject *bytes; - PyInt len; - PyInt i; - char *p; -*************** -*** 691,698 **** - return NULL; - } - -! str = PyString_AsString(obj); -! len = PyString_Size(obj); - - /* - * Error checking: String must not contain newlines, as we ---- 694,702 ---- - return NULL; - } - -! bytes = PyString_AsBytes(obj); /* for Python 2 this does nothing */ -! str = PyString_AsString(bytes); -! len = PyString_Size(bytes); - - /* - * Error checking: String must not contain newlines, as we -*************** -*** 731,736 **** ---- 735,741 ---- - } - - save[i] = '\0'; -+ PyString_FreeBytes(bytes); /* Python 2 does nothing here */ - - return save; - } -*************** -*** 817,823 **** - invalidate_botline(); - } - -! /* Replace a line in the specified buffer. The line number is - * in Vim format (1-based). The replacement line is given as - * a Python string object. The object is checked for validity - * and correct format. Errors are returned as a value of FAIL. ---- 822,829 ---- - invalidate_botline(); - } - -! /* -! * Replace a line in the specified buffer. The line number is - * in Vim format (1-based). The replacement line is given as - * a Python string object. The object is checked for validity - * and correct format. Errors are returned as a value of FAIL. -*************** -*** 908,913 **** ---- 914,1106 ---- - } - } - -+ /* Replace a range of lines in the specified buffer. The line numbers are in -+ * Vim format (1-based). The range is from lo up to, but not including, hi. -+ * The replacement lines are given as a Python list of string objects. The -+ * list is checked for validity and correct format. Errors are returned as a -+ * value of FAIL. The return value is OK on success. -+ * If OK is returned and len_change is not NULL, *len_change -+ * is set to the change in the buffer length. -+ */ -+ static int -+ SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change) -+ { -+ /* First of all, we check the thpe of the supplied Python object. -+ * There are three cases: -+ * 1. NULL, or None - this is a deletion. -+ * 2. A list - this is a replacement. -+ * 3. Anything else - this is an error. -+ */ -+ if (list == Py_None || list == NULL) -+ { -+ PyInt i; -+ PyInt n = (int)(hi - lo); -+ buf_T *savebuf = curbuf; -+ -+ PyErr_Clear(); -+ curbuf = buf; -+ -+ if (u_savedel((linenr_T)lo, (long)n) == FAIL) -+ PyErr_SetVim(_("cannot save undo information")); -+ else -+ { -+ for (i = 0; i < n; ++i) -+ { -+ if (ml_delete((linenr_T)lo, FALSE) == FAIL) -+ { -+ PyErr_SetVim(_("cannot delete line")); -+ break; -+ } -+ } -+ if (buf == curwin->w_buffer) -+ py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n); -+ deleted_lines_mark((linenr_T)lo, (long)i); -+ } -+ -+ curbuf = savebuf; -+ -+ if (PyErr_Occurred() || VimErrorCheck()) -+ return FAIL; -+ -+ if (len_change) -+ *len_change = -n; -+ -+ return OK; -+ } -+ else if (PyList_Check(list)) -+ { -+ PyInt i; -+ PyInt new_len = PyList_Size(list); -+ PyInt old_len = hi - lo; -+ PyInt extra = 0; /* lines added to text, can be negative */ -+ char **array; -+ buf_T *savebuf; -+ -+ if (new_len == 0) /* avoid allocating zero bytes */ -+ array = NULL; -+ else -+ { -+ array = (char **)alloc((unsigned)(new_len * sizeof(char *))); -+ if (array == NULL) -+ { -+ PyErr_NoMemory(); -+ return FAIL; -+ } -+ } -+ -+ for (i = 0; i < new_len; ++i) -+ { -+ PyObject *line = PyList_GetItem(list, i); -+ -+ array[i] = StringToLine(line); -+ if (array[i] == NULL) -+ { -+ while (i) -+ vim_free(array[--i]); -+ vim_free(array); -+ return FAIL; -+ } -+ } -+ -+ savebuf = curbuf; -+ -+ PyErr_Clear(); -+ curbuf = buf; -+ -+ if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL) -+ PyErr_SetVim(_("cannot save undo information")); -+ -+ /* If the size of the range is reducing (ie, new_len < old_len) we -+ * need to delete some old_len. We do this at the start, by -+ * repeatedly deleting line "lo". -+ */ -+ if (!PyErr_Occurred()) -+ { -+ for (i = 0; i < old_len - new_len; ++i) -+ if (ml_delete((linenr_T)lo, FALSE) == FAIL) -+ { -+ PyErr_SetVim(_("cannot delete line")); -+ break; -+ } -+ extra -= i; -+ } -+ -+ /* For as long as possible, replace the existing old_len with the -+ * new old_len. This is a more efficient operation, as it requires -+ * less memory allocation and freeing. -+ */ -+ if (!PyErr_Occurred()) -+ { -+ for (i = 0; i < old_len && i < new_len; ++i) -+ if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE) -+ == FAIL) -+ { -+ PyErr_SetVim(_("cannot replace line")); -+ break; -+ } -+ } -+ else -+ i = 0; -+ -+ /* Now we may need to insert the remaining new old_len. If we do, we -+ * must free the strings as we finish with them (we can't pass the -+ * responsibility to vim in this case). -+ */ -+ if (!PyErr_Occurred()) -+ { -+ while (i < new_len) -+ { -+ if (ml_append((linenr_T)(lo + i - 1), -+ (char_u *)array[i], 0, FALSE) == FAIL) -+ { -+ PyErr_SetVim(_("cannot insert line")); -+ break; -+ } -+ vim_free(array[i]); -+ ++i; -+ ++extra; -+ } -+ } -+ -+ /* Free any left-over old_len, as a result of an error */ -+ while (i < new_len) -+ { -+ vim_free(array[i]); -+ ++i; -+ } -+ -+ /* Free the array of old_len. All of its contents have now -+ * been dealt with (either freed, or the responsibility passed -+ * to vim. -+ */ -+ vim_free(array); -+ -+ /* Adjust marks. Invalidate any which lie in the -+ * changed range, and move any in the remainder of the buffer. -+ */ -+ mark_adjust((linenr_T)lo, (linenr_T)(hi - 1), -+ (long)MAXLNUM, (long)extra); -+ changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra); -+ -+ if (buf == curwin->w_buffer) -+ py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra); -+ -+ curbuf = savebuf; -+ -+ if (PyErr_Occurred() || VimErrorCheck()) -+ return FAIL; -+ -+ if (len_change) -+ *len_change = new_len - old_len; -+ -+ return OK; -+ } -+ else -+ { -+ PyErr_BadArgument(); -+ return FAIL; -+ } -+ } - - /* Insert a number of lines into the specified buffer after the specifed line. - * The line number is in Vim format (1-based). The lines to be inserted are -*************** -*** 1108,1113 **** ---- 1301,1340 ---- - return -1; - - if (new_end) -+ *new_end = end + len_change; -+ -+ return 0; -+ } -+ -+ static PyInt -+ RBAsSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end) -+ { -+ PyInt size; -+ PyInt len_change; -+ -+ /* Self must be a valid buffer */ -+ if (CheckBuffer(self)) -+ return -1; -+ -+ /* Sort out the slice range */ -+ size = end - start + 1; -+ -+ if (lo < 0) -+ lo = 0; -+ else if (lo > size) -+ lo = size; -+ if (hi < 0) -+ hi = 0; -+ if (hi < lo) -+ hi = lo; -+ else if (hi > size) -+ hi = size; -+ -+ if (SetBufferLineList(self->buf, lo + start, hi + start, -+ val, &len_change) == FAIL) -+ return -1; -+ -+ if (new_end) - *new_end = end + len_change; - - return 0; -*** ../mercurial/vim73/src/if_python.c 2011-03-26 18:32:00.000000000 +0100 ---- src/if_python.c 2011-06-19 00:02:15.000000000 +0200 -*************** -*** 56,61 **** ---- 56,65 ---- - - static void init_structs(void); - -+ /* No-op conversion functions, use with care! */ -+ #define PyString_AsBytes(obj) (obj) -+ #define PyString_FreeBytes(obj) -+ - #if !defined(FEAT_PYTHON) && defined(PROTO) - /* Use this to be able to generate prototypes without python being used. */ - # define PyObject Py_ssize_t -*************** -*** 129,134 **** ---- 133,139 ---- - */ - # define PyArg_Parse dll_PyArg_Parse - # define PyArg_ParseTuple dll_PyArg_ParseTuple -+ # define PyMem_Free dll_PyMem_Free - # define PyDict_SetItemString dll_PyDict_SetItemString - # define PyErr_BadArgument dll_PyErr_BadArgument - # define PyErr_Clear dll_PyErr_Clear -*************** -*** 189,194 **** ---- 194,200 ---- - */ - static int(*dll_PyArg_Parse)(PyObject *, char *, ...); - static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...); -+ static int(*dll_PyMem_Free)(void *); - static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); - static int(*dll_PyErr_BadArgument)(void); - static void(*dll_PyErr_Clear)(void); -*************** -*** 271,276 **** ---- 277,283 ---- - { - {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse}, - {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple}, -+ {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free}, - {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString}, - {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument}, - {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear}, -*************** -*** 833,876 **** - static PyObject *CurrentGetattr(PyObject *, char *); - static int CurrentSetattr(PyObject *, char *, PyObject *); - -- /* Common routines for buffers and line ranges -- * ------------------------------------------- -- */ -- -- static PyInt -- RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end) -- { -- PyInt size; -- PyInt len_change; -- -- /* Self must be a valid buffer */ -- if (CheckBuffer(self)) -- return -1; -- -- /* Sort out the slice range */ -- size = end - start + 1; -- -- if (lo < 0) -- lo = 0; -- else if (lo > size) -- lo = size; -- if (hi < 0) -- hi = 0; -- if (hi < lo) -- hi = lo; -- else if (hi > size) -- hi = size; -- -- if (SetBufferLineList(self->buf, lo + start, hi + start, -- val, &len_change) == FAIL) -- return -1; -- -- if (new_end) -- *new_end = end + len_change; -- -- return 0; -- } -- - static PySequenceMethods BufferAsSeq = { - (PyInquiry) BufferLength, /* sq_length, len(x) */ - (binaryfunc) 0, /* BufferConcat, */ /* sq_concat, x+y */ ---- 840,845 ---- -*************** -*** 1038,1044 **** - static PyInt - BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) - { -! return RBAssSlice((BufferObject *)(self), lo, hi, val, 1, - (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count, - NULL); - } ---- 1007,1013 ---- - static PyInt - BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) - { -! return RBAsSlice((BufferObject *)(self), lo, hi, val, 1, - (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count, - NULL); - } -*************** -*** 1088,1094 **** - static PyInt - RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) - { -! return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val, - ((RangeObject *)(self))->start, - ((RangeObject *)(self))->end, - &((RangeObject *)(self))->end); ---- 1057,1063 ---- - static PyInt - RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) - { -! return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val, - ((RangeObject *)(self))->start, - ((RangeObject *)(self))->end, - &((RangeObject *)(self))->end); -*************** -*** 1435,1628 **** - * 4. Utility functions for handling the interface between Vim and Python. - */ - -- /* Replace a range of lines in the specified buffer. The line numbers are in -- * Vim format (1-based). The range is from lo up to, but not including, hi. -- * The replacement lines are given as a Python list of string objects. The -- * list is checked for validity and correct format. Errors are returned as a -- * value of FAIL. The return value is OK on success. -- * If OK is returned and len_change is not NULL, *len_change -- * is set to the change in the buffer length. -- */ -- static int -- SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change) -- { -- /* First of all, we check the thpe of the supplied Python object. -- * There are three cases: -- * 1. NULL, or None - this is a deletion. -- * 2. A list - this is a replacement. -- * 3. Anything else - this is an error. -- */ -- if (list == Py_None || list == NULL) -- { -- PyInt i; -- PyInt n = (int)(hi - lo); -- buf_T *savebuf = curbuf; -- -- PyErr_Clear(); -- curbuf = buf; -- -- if (u_savedel((linenr_T)lo, (long)n) == FAIL) -- PyErr_SetVim(_("cannot save undo information")); -- else -- { -- for (i = 0; i < n; ++i) -- { -- if (ml_delete((linenr_T)lo, FALSE) == FAIL) -- { -- PyErr_SetVim(_("cannot delete line")); -- break; -- } -- } -- if (buf == curwin->w_buffer) -- py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n); -- deleted_lines_mark((linenr_T)lo, (long)i); -- } -- -- curbuf = savebuf; -- -- if (PyErr_Occurred() || VimErrorCheck()) -- return FAIL; -- -- if (len_change) -- *len_change = -n; -- -- return OK; -- } -- else if (PyList_Check(list)) -- { -- PyInt i; -- PyInt new_len = PyList_Size(list); -- PyInt old_len = hi - lo; -- PyInt extra = 0; /* lines added to text, can be negative */ -- char **array; -- buf_T *savebuf; -- -- if (new_len == 0) /* avoid allocating zero bytes */ -- array = NULL; -- else -- { -- array = (char **)alloc((unsigned)(new_len * sizeof(char *))); -- if (array == NULL) -- { -- PyErr_NoMemory(); -- return FAIL; -- } -- } -- -- for (i = 0; i < new_len; ++i) -- { -- PyObject *line = PyList_GetItem(list, i); -- -- array[i] = StringToLine(line); -- if (array[i] == NULL) -- { -- while (i) -- vim_free(array[--i]); -- vim_free(array); -- return FAIL; -- } -- } -- -- savebuf = curbuf; -- -- PyErr_Clear(); -- curbuf = buf; -- -- if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL) -- PyErr_SetVim(_("cannot save undo information")); -- -- /* If the size of the range is reducing (ie, new_len < old_len) we -- * need to delete some old_len. We do this at the start, by -- * repeatedly deleting line "lo". -- */ -- if (!PyErr_Occurred()) -- { -- for (i = 0; i < old_len - new_len; ++i) -- if (ml_delete((linenr_T)lo, FALSE) == FAIL) -- { -- PyErr_SetVim(_("cannot delete line")); -- break; -- } -- extra -= i; -- } -- -- /* For as long as possible, replace the existing old_len with the -- * new old_len. This is a more efficient operation, as it requires -- * less memory allocation and freeing. -- */ -- if (!PyErr_Occurred()) -- { -- for (i = 0; i < old_len && i < new_len; ++i) -- if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE) -- == FAIL) -- { -- PyErr_SetVim(_("cannot replace line")); -- break; -- } -- } -- else -- i = 0; -- -- /* Now we may need to insert the remaining new old_len. If we do, we -- * must free the strings as we finish with them (we can't pass the -- * responsibility to vim in this case). -- */ -- if (!PyErr_Occurred()) -- { -- while (i < new_len) -- { -- if (ml_append((linenr_T)(lo + i - 1), -- (char_u *)array[i], 0, FALSE) == FAIL) -- { -- PyErr_SetVim(_("cannot insert line")); -- break; -- } -- vim_free(array[i]); -- ++i; -- ++extra; -- } -- } -- -- /* Free any left-over old_len, as a result of an error */ -- while (i < new_len) -- { -- vim_free(array[i]); -- ++i; -- } -- -- /* Free the array of old_len. All of its contents have now -- * been dealt with (either freed, or the responsibility passed -- * to vim. -- */ -- vim_free(array); -- -- /* Adjust marks. Invalidate any which lie in the -- * changed range, and move any in the remainder of the buffer. -- */ -- mark_adjust((linenr_T)lo, (linenr_T)(hi - 1), -- (long)MAXLNUM, (long)extra); -- changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra); -- -- if (buf == curwin->w_buffer) -- py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra); -- -- curbuf = savebuf; -- -- if (PyErr_Occurred() || VimErrorCheck()) -- return FAIL; -- -- if (len_change) -- *len_change = new_len - old_len; -- -- return OK; -- } -- else -- { -- PyErr_BadArgument(); -- return FAIL; -- } -- } -- - /* Convert a Vim line into a Python string. - * All internal newlines are replaced by null characters. - * ---- 1404,1409 ---- -*** ../mercurial/vim73/src/if_python3.c 2011-06-12 21:37:06.000000000 +0200 ---- src/if_python3.c 2011-06-19 00:10:42.000000000 +0200 -*************** -*** 70,77 **** - - #define PyInt Py_ssize_t - #define PyString_Check(obj) PyUnicode_Check(obj) -! #define PyString_AsString(obj) _PyUnicode_AsString(obj) -! #define PyString_Size(obj) PyUnicode_GET_SIZE(obj) - #define PyString_FromString(repr) PyUnicode_FromString(repr) - - #if defined(DYNAMIC_PYTHON3) || defined(PROTO) ---- 70,79 ---- - - #define PyInt Py_ssize_t - #define PyString_Check(obj) PyUnicode_Check(obj) -! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)p_enc, NULL); -! #define PyString_FreeBytes(obj) Py_XDECREF(bytes) -! #define PyString_AsString(obj) PyBytes_AsString(obj) -! #define PyString_Size(obj) PyBytes_GET_SIZE(bytes) - #define PyString_FromString(repr) PyUnicode_FromString(repr) - - #if defined(DYNAMIC_PYTHON3) || defined(PROTO) -*************** -*** 99,104 **** ---- 101,107 ---- - # define PyArg_Parse py3_PyArg_Parse - # undef PyArg_ParseTuple - # define PyArg_ParseTuple py3_PyArg_ParseTuple -+ # define PyMem_Free py3_PyMem_Free - # define PyDict_SetItemString py3_PyDict_SetItemString - # define PyErr_BadArgument py3_PyErr_BadArgument - # define PyErr_Clear py3_PyErr_Clear -*************** -*** 140,147 **** ---- 143,155 ---- - # define PyModule_AddObject py3_PyModule_AddObject - # define PyImport_AppendInittab py3_PyImport_AppendInittab - # define _PyUnicode_AsString py3__PyUnicode_AsString -+ # undef PyUnicode_AsEncodedString -+ # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString -+ # undef PyBytes_AsString -+ # define PyBytes_AsString py3_PyBytes_AsString - # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr - # define PySlice_Type (*py3_PySlice_Type) -+ # define PyErr_NewException py3_PyErr_NewException - # ifdef Py_DEBUG - # define _Py_NegativeRefcount py3__Py_NegativeRefcount - # define _Py_RefTotal (*py3__Py_RefTotal) -*************** -*** 157,164 **** - # define PyModule_Create2 py3_PyModule_Create2 - # undef PyUnicode_FromString - # define PyUnicode_FromString py3_PyUnicode_FromString -! # undef PyUnicode_FromStringAndSize -! # define PyUnicode_FromStringAndSize py3_PyUnicode_FromStringAndSize - - # ifdef Py_DEBUG - # undef PyObject_NEW ---- 165,172 ---- - # define PyModule_Create2 py3_PyModule_Create2 - # undef PyUnicode_FromString - # define PyUnicode_FromString py3_PyUnicode_FromString -! # undef PyUnicode_Decode -! # define PyUnicode_Decode py3_PyUnicode_Decode - - # ifdef Py_DEBUG - # undef PyObject_NEW -*************** -*** 199,205 **** - static int (*py3_PyType_Ready)(PyTypeObject *type); - static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); - static PyObject* (*py3_PyUnicode_FromString)(const char *u); -! static PyObject* (*py3_PyUnicode_FromStringAndSize)(const char *u, Py_ssize_t size); - static long (*py3_PyLong_AsLong)(PyObject *); - static void (*py3_PyErr_SetNone)(PyObject *); - static void (*py3_PyEval_InitThreads)(void); ---- 207,214 ---- - static int (*py3_PyType_Ready)(PyTypeObject *type); - static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); - static PyObject* (*py3_PyUnicode_FromString)(const char *u); -! static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size, -! const char *encoding, const char *errors); - static long (*py3_PyLong_AsLong)(PyObject *); - static void (*py3_PyErr_SetNone)(PyObject *); - static void (*py3_PyEval_InitThreads)(void); -*************** -*** 207,212 **** ---- 216,222 ---- - static PyThreadState*(*py3_PyEval_SaveThread)(void); - static int (*py3_PyArg_Parse)(PyObject *, char *, ...); - static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...); -+ static int (*py3_PyMem_Free)(void *); - static int (*py3_Py_IsInitialized)(void); - static void (*py3_PyErr_Clear)(void); - static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *); -*************** -*** 214,224 **** ---- 224,237 ---- - 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); -+ static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors); -+ static char* (*py3_PyBytes_AsString)(PyObject *bytes); - static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name); - 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_PySlice_Type; -+ static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict); - # ifdef Py_DEBUG - static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op); - static Py_ssize_t* py3__Py_RefTotal; -*************** -*** 259,264 **** ---- 272,278 ---- - {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome}, - {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize}, - {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple}, -+ {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free}, - {"PyList_New", (PYTHON_PROC*)&py3_PyList_New}, - {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure}, - {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release}, -*************** -*** 289,295 **** - {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread}, - {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread}, - {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse}, -- {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple}, - {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized}, - {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct}, - {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear}, ---- 303,308 ---- -*************** -*** 297,307 **** ---- 310,322 ---- - {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject}, - {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab}, - {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString}, -+ {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString}, - {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr}, - {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2}, - {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc}, - {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew}, - {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type}, -+ {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException}, - # ifdef Py_DEBUG - {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount}, - {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal}, -*************** -*** 337,343 **** - py3_runtime_link_init(char *libname, int verbose) - { - int i; -! void *ucs_from_string, *ucs_from_string_and_size; - - # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON) - /* Can't have Python and Python3 loaded at the same time. ---- 352,358 ---- - py3_runtime_link_init(char *libname, int verbose) - { - int i; -! void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string; - - # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON) - /* Can't have Python and Python3 loaded at the same time. -*************** -*** 377,395 **** - /* Load unicode functions separately as only the ucs2 or the ucs4 functions - * will be present in the library. */ - ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString"); -! ucs_from_string_and_size = symbol_from_dll(hinstPy3, -! "PyUnicodeUCS2_FromStringAndSize"); -! if (!ucs_from_string || !ucs_from_string_and_size) - { - ucs_from_string = symbol_from_dll(hinstPy3, - "PyUnicodeUCS4_FromString"); -! ucs_from_string_and_size = symbol_from_dll(hinstPy3, -! "PyUnicodeUCS4_FromStringAndSize"); - } -! if (ucs_from_string && ucs_from_string_and_size) - { - py3_PyUnicode_FromString = ucs_from_string; -! py3_PyUnicode_FromStringAndSize = ucs_from_string_and_size; - } - else - { ---- 392,415 ---- - /* Load unicode functions separately as only the ucs2 or the ucs4 functions - * will be present in the library. */ - ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString"); -! ucs_decode = symbol_from_dll(hinstPy3, -! "PyUnicodeUCS2_Decode"); -! ucs_as_encoded_string = symbol_from_dll(hinstPy3, -! "PyUnicodeUCS2_AsEncodedString"); -! if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string) - { - ucs_from_string = symbol_from_dll(hinstPy3, - "PyUnicodeUCS4_FromString"); -! ucs_decode = symbol_from_dll(hinstPy3, -! "PyUnicodeUCS4_Decode"); -! ucs_as_encoded_string = symbol_from_dll(hinstPy3, -! "PyUnicodeUCS4_AsEncodedString"); - } -! if (ucs_from_string && ucs_decode && ucs_as_encoded_string) - { - py3_PyUnicode_FromString = ucs_from_string; -! py3_PyUnicode_Decode = ucs_decode; -! py3_PyUnicode_AsEncodedString = ucs_as_encoded_string; - } - else - { -*************** -*** 567,574 **** - /* Remove the element from sys.path that was added because of our - * argv[0] value in Py3Init_vim(). Previously we used an empty - * string, but dependinding on the OS we then get an empty entry or -! * the current directory in sys.path. */ -! PyRun_SimpleString("import sys; sys.path = list(filter(lambda x: x != '/must>not&exist', sys.path))"); - - // lock is created and acquired in PyEval_InitThreads() and thread - // state is created in Py_Initialize() ---- 587,597 ---- - /* Remove the element from sys.path that was added because of our - * argv[0] value in Py3Init_vim(). Previously we used an empty - * string, but dependinding on the OS we then get an empty entry or -! * the current directory in sys.path. -! * Only after vim has been imported, the element does exist in -! * sys.path. -! */ -! PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))"); - - // lock is created and acquired in PyEval_InitThreads() and thread - // state is created in Py_Initialize() -*************** -*** 605,610 **** ---- 628,635 ---- - #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) - char *saved_locale; - #endif -+ PyObject *cmdstr; -+ PyObject *cmdbytes; - - #if defined(MACOS) && !defined(MACOS_X_UNIX) - GetPort(&oldPort); -*************** -*** 634,640 **** - - pygilstate = PyGILState_Ensure(); - -! PyRun_SimpleString((char *)(cmd)); - - PyGILState_Release(pygilstate); - ---- 659,671 ---- - - pygilstate = PyGILState_Ensure(); - -! /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause -! * SyntaxError (unicode error). */ -! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)p_enc, NULL); -! cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL); -! Py_XDECREF(cmdstr); -! PyRun_SimpleString(PyBytes_AsString(cmdbytes)); -! Py_XDECREF(cmdbytes); - - PyGILState_Release(pygilstate); - -*************** -*** 693,699 **** - * different options under Windows, meaning that stdio pointers aren't - * compatible between the two. Yuk. - * -! * construct: exec(compile(open('a_filename').read(), 'a_filename', 'exec')) - * - * We need to escape any backslashes or single quotes in the file name, so that - * Python won't mangle the file name. ---- 724,733 ---- - * different options under Windows, meaning that stdio pointers aren't - * compatible between the two. Yuk. - * -! * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec')) -! * -! * Using bytes so that Python can detect the source encoding as it normally -! * does. The doc does not say "compile" accept bytes, though. - * - * We need to escape any backslashes or single quotes in the file name, so that - * Python won't mangle the file name. -*************** -*** 716,723 **** - return; - if (i==0) - { -! strcpy(p,"').read(),'"); -! p += 11; - } - else - { ---- 750,757 ---- - return; - if (i==0) - { -! strcpy(p,"','rb').read(),'"); -! p += 16; - } - else - { -*************** -*** 812,819 **** - - static Py_ssize_t BufferLength(PyObject *); - static PyObject *BufferItem(PyObject *, Py_ssize_t); -- static Py_ssize_t BufferAsItem(PyObject *, Py_ssize_t, PyObject *); - static PyObject* BufferSubscript(PyObject *self, PyObject* idx); - - - /* Line range type - Implementation functions ---- 846,853 ---- - - static Py_ssize_t BufferLength(PyObject *); - static PyObject *BufferItem(PyObject *, Py_ssize_t); - static PyObject* BufferSubscript(PyObject *self, PyObject* idx); -+ static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val); - - - /* Line range type - Implementation functions -*************** -*** 835,841 **** - (ssizeargfunc) 0, /* sq_repeat, x*n */ - (ssizeargfunc) BufferItem, /* sq_item, x[i] */ - 0, /* was_sq_slice, x[i:j] */ -! (ssizeobjargproc) BufferAsItem, /* sq_ass_item, x[i]=v */ - 0, /* sq_ass_slice, x[i:j]=v */ - 0, /* sq_contains */ - 0, /* sq_inplace_concat */ ---- 869,875 ---- - (ssizeargfunc) 0, /* sq_repeat, x*n */ - (ssizeargfunc) BufferItem, /* sq_item, x[i] */ - 0, /* was_sq_slice, x[i:j] */ -! 0, /* sq_ass_item, x[i]=v */ - 0, /* sq_ass_slice, x[i:j]=v */ - 0, /* sq_contains */ - 0, /* sq_inplace_concat */ -*************** -*** 845,851 **** - PyMappingMethods BufferAsMapping = { - /* mp_length */ (lenfunc)BufferLength, - /* mp_subscript */ (binaryfunc)BufferSubscript, -! /* mp_ass_subscript */ (objobjargproc)0, - }; - - ---- 879,885 ---- - PyMappingMethods BufferAsMapping = { - /* mp_length */ (lenfunc)BufferLength, - /* mp_subscript */ (binaryfunc)BufferSubscript, -! /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript, - }; - - -*************** -*** 897,902 **** ---- 931,938 ---- - - if (this->buf && this->buf != INVALID_BUFFER_VALUE) - this->buf->b_python3_ref = NULL; -+ -+ Py_TYPE(self)->tp_free((PyObject*)self); - } - - static PyObject * -*************** -*** 975,989 **** - (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count); - } - -- static Py_ssize_t -- BufferAsItem(PyObject *self, Py_ssize_t n, PyObject *val) -- { -- return RBAsItem((BufferObject *)(self), n, val, 1, -- (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count, -- NULL); -- } -- -- - static PyObject * - BufferSubscript(PyObject *self, PyObject* idx) - { ---- 1011,1016 ---- -*************** -*** 999,1011 **** - &step, &slicelen) < 0) { - return NULL; - } -! return BufferSlice(self,start,stop+1); - } else { - PyErr_SetString(PyExc_IndexError, "Index must be int or slice"); - return NULL; - } - } - - static PySequenceMethods RangeAsSeq = { - (lenfunc) RangeLength, /* sq_length, len(x) */ - (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */ ---- 1026,1064 ---- - &step, &slicelen) < 0) { - return NULL; - } -! return BufferSlice(self,start,stop); - } else { - PyErr_SetString(PyExc_IndexError, "Index must be int or slice"); - return NULL; - } - } - -+ static Py_ssize_t -+ BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val) -+ { -+ if (PyLong_Check(idx)) { -+ long n = PyLong_AsLong(idx); -+ return RBAsItem((BufferObject *)(self), n, val, 1, -+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count, -+ NULL); -+ } else if (PySlice_Check(idx)) { -+ Py_ssize_t start, stop, step, slicelen; -+ -+ if (PySlice_GetIndicesEx((PySliceObject *)idx, -+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1, -+ &start, &stop, -+ &step, &slicelen) < 0) { -+ return -1; -+ } -+ return RBAsSlice((BufferObject *)(self), start, stop, val, 1, -+ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count, -+ NULL); -+ } else { -+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice"); -+ return -1; -+ } -+ } -+ - static PySequenceMethods RangeAsSeq = { - (lenfunc) RangeLength, /* sq_length, len(x) */ - (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */ -*************** -*** 1032,1037 **** ---- 1085,1091 ---- - RangeDestructor(PyObject *self) - { - Py_DECREF(((RangeObject *)(self))->buf); -+ Py_TYPE(self)->tp_free((PyObject*)self); - } - - static PyObject * -*************** -*** 1159,1164 **** ---- 1213,1220 ---- - - if (this->win && this->win != INVALID_WINDOW_VALUE) - this->win->w_python3_ref = NULL; -+ -+ Py_TYPE(self)->tp_free((PyObject*)self); - } - - static PyObject * -*************** -*** 1350,1357 **** - PySys_SetArgv(1, argv); - - mod = PyModule_Create(&vimmodule); - -! VimError = Py_BuildValue("s", "vim.error"); - - PyModule_AddObject(mod, "error", VimError); - Py_INCREF((PyObject *)(void *)&TheBufferList); ---- 1406,1416 ---- - PySys_SetArgv(1, argv); - - mod = PyModule_Create(&vimmodule); -+ if (mod == NULL) -+ return NULL; - -! VimError = PyErr_NewException("vim.error", NULL, NULL); -! Py_INCREF(VimError); - - PyModule_AddObject(mod, "error", VimError); - Py_INCREF((PyObject *)(void *)&TheBufferList); -*************** -*** 1404,1410 **** - } - *p = '\0'; - -! result = PyUnicode_FromStringAndSize(tmp, len); - - vim_free(tmp); - return result; ---- 1463,1469 ---- - } - *p = '\0'; - -! result = PyUnicode_Decode(tmp, len, (char *)p_enc, NULL); - - vim_free(tmp); - return result; -*** ../vim-7.3.219/src/version.c 2011-06-13 02:03:55.000000000 +0200 ---- src/version.c 2011-06-19 00:25:38.000000000 +0200 -*************** -*** 711,712 **** ---- 711,714 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 220, - /**/ - --- -I'm in shape. Round IS a shape. - - /// Bram Moolenaar -- Bram@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 /// |