To: vim_dev@googlegroups.com
Subject: Patch 7.3.948
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.948
Problem:    Cannot build with Python 2.2
Solution:   Make Python interface work with Python 2.2
	    Make 2.2 the first supported version. (ZyX)
Files:	    src/if_py_both.h, src/if_python3.c, src/if_python.c,
	    src/testdir/test86.in, src/testdir/test86.ok,
	    src/testdir/test87.ok, src/configure.in, src/auto/configure


*** ../vim-7.3.947/src/if_py_both.h	2013-05-15 14:39:47.000000000 +0200
--- src/if_py_both.h	2013-05-15 14:49:11.000000000 +0200
***************
*** 564,569 ****
--- 564,570 ----
      return (PyObject *)(self);
  }
  
+ #if 0 /* unused */
      static void
  IterDestructor(PyObject *self)
  {
***************
*** 573,578 ****
--- 574,580 ----
  
      DESTRUCTOR_FINISH(self);
  }
+ #endif
  
      static PyObject *
  IterNext(PyObject *self)
***************
*** 696,708 ****
  	}
  	else
  	{
! 	    if (!PyBool_Check(val))
! 	    {
! 		PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed"));
! 		return -1;
! 	    }
! 
! 	    if (val == Py_True)
  		this->dict->dv_lock = VAR_LOCKED;
  	    else
  		this->dict->dv_lock = 0;
--- 698,704 ----
  	}
  	else
  	{
! 	    if (PyObject_IsTrue(val))
  		this->dict->dv_lock = VAR_LOCKED;
  	    else
  		this->dict->dv_lock = 0;
***************
*** 1202,1214 ****
  	}
  	else
  	{
! 	    if (!PyBool_Check(val))
! 	    {
! 		PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed"));
! 		return -1;
! 	    }
! 
! 	    if (val == Py_True)
  		this->list->lv_lock = VAR_LOCKED;
  	    else
  		this->list->lv_lock = 0;
--- 1198,1204 ----
  	}
  	else
  	{
! 	    if (PyObject_IsTrue(val))
  		this->list->lv_lock = VAR_LOCKED;
  	    else
  		this->list->lv_lock = 0;
***************
*** 1484,1497 ****
  
      if (flags & SOPT_BOOL)
      {
! 	if (!PyBool_Check(valObject))
! 	{
! 	    PyErr_SetString(PyExc_ValueError, "Object must be boolean");
! 	    return -1;
! 	}
! 
! 	r = set_option_value_for(key, (valObject == Py_True), NULL, opt_flags,
! 				this->opt_type, this->from);
      }
      else if (flags & SOPT_NUM)
      {
--- 1474,1481 ----
  
      if (flags & SOPT_BOOL)
      {
! 	r = set_option_value_for(key, PyObject_IsTrue(valObject), NULL,
! 				opt_flags, this->opt_type, this->from);
      }
      else if (flags & SOPT_NUM)
      {
*** ../vim-7.3.947/src/if_python3.c	2013-05-15 14:39:47.000000000 +0200
--- src/if_python3.c	2013-05-15 14:42:21.000000000 +0200
***************
*** 156,161 ****
--- 156,162 ----
  # define PyMapping_Items py3_PyMapping_Items
  # define PyIter_Next py3_PyIter_Next
  # define PyObject_GetIter py3_PyObject_GetIter
+ # define PyObject_IsTrue py3_PyObject_IsTrue
  # define PyModule_GetDict py3_PyModule_GetDict
  #undef PyRun_SimpleString
  # define PyRun_SimpleString py3_PyRun_SimpleString
***************
*** 264,269 ****
--- 265,271 ----
  static PyObject* (*py3_PyDict_New)(void);
  static PyObject* (*py3_PyIter_Next)(PyObject *);
  static PyObject* (*py3_PyObject_GetIter)(PyObject *);
+ static int (*py3_PyObject_IsTrue)(PyObject *);
  static PyObject* (*py3_Py_BuildValue)(char *, ...);
  static int (*py3_PyType_Ready)(PyTypeObject *type);
  static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
***************
*** 392,397 ****
--- 394,400 ----
      {"PyMapping_Items", (PYTHON_PROC*)&py3_PyMapping_Items},
      {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
      {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
+     {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue},
      {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
      {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
      {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
*** ../vim-7.3.947/src/if_python.c	2013-05-15 14:39:47.000000000 +0200
--- src/if_python.c	2013-05-15 14:42:21.000000000 +0200
***************
*** 229,234 ****
--- 229,235 ----
  # define _Py_TrueStruct (*dll__Py_TrueStruct)
  # define PyObject_Init dll__PyObject_Init
  # define PyObject_GetIter dll_PyObject_GetIter
+ # define PyObject_IsTrue dll_PyObject_IsTrue
  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
  #  define PyType_IsSubtype dll_PyType_IsSubtype
  # endif
***************
*** 324,329 ****
--- 325,331 ----
  static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
  static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
  static PyObject* (*dll_PyObject_GetIter)(PyObject *);
+ static int (*dll_PyObject_IsTrue)(PyObject *);
  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
  static iternextfunc dll__PyObject_NextNotImplemented;
  # endif
***************
*** 459,464 ****
--- 461,467 ----
      {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
      {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
      {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter},
+     {"PyObject_IsTrue", (PYTHON_PROC*)&dll_PyObject_IsTrue},
  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
      {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
  # endif
***************
*** 787,793 ****
  	 * so the following does both: unlock GIL and save thread state in TLS
  	 * without deleting thread state
  	 */
! 	PyEval_SaveThread();
  
  	initialised = 1;
      }
--- 790,799 ----
  	 * so the following does both: unlock GIL and save thread state in TLS
  	 * without deleting thread state
  	 */
! #ifndef PY_CAN_RECURSE
! 	saved_python_thread =
! #endif
! 	    PyEval_SaveThread();
  
  	initialised = 1;
      }
*** ../vim-7.3.947/src/testdir/test86.in	2013-05-15 14:39:47.000000000 +0200
--- src/testdir/test86.in	2013-05-15 14:42:21.000000000 +0200
***************
*** 183,220 ****
  :   $put ='[0.0, 0.0]'
  :endif
  :let messages=[]
! :py <<EOF
  d=vim.bindeval('{}')
  m=vim.bindeval('messages')
! try:
!     d['abc']
! except Exception as e:
!     m.extend([e.__class__.__name__])
! 
! try:
!     d['abc']="\0"
! except Exception as e:
!     m.extend([e.__class__.__name__])
! 
! try:
!     d['abc']=vim
! except Exception as e:
!     m.extend([e.__class__.__name__])
! 
! try:
!     d['']=1
! except Exception as e:
!     m.extend([e.__class__.__name__])
! 
! try:
!     d['a\0b']=1
! except Exception as e:
!     m.extend([e.__class__.__name__])
! 
! try:
!     d[b'a\0b']=1
! except Exception as e:
!     m.extend([e.__class__.__name__])
  EOF
  :$put =messages
  :unlet messages
--- 183,203 ----
  :   $put ='[0.0, 0.0]'
  :endif
  :let messages=[]
! py <<EOF
  d=vim.bindeval('{}')
  m=vim.bindeval('messages')
! def em(expr, g=globals(), l=locals()):
!     try:
!         exec(expr, g, l)
!     except:
!         m.extend([sys.exc_type.__name__])
! 
! em('d["abc"]')
! em('d["abc"]="\\0"')
! em('d["abc"]=vim')
! em('d[""]=1')
! em('d["a\\0b"]=1')
! em('d[u"a\\0b"]=1')
  EOF
  :$put =messages
  :unlet messages
***************
*** 394,407 ****
  def e(s, g=globals(), l=locals()):
      try:
          exec(s, g, l)
!     except Exception as e:
!         vim.command('throw ' + repr(e.__class__.__name__))
  
  def ev(s, g=globals(), l=locals()):
      try:
          return eval(s, g, l)
!     except Exception as e:
!         vim.command('throw ' + repr(e.__class__.__name__))
          return 0
  EOF
  :function E(s)
--- 377,390 ----
  def e(s, g=globals(), l=locals()):
      try:
          exec(s, g, l)
!     except:
!         vim.command('throw ' + repr(sys.exc_type.__name__))
  
  def ev(s, g=globals(), l=locals()):
      try:
          return eval(s, g, l)
!     except:
!         vim.command('throw ' + repr(sys.exc_type.__name__))
          return 0
  EOF
  :function E(s)
*** ../vim-7.3.947/src/testdir/test86.ok	2013-05-15 14:39:47.000000000 +0200
--- src/testdir/test86.ok	2013-05-15 14:42:21.000000000 +0200
***************
*** 82,88 ****
  bar
  >>> paste
    p/gopts1: False
-   inv: 2! ValueError
    p/wopts1! KeyError
    inv: 2! KeyError
    wopts1! KeyError
--- 82,87 ----
***************
*** 224,230 ****
    wopts2! KeyError
    wopts3! KeyError
    p/bopts1: False
-   inv: 2! ValueError
    G: 0
    W: 1:0 2:1 3:0 4:1
    B: 1:0 2:1 3:0 4:1
--- 223,228 ----
***************
*** 280,286 ****
    wopts2! KeyError
    wopts3! KeyError
    p/bopts1: False
-   inv: 2! ValueError
    G: 0
    W: 1:0 2:1 3:0 4:1
    B: 1:0 2:1 3:0 4:1
--- 278,283 ----
*** ../vim-7.3.947/src/testdir/test87.ok	2013-05-15 14:39:47.000000000 +0200
--- src/testdir/test87.ok	2013-05-15 14:42:21.000000000 +0200
***************
*** 71,77 ****
  bar
  >>> paste
    p/gopts1: False
-   inv: 2! ValueError
    p/wopts1! KeyError
    inv: 2! KeyError
    wopts1! KeyError
--- 71,76 ----
***************
*** 213,219 ****
    wopts2! KeyError
    wopts3! KeyError
    p/bopts1: False
-   inv: 2! ValueError
    G: 0
    W: 1:0 2:1 3:0 4:1
    B: 1:0 2:1 3:0 4:1
--- 212,217 ----
***************
*** 269,275 ****
    wopts2! KeyError
    wopts3! KeyError
    p/bopts1: False
-   inv: 2! ValueError
    G: 0
    W: 1:0 2:1 3:0 4:1
    B: 1:0 2:1 3:0 4:1
--- 267,272 ----
*** ../vim-7.3.947/src/configure.in	2013-05-06 04:21:35.000000000 +0200
--- src/configure.in	2013-05-15 14:46:11.000000000 +0200
***************
*** 863,872 ****
  	    ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
      ]])
  
!     dnl -- it must be at least version 1.4
!     AC_MSG_CHECKING(Python is 1.4 or better)
      if ${vi_cv_path_python} -c \
! 	"import sys; sys.exit(${vi_cv_var_python_version} < 1.4)"
      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.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)
  
*** ../vim-7.3.947/src/auto/configure	2013-05-06 04:21:35.000000000 +0200
--- src/auto/configure	2013-05-15 14:46:28.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 1.4 or better" >&5
! $as_echo_n "checking Python is 1.4 or better... " >&6; }
      if ${vi_cv_path_python} -c \
! 	"import sys; sys.exit(${vi_cv_var_python_version} < 1.4)"
      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.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; }
*** ../vim-7.3.947/src/version.c	2013-05-15 14:39:47.000000000 +0200
--- src/version.c	2013-05-15 14:43:39.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     948,
  /**/

-- 
MARTHA'S WAY: Don't throw out all that leftover wine. Freeze into ice cubes
              for future use in casseroles and sauces.
MY WAY:       What leftover wine?

 /// 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    ///
