]> git.pld-linux.org Git - packages/vim.git/blame - 7.3.220
- new: 7.3.260
[packages/vim.git] / 7.3.220
CommitLineData
a2e11672
AG
1To: vim_dev@googlegroups.com
2Subject: Patch 7.3.220
3Fcc: outbox
4From: Bram Moolenaar <Bram@moolenaar.net>
5Mime-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8------------
9
10Patch 7.3.220
11Problem: Python 3: vim.error is a 'str' instead of an 'Exception' object,
12 so 'except' or 'raise' it causes a 'SystemError' exception.
13 Buffer objects do not support slice assignment.
14 When exchanging text between Vim and Python, multibyte texts become
15 gabage or cause Unicode Expceptions, etc.
16 'py3file' tries to read in the file as Unicode, sometimes causes
17 UnicodeDecodeException
18Solution: Fix the problems. (lilydjwg)
19Files: src/if_py_both.h, src/if_python.c, src/if_python3.c
20
21
22*** ../mercurial/vim73/src/if_py_both.h 2011-03-22 15:47:18.000000000 +0100
23--- src/if_py_both.h 2011-06-18 23:54:25.000000000 +0200
24***************
25*** 65,74 ****
26 OutputWrite(PyObject *self, PyObject *args)
27 {
28 int len;
29! char *str;
30 int error = ((OutputObject *)(self))->error;
31
32! if (!PyArg_ParseTuple(args, "s#", &str, &len))
33 return NULL;
34
35 Py_BEGIN_ALLOW_THREADS
36--- 65,74 ----
37 OutputWrite(PyObject *self, PyObject *args)
38 {
39 int len;
40! char *str = NULL;
41 int error = ((OutputObject *)(self))->error;
42
43! if (!PyArg_ParseTuple(args, "es#", p_enc, &str, &len))
44 return NULL;
45
46 Py_BEGIN_ALLOW_THREADS
47***************
48*** 76,81 ****
49--- 76,82 ----
50 writer((writefn)(error ? emsg : msg), (char_u *)str, len);
51 Python_Release_Vim();
52 Py_END_ALLOW_THREADS
53+ PyMem_Free(str);
54
55 Py_INCREF(Py_None);
56 return Py_None;
57***************
58*** 104,113 ****
59 for (i = 0; i < n; ++i)
60 {
61 PyObject *line = PyList_GetItem(list, i);
62! char *str;
63 PyInt len;
64
65! if (!PyArg_Parse(line, "s#", &str, &len)) {
66 PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
67 Py_DECREF(list);
68 return NULL;
69--- 105,114 ----
70 for (i = 0; i < n; ++i)
71 {
72 PyObject *line = PyList_GetItem(list, i);
73! char *str = NULL;
74 PyInt len;
75
76! if (!PyArg_Parse(line, "es#", p_enc, &str, &len)) {
77 PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
78 Py_DECREF(list);
79 return NULL;
80***************
81*** 118,123 ****
82--- 119,125 ----
83 writer((writefn)(error ? emsg : msg), (char_u *)str, len);
84 Python_Release_Vim();
85 Py_END_ALLOW_THREADS
86+ PyMem_Free(str);
87 }
88
89 Py_DECREF(list);
90***************
91*** 681,686 ****
92--- 683,689 ----
93 {
94 const char *str;
95 char *save;
96+ PyObject *bytes;
97 PyInt len;
98 PyInt i;
99 char *p;
100***************
101*** 691,698 ****
102 return NULL;
103 }
104
105! str = PyString_AsString(obj);
106! len = PyString_Size(obj);
107
108 /*
109 * Error checking: String must not contain newlines, as we
110--- 694,702 ----
111 return NULL;
112 }
113
114! bytes = PyString_AsBytes(obj); /* for Python 2 this does nothing */
115! str = PyString_AsString(bytes);
116! len = PyString_Size(bytes);
117
118 /*
119 * Error checking: String must not contain newlines, as we
120***************
121*** 731,736 ****
122--- 735,741 ----
123 }
124
125 save[i] = '\0';
126+ PyString_FreeBytes(bytes); /* Python 2 does nothing here */
127
128 return save;
129 }
130***************
131*** 817,823 ****
132 invalidate_botline();
133 }
134
135! /* Replace a line in the specified buffer. The line number is
136 * in Vim format (1-based). The replacement line is given as
137 * a Python string object. The object is checked for validity
138 * and correct format. Errors are returned as a value of FAIL.
139--- 822,829 ----
140 invalidate_botline();
141 }
142
143! /*
144! * Replace a line in the specified buffer. The line number is
145 * in Vim format (1-based). The replacement line is given as
146 * a Python string object. The object is checked for validity
147 * and correct format. Errors are returned as a value of FAIL.
148***************
149*** 908,913 ****
150--- 914,1106 ----
151 }
152 }
153
154+ /* Replace a range of lines in the specified buffer. The line numbers are in
155+ * Vim format (1-based). The range is from lo up to, but not including, hi.
156+ * The replacement lines are given as a Python list of string objects. The
157+ * list is checked for validity and correct format. Errors are returned as a
158+ * value of FAIL. The return value is OK on success.
159+ * If OK is returned and len_change is not NULL, *len_change
160+ * is set to the change in the buffer length.
161+ */
162+ static int
163+ SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
164+ {
165+ /* First of all, we check the thpe of the supplied Python object.
166+ * There are three cases:
167+ * 1. NULL, or None - this is a deletion.
168+ * 2. A list - this is a replacement.
169+ * 3. Anything else - this is an error.
170+ */
171+ if (list == Py_None || list == NULL)
172+ {
173+ PyInt i;
174+ PyInt n = (int)(hi - lo);
175+ buf_T *savebuf = curbuf;
176+
177+ PyErr_Clear();
178+ curbuf = buf;
179+
180+ if (u_savedel((linenr_T)lo, (long)n) == FAIL)
181+ PyErr_SetVim(_("cannot save undo information"));
182+ else
183+ {
184+ for (i = 0; i < n; ++i)
185+ {
186+ if (ml_delete((linenr_T)lo, FALSE) == FAIL)
187+ {
188+ PyErr_SetVim(_("cannot delete line"));
189+ break;
190+ }
191+ }
192+ if (buf == curwin->w_buffer)
193+ py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
194+ deleted_lines_mark((linenr_T)lo, (long)i);
195+ }
196+
197+ curbuf = savebuf;
198+
199+ if (PyErr_Occurred() || VimErrorCheck())
200+ return FAIL;
201+
202+ if (len_change)
203+ *len_change = -n;
204+
205+ return OK;
206+ }
207+ else if (PyList_Check(list))
208+ {
209+ PyInt i;
210+ PyInt new_len = PyList_Size(list);
211+ PyInt old_len = hi - lo;
212+ PyInt extra = 0; /* lines added to text, can be negative */
213+ char **array;
214+ buf_T *savebuf;
215+
216+ if (new_len == 0) /* avoid allocating zero bytes */
217+ array = NULL;
218+ else
219+ {
220+ array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
221+ if (array == NULL)
222+ {
223+ PyErr_NoMemory();
224+ return FAIL;
225+ }
226+ }
227+
228+ for (i = 0; i < new_len; ++i)
229+ {
230+ PyObject *line = PyList_GetItem(list, i);
231+
232+ array[i] = StringToLine(line);
233+ if (array[i] == NULL)
234+ {
235+ while (i)
236+ vim_free(array[--i]);
237+ vim_free(array);
238+ return FAIL;
239+ }
240+ }
241+
242+ savebuf = curbuf;
243+
244+ PyErr_Clear();
245+ curbuf = buf;
246+
247+ if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
248+ PyErr_SetVim(_("cannot save undo information"));
249+
250+ /* If the size of the range is reducing (ie, new_len < old_len) we
251+ * need to delete some old_len. We do this at the start, by
252+ * repeatedly deleting line "lo".
253+ */
254+ if (!PyErr_Occurred())
255+ {
256+ for (i = 0; i < old_len - new_len; ++i)
257+ if (ml_delete((linenr_T)lo, FALSE) == FAIL)
258+ {
259+ PyErr_SetVim(_("cannot delete line"));
260+ break;
261+ }
262+ extra -= i;
263+ }
264+
265+ /* For as long as possible, replace the existing old_len with the
266+ * new old_len. This is a more efficient operation, as it requires
267+ * less memory allocation and freeing.
268+ */
269+ if (!PyErr_Occurred())
270+ {
271+ for (i = 0; i < old_len && i < new_len; ++i)
272+ if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
273+ == FAIL)
274+ {
275+ PyErr_SetVim(_("cannot replace line"));
276+ break;
277+ }
278+ }
279+ else
280+ i = 0;
281+
282+ /* Now we may need to insert the remaining new old_len. If we do, we
283+ * must free the strings as we finish with them (we can't pass the
284+ * responsibility to vim in this case).
285+ */
286+ if (!PyErr_Occurred())
287+ {
288+ while (i < new_len)
289+ {
290+ if (ml_append((linenr_T)(lo + i - 1),
291+ (char_u *)array[i], 0, FALSE) == FAIL)
292+ {
293+ PyErr_SetVim(_("cannot insert line"));
294+ break;
295+ }
296+ vim_free(array[i]);
297+ ++i;
298+ ++extra;
299+ }
300+ }
301+
302+ /* Free any left-over old_len, as a result of an error */
303+ while (i < new_len)
304+ {
305+ vim_free(array[i]);
306+ ++i;
307+ }
308+
309+ /* Free the array of old_len. All of its contents have now
310+ * been dealt with (either freed, or the responsibility passed
311+ * to vim.
312+ */
313+ vim_free(array);
314+
315+ /* Adjust marks. Invalidate any which lie in the
316+ * changed range, and move any in the remainder of the buffer.
317+ */
318+ mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
319+ (long)MAXLNUM, (long)extra);
320+ changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
321+
322+ if (buf == curwin->w_buffer)
323+ py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
324+
325+ curbuf = savebuf;
326+
327+ if (PyErr_Occurred() || VimErrorCheck())
328+ return FAIL;
329+
330+ if (len_change)
331+ *len_change = new_len - old_len;
332+
333+ return OK;
334+ }
335+ else
336+ {
337+ PyErr_BadArgument();
338+ return FAIL;
339+ }
340+ }
341
342 /* Insert a number of lines into the specified buffer after the specifed line.
343 * The line number is in Vim format (1-based). The lines to be inserted are
344***************
345*** 1108,1113 ****
346--- 1301,1340 ----
347 return -1;
348
349 if (new_end)
350+ *new_end = end + len_change;
351+
352+ return 0;
353+ }
354+
355+ static PyInt
356+ RBAsSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
357+ {
358+ PyInt size;
359+ PyInt len_change;
360+
361+ /* Self must be a valid buffer */
362+ if (CheckBuffer(self))
363+ return -1;
364+
365+ /* Sort out the slice range */
366+ size = end - start + 1;
367+
368+ if (lo < 0)
369+ lo = 0;
370+ else if (lo > size)
371+ lo = size;
372+ if (hi < 0)
373+ hi = 0;
374+ if (hi < lo)
375+ hi = lo;
376+ else if (hi > size)
377+ hi = size;
378+
379+ if (SetBufferLineList(self->buf, lo + start, hi + start,
380+ val, &len_change) == FAIL)
381+ return -1;
382+
383+ if (new_end)
384 *new_end = end + len_change;
385
386 return 0;
387*** ../mercurial/vim73/src/if_python.c 2011-03-26 18:32:00.000000000 +0100
388--- src/if_python.c 2011-06-19 00:02:15.000000000 +0200
389***************
390*** 56,61 ****
391--- 56,65 ----
392
393 static void init_structs(void);
394
395+ /* No-op conversion functions, use with care! */
396+ #define PyString_AsBytes(obj) (obj)
397+ #define PyString_FreeBytes(obj)
398+
399 #if !defined(FEAT_PYTHON) && defined(PROTO)
400 /* Use this to be able to generate prototypes without python being used. */
401 # define PyObject Py_ssize_t
402***************
403*** 129,134 ****
404--- 133,139 ----
405 */
406 # define PyArg_Parse dll_PyArg_Parse
407 # define PyArg_ParseTuple dll_PyArg_ParseTuple
408+ # define PyMem_Free dll_PyMem_Free
409 # define PyDict_SetItemString dll_PyDict_SetItemString
410 # define PyErr_BadArgument dll_PyErr_BadArgument
411 # define PyErr_Clear dll_PyErr_Clear
412***************
413*** 189,194 ****
414--- 194,200 ----
415 */
416 static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
417 static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
418+ static int(*dll_PyMem_Free)(void *);
419 static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
420 static int(*dll_PyErr_BadArgument)(void);
421 static void(*dll_PyErr_Clear)(void);
422***************
423*** 271,276 ****
424--- 277,283 ----
425 {
426 {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
427 {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
428+ {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
429 {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
430 {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
431 {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
432***************
433*** 833,876 ****
434 static PyObject *CurrentGetattr(PyObject *, char *);
435 static int CurrentSetattr(PyObject *, char *, PyObject *);
436
437- /* Common routines for buffers and line ranges
438- * -------------------------------------------
439- */
440-
441- static PyInt
442- RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
443- {
444- PyInt size;
445- PyInt len_change;
446-
447- /* Self must be a valid buffer */
448- if (CheckBuffer(self))
449- return -1;
450-
451- /* Sort out the slice range */
452- size = end - start + 1;
453-
454- if (lo < 0)
455- lo = 0;
456- else if (lo > size)
457- lo = size;
458- if (hi < 0)
459- hi = 0;
460- if (hi < lo)
461- hi = lo;
462- else if (hi > size)
463- hi = size;
464-
465- if (SetBufferLineList(self->buf, lo + start, hi + start,
466- val, &len_change) == FAIL)
467- return -1;
468-
469- if (new_end)
470- *new_end = end + len_change;
471-
472- return 0;
473- }
474-
475 static PySequenceMethods BufferAsSeq = {
476 (PyInquiry) BufferLength, /* sq_length, len(x) */
477 (binaryfunc) 0, /* BufferConcat, */ /* sq_concat, x+y */
478--- 840,845 ----
479***************
480*** 1038,1044 ****
481 static PyInt
482 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
483 {
484! return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
485 (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
486 NULL);
487 }
488--- 1007,1013 ----
489 static PyInt
490 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
491 {
492! return RBAsSlice((BufferObject *)(self), lo, hi, val, 1,
493 (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
494 NULL);
495 }
496***************
497*** 1088,1094 ****
498 static PyInt
499 RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
500 {
501! return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val,
502 ((RangeObject *)(self))->start,
503 ((RangeObject *)(self))->end,
504 &((RangeObject *)(self))->end);
505--- 1057,1063 ----
506 static PyInt
507 RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
508 {
509! return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
510 ((RangeObject *)(self))->start,
511 ((RangeObject *)(self))->end,
512 &((RangeObject *)(self))->end);
513***************
514*** 1435,1628 ****
515 * 4. Utility functions for handling the interface between Vim and Python.
516 */
517
518- /* Replace a range of lines in the specified buffer. The line numbers are in
519- * Vim format (1-based). The range is from lo up to, but not including, hi.
520- * The replacement lines are given as a Python list of string objects. The
521- * list is checked for validity and correct format. Errors are returned as a
522- * value of FAIL. The return value is OK on success.
523- * If OK is returned and len_change is not NULL, *len_change
524- * is set to the change in the buffer length.
525- */
526- static int
527- SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
528- {
529- /* First of all, we check the thpe of the supplied Python object.
530- * There are three cases:
531- * 1. NULL, or None - this is a deletion.
532- * 2. A list - this is a replacement.
533- * 3. Anything else - this is an error.
534- */
535- if (list == Py_None || list == NULL)
536- {
537- PyInt i;
538- PyInt n = (int)(hi - lo);
539- buf_T *savebuf = curbuf;
540-
541- PyErr_Clear();
542- curbuf = buf;
543-
544- if (u_savedel((linenr_T)lo, (long)n) == FAIL)
545- PyErr_SetVim(_("cannot save undo information"));
546- else
547- {
548- for (i = 0; i < n; ++i)
549- {
550- if (ml_delete((linenr_T)lo, FALSE) == FAIL)
551- {
552- PyErr_SetVim(_("cannot delete line"));
553- break;
554- }
555- }
556- if (buf == curwin->w_buffer)
557- py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
558- deleted_lines_mark((linenr_T)lo, (long)i);
559- }
560-
561- curbuf = savebuf;
562-
563- if (PyErr_Occurred() || VimErrorCheck())
564- return FAIL;
565-
566- if (len_change)
567- *len_change = -n;
568-
569- return OK;
570- }
571- else if (PyList_Check(list))
572- {
573- PyInt i;
574- PyInt new_len = PyList_Size(list);
575- PyInt old_len = hi - lo;
576- PyInt extra = 0; /* lines added to text, can be negative */
577- char **array;
578- buf_T *savebuf;
579-
580- if (new_len == 0) /* avoid allocating zero bytes */
581- array = NULL;
582- else
583- {
584- array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
585- if (array == NULL)
586- {
587- PyErr_NoMemory();
588- return FAIL;
589- }
590- }
591-
592- for (i = 0; i < new_len; ++i)
593- {
594- PyObject *line = PyList_GetItem(list, i);
595-
596- array[i] = StringToLine(line);
597- if (array[i] == NULL)
598- {
599- while (i)
600- vim_free(array[--i]);
601- vim_free(array);
602- return FAIL;
603- }
604- }
605-
606- savebuf = curbuf;
607-
608- PyErr_Clear();
609- curbuf = buf;
610-
611- if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
612- PyErr_SetVim(_("cannot save undo information"));
613-
614- /* If the size of the range is reducing (ie, new_len < old_len) we
615- * need to delete some old_len. We do this at the start, by
616- * repeatedly deleting line "lo".
617- */
618- if (!PyErr_Occurred())
619- {
620- for (i = 0; i < old_len - new_len; ++i)
621- if (ml_delete((linenr_T)lo, FALSE) == FAIL)
622- {
623- PyErr_SetVim(_("cannot delete line"));
624- break;
625- }
626- extra -= i;
627- }
628-
629- /* For as long as possible, replace the existing old_len with the
630- * new old_len. This is a more efficient operation, as it requires
631- * less memory allocation and freeing.
632- */
633- if (!PyErr_Occurred())
634- {
635- for (i = 0; i < old_len && i < new_len; ++i)
636- if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
637- == FAIL)
638- {
639- PyErr_SetVim(_("cannot replace line"));
640- break;
641- }
642- }
643- else
644- i = 0;
645-
646- /* Now we may need to insert the remaining new old_len. If we do, we
647- * must free the strings as we finish with them (we can't pass the
648- * responsibility to vim in this case).
649- */
650- if (!PyErr_Occurred())
651- {
652- while (i < new_len)
653- {
654- if (ml_append((linenr_T)(lo + i - 1),
655- (char_u *)array[i], 0, FALSE) == FAIL)
656- {
657- PyErr_SetVim(_("cannot insert line"));
658- break;
659- }
660- vim_free(array[i]);
661- ++i;
662- ++extra;
663- }
664- }
665-
666- /* Free any left-over old_len, as a result of an error */
667- while (i < new_len)
668- {
669- vim_free(array[i]);
670- ++i;
671- }
672-
673- /* Free the array of old_len. All of its contents have now
674- * been dealt with (either freed, or the responsibility passed
675- * to vim.
676- */
677- vim_free(array);
678-
679- /* Adjust marks. Invalidate any which lie in the
680- * changed range, and move any in the remainder of the buffer.
681- */
682- mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
683- (long)MAXLNUM, (long)extra);
684- changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
685-
686- if (buf == curwin->w_buffer)
687- py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
688-
689- curbuf = savebuf;
690-
691- if (PyErr_Occurred() || VimErrorCheck())
692- return FAIL;
693-
694- if (len_change)
695- *len_change = new_len - old_len;
696-
697- return OK;
698- }
699- else
700- {
701- PyErr_BadArgument();
702- return FAIL;
703- }
704- }
705-
706 /* Convert a Vim line into a Python string.
707 * All internal newlines are replaced by null characters.
708 *
709--- 1404,1409 ----
710*** ../mercurial/vim73/src/if_python3.c 2011-06-12 21:37:06.000000000 +0200
711--- src/if_python3.c 2011-06-19 00:10:42.000000000 +0200
712***************
713*** 70,77 ****
714
715 #define PyInt Py_ssize_t
716 #define PyString_Check(obj) PyUnicode_Check(obj)
717! #define PyString_AsString(obj) _PyUnicode_AsString(obj)
718! #define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
719 #define PyString_FromString(repr) PyUnicode_FromString(repr)
720
721 #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
722--- 70,79 ----
723
724 #define PyInt Py_ssize_t
725 #define PyString_Check(obj) PyUnicode_Check(obj)
726! #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)p_enc, NULL);
727! #define PyString_FreeBytes(obj) Py_XDECREF(bytes)
728! #define PyString_AsString(obj) PyBytes_AsString(obj)
729! #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
730 #define PyString_FromString(repr) PyUnicode_FromString(repr)
731
732 #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
733***************
734*** 99,104 ****
735--- 101,107 ----
736 # define PyArg_Parse py3_PyArg_Parse
737 # undef PyArg_ParseTuple
738 # define PyArg_ParseTuple py3_PyArg_ParseTuple
739+ # define PyMem_Free py3_PyMem_Free
740 # define PyDict_SetItemString py3_PyDict_SetItemString
741 # define PyErr_BadArgument py3_PyErr_BadArgument
742 # define PyErr_Clear py3_PyErr_Clear
743***************
744*** 140,147 ****
745--- 143,155 ----
746 # define PyModule_AddObject py3_PyModule_AddObject
747 # define PyImport_AppendInittab py3_PyImport_AppendInittab
748 # define _PyUnicode_AsString py3__PyUnicode_AsString
749+ # undef PyUnicode_AsEncodedString
750+ # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
751+ # undef PyBytes_AsString
752+ # define PyBytes_AsString py3_PyBytes_AsString
753 # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
754 # define PySlice_Type (*py3_PySlice_Type)
755+ # define PyErr_NewException py3_PyErr_NewException
756 # ifdef Py_DEBUG
757 # define _Py_NegativeRefcount py3__Py_NegativeRefcount
758 # define _Py_RefTotal (*py3__Py_RefTotal)
759***************
760*** 157,164 ****
761 # define PyModule_Create2 py3_PyModule_Create2
762 # undef PyUnicode_FromString
763 # define PyUnicode_FromString py3_PyUnicode_FromString
764! # undef PyUnicode_FromStringAndSize
765! # define PyUnicode_FromStringAndSize py3_PyUnicode_FromStringAndSize
766
767 # ifdef Py_DEBUG
768 # undef PyObject_NEW
769--- 165,172 ----
770 # define PyModule_Create2 py3_PyModule_Create2
771 # undef PyUnicode_FromString
772 # define PyUnicode_FromString py3_PyUnicode_FromString
773! # undef PyUnicode_Decode
774! # define PyUnicode_Decode py3_PyUnicode_Decode
775
776 # ifdef Py_DEBUG
777 # undef PyObject_NEW
778***************
779*** 199,205 ****
780 static int (*py3_PyType_Ready)(PyTypeObject *type);
781 static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
782 static PyObject* (*py3_PyUnicode_FromString)(const char *u);
783! static PyObject* (*py3_PyUnicode_FromStringAndSize)(const char *u, Py_ssize_t size);
784 static long (*py3_PyLong_AsLong)(PyObject *);
785 static void (*py3_PyErr_SetNone)(PyObject *);
786 static void (*py3_PyEval_InitThreads)(void);
787--- 207,214 ----
788 static int (*py3_PyType_Ready)(PyTypeObject *type);
789 static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
790 static PyObject* (*py3_PyUnicode_FromString)(const char *u);
791! static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size,
792! const char *encoding, const char *errors);
793 static long (*py3_PyLong_AsLong)(PyObject *);
794 static void (*py3_PyErr_SetNone)(PyObject *);
795 static void (*py3_PyEval_InitThreads)(void);
796***************
797*** 207,212 ****
798--- 216,222 ----
799 static PyThreadState*(*py3_PyEval_SaveThread)(void);
800 static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
801 static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
802+ static int (*py3_PyMem_Free)(void *);
803 static int (*py3_Py_IsInitialized)(void);
804 static void (*py3_PyErr_Clear)(void);
805 static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
806***************
807*** 214,224 ****
808--- 224,237 ----
809 static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
810 static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
811 static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
812+ static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
813+ static char* (*py3_PyBytes_AsString)(PyObject *bytes);
814 static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
815 static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
816 static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
817 static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
818 static PyTypeObject* py3_PySlice_Type;
819+ static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
820 # ifdef Py_DEBUG
821 static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
822 static Py_ssize_t* py3__Py_RefTotal;
823***************
824*** 259,264 ****
825--- 272,278 ----
826 {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
827 {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
828 {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
829+ {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
830 {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
831 {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
832 {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
833***************
834*** 289,295 ****
835 {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread},
836 {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
837 {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse},
838- {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
839 {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
840 {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
841 {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
842--- 303,308 ----
843***************
844*** 297,307 ****
845--- 310,322 ----
846 {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
847 {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
848 {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
849+ {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
850 {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
851 {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
852 {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
853 {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
854 {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
855+ {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
856 # ifdef Py_DEBUG
857 {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
858 {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
859***************
860*** 337,343 ****
861 py3_runtime_link_init(char *libname, int verbose)
862 {
863 int i;
864! void *ucs_from_string, *ucs_from_string_and_size;
865
866 # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
867 /* Can't have Python and Python3 loaded at the same time.
868--- 352,358 ----
869 py3_runtime_link_init(char *libname, int verbose)
870 {
871 int i;
872! void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string;
873
874 # if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
875 /* Can't have Python and Python3 loaded at the same time.
876***************
877*** 377,395 ****
878 /* Load unicode functions separately as only the ucs2 or the ucs4 functions
879 * will be present in the library. */
880 ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
881! ucs_from_string_and_size = symbol_from_dll(hinstPy3,
882! "PyUnicodeUCS2_FromStringAndSize");
883! if (!ucs_from_string || !ucs_from_string_and_size)
884 {
885 ucs_from_string = symbol_from_dll(hinstPy3,
886 "PyUnicodeUCS4_FromString");
887! ucs_from_string_and_size = symbol_from_dll(hinstPy3,
888! "PyUnicodeUCS4_FromStringAndSize");
889 }
890! if (ucs_from_string && ucs_from_string_and_size)
891 {
892 py3_PyUnicode_FromString = ucs_from_string;
893! py3_PyUnicode_FromStringAndSize = ucs_from_string_and_size;
894 }
895 else
896 {
897--- 392,415 ----
898 /* Load unicode functions separately as only the ucs2 or the ucs4 functions
899 * will be present in the library. */
900 ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
901! ucs_decode = symbol_from_dll(hinstPy3,
902! "PyUnicodeUCS2_Decode");
903! ucs_as_encoded_string = symbol_from_dll(hinstPy3,
904! "PyUnicodeUCS2_AsEncodedString");
905! if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string)
906 {
907 ucs_from_string = symbol_from_dll(hinstPy3,
908 "PyUnicodeUCS4_FromString");
909! ucs_decode = symbol_from_dll(hinstPy3,
910! "PyUnicodeUCS4_Decode");
911! ucs_as_encoded_string = symbol_from_dll(hinstPy3,
912! "PyUnicodeUCS4_AsEncodedString");
913 }
914! if (ucs_from_string && ucs_decode && ucs_as_encoded_string)
915 {
916 py3_PyUnicode_FromString = ucs_from_string;
917! py3_PyUnicode_Decode = ucs_decode;
918! py3_PyUnicode_AsEncodedString = ucs_as_encoded_string;
919 }
920 else
921 {
922***************
923*** 567,574 ****
924 /* Remove the element from sys.path that was added because of our
925 * argv[0] value in Py3Init_vim(). Previously we used an empty
926 * string, but dependinding on the OS we then get an empty entry or
927! * the current directory in sys.path. */
928! PyRun_SimpleString("import sys; sys.path = list(filter(lambda x: x != '/must>not&exist', sys.path))");
929
930 // lock is created and acquired in PyEval_InitThreads() and thread
931 // state is created in Py_Initialize()
932--- 587,597 ----
933 /* Remove the element from sys.path that was added because of our
934 * argv[0] value in Py3Init_vim(). Previously we used an empty
935 * string, but dependinding on the OS we then get an empty entry or
936! * the current directory in sys.path.
937! * Only after vim has been imported, the element does exist in
938! * sys.path.
939! */
940! PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
941
942 // lock is created and acquired in PyEval_InitThreads() and thread
943 // state is created in Py_Initialize()
944***************
945*** 605,610 ****
946--- 628,635 ----
947 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
948 char *saved_locale;
949 #endif
950+ PyObject *cmdstr;
951+ PyObject *cmdbytes;
952
953 #if defined(MACOS) && !defined(MACOS_X_UNIX)
954 GetPort(&oldPort);
955***************
956*** 634,640 ****
957
958 pygilstate = PyGILState_Ensure();
959
960! PyRun_SimpleString((char *)(cmd));
961
962 PyGILState_Release(pygilstate);
963
964--- 659,671 ----
965
966 pygilstate = PyGILState_Ensure();
967
968! /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
969! * SyntaxError (unicode error). */
970! cmdstr = PyUnicode_Decode(cmd, strlen(cmd), (char *)p_enc, NULL);
971! cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", NULL);
972! Py_XDECREF(cmdstr);
973! PyRun_SimpleString(PyBytes_AsString(cmdbytes));
974! Py_XDECREF(cmdbytes);
975
976 PyGILState_Release(pygilstate);
977
978***************
979*** 693,699 ****
980 * different options under Windows, meaning that stdio pointers aren't
981 * compatible between the two. Yuk.
982 *
983! * construct: exec(compile(open('a_filename').read(), 'a_filename', 'exec'))
984 *
985 * We need to escape any backslashes or single quotes in the file name, so that
986 * Python won't mangle the file name.
987--- 724,733 ----
988 * different options under Windows, meaning that stdio pointers aren't
989 * compatible between the two. Yuk.
990 *
991! * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec'))
992! *
993! * Using bytes so that Python can detect the source encoding as it normally
994! * does. The doc does not say "compile" accept bytes, though.
995 *
996 * We need to escape any backslashes or single quotes in the file name, so that
997 * Python won't mangle the file name.
998***************
999*** 716,723 ****
1000 return;
1001 if (i==0)
1002 {
1003! strcpy(p,"').read(),'");
1004! p += 11;
1005 }
1006 else
1007 {
1008--- 750,757 ----
1009 return;
1010 if (i==0)
1011 {
1012! strcpy(p,"','rb').read(),'");
1013! p += 16;
1014 }
1015 else
1016 {
1017***************
1018*** 812,819 ****
1019
1020 static Py_ssize_t BufferLength(PyObject *);
1021 static PyObject *BufferItem(PyObject *, Py_ssize_t);
1022- static Py_ssize_t BufferAsItem(PyObject *, Py_ssize_t, PyObject *);
1023 static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
1024
1025
1026 /* Line range type - Implementation functions
1027--- 846,853 ----
1028
1029 static Py_ssize_t BufferLength(PyObject *);
1030 static PyObject *BufferItem(PyObject *, Py_ssize_t);
1031 static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
1032+ static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val);
1033
1034
1035 /* Line range type - Implementation functions
1036***************
1037*** 835,841 ****
1038 (ssizeargfunc) 0, /* sq_repeat, x*n */
1039 (ssizeargfunc) BufferItem, /* sq_item, x[i] */
1040 0, /* was_sq_slice, x[i:j] */
1041! (ssizeobjargproc) BufferAsItem, /* sq_ass_item, x[i]=v */
1042 0, /* sq_ass_slice, x[i:j]=v */
1043 0, /* sq_contains */
1044 0, /* sq_inplace_concat */
1045--- 869,875 ----
1046 (ssizeargfunc) 0, /* sq_repeat, x*n */
1047 (ssizeargfunc) BufferItem, /* sq_item, x[i] */
1048 0, /* was_sq_slice, x[i:j] */
1049! 0, /* sq_ass_item, x[i]=v */
1050 0, /* sq_ass_slice, x[i:j]=v */
1051 0, /* sq_contains */
1052 0, /* sq_inplace_concat */
1053***************
1054*** 845,851 ****
1055 PyMappingMethods BufferAsMapping = {
1056 /* mp_length */ (lenfunc)BufferLength,
1057 /* mp_subscript */ (binaryfunc)BufferSubscript,
1058! /* mp_ass_subscript */ (objobjargproc)0,
1059 };
1060
1061
1062--- 879,885 ----
1063 PyMappingMethods BufferAsMapping = {
1064 /* mp_length */ (lenfunc)BufferLength,
1065 /* mp_subscript */ (binaryfunc)BufferSubscript,
1066! /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript,
1067 };
1068
1069
1070***************
1071*** 897,902 ****
1072--- 931,938 ----
1073
1074 if (this->buf && this->buf != INVALID_BUFFER_VALUE)
1075 this->buf->b_python3_ref = NULL;
1076+
1077+ Py_TYPE(self)->tp_free((PyObject*)self);
1078 }
1079
1080 static PyObject *
1081***************
1082*** 975,989 ****
1083 (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
1084 }
1085
1086- static Py_ssize_t
1087- BufferAsItem(PyObject *self, Py_ssize_t n, PyObject *val)
1088- {
1089- return RBAsItem((BufferObject *)(self), n, val, 1,
1090- (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
1091- NULL);
1092- }
1093-
1094-
1095 static PyObject *
1096 BufferSubscript(PyObject *self, PyObject* idx)
1097 {
1098--- 1011,1016 ----
1099***************
1100*** 999,1011 ****
1101 &step, &slicelen) < 0) {
1102 return NULL;
1103 }
1104! return BufferSlice(self,start,stop+1);
1105 } else {
1106 PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
1107 return NULL;
1108 }
1109 }
1110
1111 static PySequenceMethods RangeAsSeq = {
1112 (lenfunc) RangeLength, /* sq_length, len(x) */
1113 (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
1114--- 1026,1064 ----
1115 &step, &slicelen) < 0) {
1116 return NULL;
1117 }
1118! return BufferSlice(self,start,stop);
1119 } else {
1120 PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
1121 return NULL;
1122 }
1123 }
1124
1125+ static Py_ssize_t
1126+ BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
1127+ {
1128+ if (PyLong_Check(idx)) {
1129+ long n = PyLong_AsLong(idx);
1130+ return RBAsItem((BufferObject *)(self), n, val, 1,
1131+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
1132+ NULL);
1133+ } else if (PySlice_Check(idx)) {
1134+ Py_ssize_t start, stop, step, slicelen;
1135+
1136+ if (PySlice_GetIndicesEx((PySliceObject *)idx,
1137+ (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
1138+ &start, &stop,
1139+ &step, &slicelen) < 0) {
1140+ return -1;
1141+ }
1142+ return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
1143+ (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
1144+ NULL);
1145+ } else {
1146+ PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
1147+ return -1;
1148+ }
1149+ }
1150+
1151 static PySequenceMethods RangeAsSeq = {
1152 (lenfunc) RangeLength, /* sq_length, len(x) */
1153 (binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
1154***************
1155*** 1032,1037 ****
1156--- 1085,1091 ----
1157 RangeDestructor(PyObject *self)
1158 {
1159 Py_DECREF(((RangeObject *)(self))->buf);
1160+ Py_TYPE(self)->tp_free((PyObject*)self);
1161 }
1162
1163 static PyObject *
1164***************
1165*** 1159,1164 ****
1166--- 1213,1220 ----
1167
1168 if (this->win && this->win != INVALID_WINDOW_VALUE)
1169 this->win->w_python3_ref = NULL;
1170+
1171+ Py_TYPE(self)->tp_free((PyObject*)self);
1172 }
1173
1174 static PyObject *
1175***************
1176*** 1350,1357 ****
1177 PySys_SetArgv(1, argv);
1178
1179 mod = PyModule_Create(&vimmodule);
1180
1181! VimError = Py_BuildValue("s", "vim.error");
1182
1183 PyModule_AddObject(mod, "error", VimError);
1184 Py_INCREF((PyObject *)(void *)&TheBufferList);
1185--- 1406,1416 ----
1186 PySys_SetArgv(1, argv);
1187
1188 mod = PyModule_Create(&vimmodule);
1189+ if (mod == NULL)
1190+ return NULL;
1191
1192! VimError = PyErr_NewException("vim.error", NULL, NULL);
1193! Py_INCREF(VimError);
1194
1195 PyModule_AddObject(mod, "error", VimError);
1196 Py_INCREF((PyObject *)(void *)&TheBufferList);
1197***************
1198*** 1404,1410 ****
1199 }
1200 *p = '\0';
1201
1202! result = PyUnicode_FromStringAndSize(tmp, len);
1203
1204 vim_free(tmp);
1205 return result;
1206--- 1463,1469 ----
1207 }
1208 *p = '\0';
1209
1210! result = PyUnicode_Decode(tmp, len, (char *)p_enc, NULL);
1211
1212 vim_free(tmp);
1213 return result;
1214*** ../vim-7.3.219/src/version.c 2011-06-13 02:03:55.000000000 +0200
1215--- src/version.c 2011-06-19 00:25:38.000000000 +0200
1216***************
1217*** 711,712 ****
1218--- 711,714 ----
1219 { /* Add new patch number below this line */
1220+ /**/
1221+ 220,
1222 /**/
1223
1224--
1225I'm in shape. Round IS a shape.
1226
1227 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
1228/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
1229\\\ an exciting new programming language -- http://www.Zimbu.org ///
1230 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
This page took 0.184463 seconds and 4 git commands to generate.