home *** CD-ROM | disk | FTP | other *** search
- To: vim_dev@googlegroups.com
- Subject: Patch 7.3.671
- 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.671
- Problem: More Python code can be shared between Python 2 and 3.
- Solution: Move code to if_py_both.h. (ZyX)
- Files: src/if_py_both.h, src/if_python.c, src/if_python3.c
-
-
- *** ../vim-7.3.670/src/if_py_both.h 2012-09-21 13:43:09.000000000 +0200
- --- src/if_py_both.h 2012-09-21 13:45:02.000000000 +0200
- ***************
- *** 71,76 ****
- --- 71,101 ----
- /* Output buffer management
- */
-
- + static int
- + OutputSetattr(PyObject *self, char *name, PyObject *val)
- + {
- + if (val == NULL)
- + {
- + PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
- + return -1;
- + }
- +
- + if (strcmp(name, "softspace") == 0)
- + {
- + if (!PyInt_Check(val))
- + {
- + PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
- + return -1;
- + }
- +
- + ((OutputObject *)(self))->softspace = PyInt_AsLong(val);
- + return 0;
- + }
- +
- + PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
- + return -1;
- + }
- +
- static PyObject *
- OutputWrite(PyObject *self, PyObject *args)
- {
- *** ../vim-7.3.670/src/if_python.c 2012-09-12 20:21:38.000000000 +0200
- --- src/if_python.c 2012-09-21 13:45:02.000000000 +0200
- ***************
- *** 951,981 ****
- return Py_FindMethod(OutputMethods, self, name);
- }
-
- - static int
- - OutputSetattr(PyObject *self, char *name, PyObject *val)
- - {
- - if (val == NULL)
- - {
- - PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
- - return -1;
- - }
- -
- - if (strcmp(name, "softspace") == 0)
- - {
- - if (!PyInt_Check(val))
- - {
- - PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
- - return -1;
- - }
- -
- - ((OutputObject *)(self))->softspace = PyInt_AsLong(val);
- - return 0;
- - }
- -
- - PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
- - return -1;
- - }
- -
- /***************/
-
- static int
- --- 951,956 ----
- *** ../vim-7.3.670/src/if_python3.c 2012-09-12 20:21:38.000000000 +0200
- --- src/if_python3.c 2012-09-21 13:45:02.000000000 +0200
- ***************
- *** 88,93 ****
- --- 88,96 ----
- #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
- #define PyString_FromString(repr) PyUnicode_FromString(repr)
- #define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len)
- + #define PyInt_Check(obj) PyLong_Check(obj)
- + #define PyInt_FromLong(i) PyLong_FromLong(i)
- + #define PyInt_AsLong(obj) PyLong_AsLong(obj)
-
- #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
-
- ***************
- *** 586,591 ****
- --- 589,599 ----
- */
- #include "if_py_both.h"
-
- + #define GET_ATTR_STRING(name, nameobj) \
- + char *name = ""; \
- + if(PyUnicode_Check(nameobj)) \
- + name = _PyUnicode_AsString(nameobj)
- +
- #define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
-
- static void
- ***************
- *** 923,931 ****
- static PyObject *
- OutputGetattro(PyObject *self, PyObject *nameobj)
- {
- ! char *name = "";
- ! if (PyUnicode_Check(nameobj))
- ! name = _PyUnicode_AsString(nameobj);
-
- if (strcmp(name, "softspace") == 0)
- return PyLong_FromLong(((OutputObject *)(self))->softspace);
- --- 931,937 ----
- static PyObject *
- OutputGetattro(PyObject *self, PyObject *nameobj)
- {
- ! GET_ATTR_STRING(name, nameobj);
-
- if (strcmp(name, "softspace") == 0)
- return PyLong_FromLong(((OutputObject *)(self))->softspace);
- ***************
- *** 936,965 ****
- static int
- OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
- {
- ! char *name = "";
- ! if (PyUnicode_Check(nameobj))
- ! name = _PyUnicode_AsString(nameobj);
- !
- ! if (val == NULL)
- ! {
- ! PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
- ! return -1;
- ! }
-
- ! if (strcmp(name, "softspace") == 0)
- ! {
- ! if (!PyLong_Check(val))
- ! {
- ! PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
- ! return -1;
- ! }
- !
- ! ((OutputObject *)(self))->softspace = PyLong_AsLong(val);
- ! return 0;
- ! }
- !
- ! PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
- ! return -1;
- }
-
- /***************/
- --- 942,950 ----
- static int
- OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
- {
- ! GET_ATTR_STRING(name, nameobj);
-
- ! return OutputSetattr(self, name, val);
- }
-
- /***************/
- ***************
- *** 1091,1099 ****
- {
- BufferObject *this = (BufferObject *)(self);
-
- ! char *name = "";
- ! if (PyUnicode_Check(nameobj))
- ! name = _PyUnicode_AsString(nameobj);
-
- if (CheckBuffer(this))
- return NULL;
- --- 1076,1082 ----
- {
- BufferObject *this = (BufferObject *)(self);
-
- ! GET_ATTR_STRING(name, nameobj);
-
- if (CheckBuffer(this))
- return NULL;
- ***************
- *** 1257,1265 ****
- static PyObject *
- RangeGetattro(PyObject *self, PyObject *nameobj)
- {
- ! char *name = "";
- ! if (PyUnicode_Check(nameobj))
- ! name = _PyUnicode_AsString(nameobj);
-
- if (strcmp(name, "start") == 0)
- return Py_BuildValue("n", ((RangeObject *)(self))->start - 1);
- --- 1240,1246 ----
- static PyObject *
- RangeGetattro(PyObject *self, PyObject *nameobj)
- {
- ! GET_ATTR_STRING(name, nameobj);
-
- if (strcmp(name, "start") == 0)
- return Py_BuildValue("n", ((RangeObject *)(self))->start - 1);
- ***************
- *** 1430,1439 ****
- {
- WindowObject *this = (WindowObject *)(self);
-
- ! char *name = "";
- ! if (PyUnicode_Check(nameobj))
- ! name = _PyUnicode_AsString(nameobj);
- !
-
- if (CheckWindow(this))
- return NULL;
- --- 1411,1417 ----
- {
- WindowObject *this = (WindowObject *)(self);
-
- ! GET_ATTR_STRING(name, nameobj);
-
- if (CheckWindow(this))
- return NULL;
- ***************
- *** 1461,1470 ****
- static int
- WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
- {
- ! char *name = "";
- !
- ! if (PyUnicode_Check(nameobj))
- ! name = _PyUnicode_AsString(nameobj);
-
- return WindowSetattr(self, name, val);
- }
- --- 1439,1445 ----
- static int
- WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
- {
- ! GET_ATTR_STRING(name, nameobj);
-
- return WindowSetattr(self, name, val);
- }
- ***************
- *** 1508,1516 ****
- static PyObject *
- CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj)
- {
- ! char *name = "";
- ! if (PyUnicode_Check(nameobj))
- ! name = _PyUnicode_AsString(nameobj);
-
- if (strcmp(name, "buffer") == 0)
- return (PyObject *)BufferNew(curbuf);
- --- 1483,1489 ----
- static PyObject *
- CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj)
- {
- ! GET_ATTR_STRING(name, nameobj);
-
- if (strcmp(name, "buffer") == 0)
- return (PyObject *)BufferNew(curbuf);
- ***************
- *** 1681,1689 ****
- FunctionGetattro(PyObject *self, PyObject *nameobj)
- {
- FunctionObject *this = (FunctionObject *)(self);
- ! char *name = "";
- ! if (PyUnicode_Check(nameobj))
- ! name = _PyUnicode_AsString(nameobj);
-
- if (strcmp(name, "name") == 0)
- return PyUnicode_FromString((char *)(this->name));
- --- 1654,1661 ----
- FunctionGetattro(PyObject *self, PyObject *nameobj)
- {
- FunctionObject *this = (FunctionObject *)(self);
- !
- ! GET_ATTR_STRING(name, nameobj);
-
- if (strcmp(name, "name") == 0)
- return PyUnicode_FromString((char *)(this->name));
- *** ../vim-7.3.670/src/version.c 2012-09-21 13:43:09.000000000 +0200
- --- src/version.c 2012-09-21 13:45:28.000000000 +0200
- ***************
- *** 721,722 ****
- --- 721,724 ----
- { /* Add new patch number below this line */
- + /**/
- + 671,
- /**/
-
- --
- The war between Emacs and Vi is over. Vi has won with 3 to 1.
- http://www.ssc.com/lg/issue30/raymond.html
-
- /// 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 ///
-