To: vim_dev@googlegroups.com
Subject: Patch 7.3.819
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.819
Problem:    Compiling without +eval and with Python isn't working.
Solution:   Add the eval feature when building with Python.
Files:	    src/if_py_both.h, src/feature.h, src/eval.c, src/ex_docmd.c,
	    src/normal.c, src/gui_gtk_x11.c


*** ../vim-7.3.818/src/if_py_both.h	2012-12-05 16:30:03.000000000 +0100
--- src/if_py_both.h	2013-02-14 19:22:59.000000000 +0100
***************
*** 310,316 ****
      return result;
  }
  
- #ifdef FEAT_EVAL
  /*
   * Function to translate a typval_T into a PyObject; this will recursively
   * translate lists/dictionaries into their Python equivalents.
--- 310,315 ----
***************
*** 425,436 ****
  
      return result;
  }
- #endif
  
      static PyObject *
  VimEval(PyObject *self UNUSED, PyObject *args UNUSED)
  {
- #ifdef FEAT_EVAL
      char	*expr;
      typval_T	*our_tv;
      PyObject	*result;
--- 424,433 ----
***************
*** 466,475 ****
      Py_END_ALLOW_THREADS
  
      return result;
- #else
-     PyErr_SetVim(_("expressions disabled at compile time"));
-     return NULL;
- #endif
  }
  
  static PyObject *ConvertToPyObject(typval_T *);
--- 463,468 ----
***************
*** 477,483 ****
      static PyObject *
  VimEvalPy(PyObject *self UNUSED, PyObject *args UNUSED)
  {
- #ifdef FEAT_EVAL
      char	*expr;
      typval_T	*our_tv;
      PyObject	*result;
--- 470,475 ----
***************
*** 506,515 ****
      Py_END_ALLOW_THREADS
  
      return result;
- #else
-     PyErr_SetVim(_("expressions disabled at compile time"));
-     return NULL;
- #endif
  }
  
      static PyObject *
--- 498,503 ----
***************
*** 946,952 ****
  }
  
      static PyObject *
! DictionaryListKeys(PyObject *self)
  {
      dict_T	*dict = ((DictionaryObject *)(self))->dict;
      long_u	todo = dict->dv_hashtab.ht_used;
--- 934,940 ----
  }
  
      static PyObject *
! DictionaryListKeys(PyObject *self UNUSED)
  {
      dict_T	*dict = ((DictionaryObject *)(self))->dict;
      long_u	todo = dict->dv_hashtab.ht_used;
***************
*** 2549,2555 ****
      return 0;
  }
  
- #ifdef FEAT_EVAL
  typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
  
      static int
--- 2537,2542 ----
***************
*** 2781,2784 ****
  	    return NULL;
      }
  }
- #endif
--- 2768,2770 ----
*** ../vim-7.3.818/src/feature.h	2013-01-23 13:40:54.000000000 +0100
--- src/feature.h	2013-02-14 19:25:33.000000000 +0100
***************
*** 392,397 ****
--- 392,404 ----
  #endif
  
  /*
+  * +python and +python3 require FEAT_EVAL.
+  */
+ #if !defined(FEAT_EVAL) && (defined(FEAT_PYTHON3) || defined(FEAT_PYTHON))
+ # define FEAT_EVAL
+ #endif
+ 
+ /*
   * +profile		Profiling for functions and scripts.
   */
  #if defined(FEAT_HUGE) \
*** ../vim-7.3.818/src/eval.c	2013-02-13 17:34:59.000000000 +0100
--- src/eval.c	2013-02-14 19:38:09.000000000 +0100
***************
*** 917,923 ****
--- 917,925 ----
      hash_clear(&compat_hashtab);
  
      free_scriptnames();
+ # if defined(FEAT_CMDL_COMPL)
      free_locales();
+ # endif
  
      /* global variables */
      vars_clear(&globvarht);
***************
*** 1561,1568 ****
  }
  
  
- #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
- 	|| defined(FEAT_COMPL_FUNC) || defined(PROTO)
  /*
   * Call some vimL function and return the result in "*rettv".
   * Uses argv[argc] for the function arguments.  Only Number and String
--- 1563,1568 ----
***************
*** 1640,1692 ****
      return ret;
  }
  
- # if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
  /*
!  * Call vimL function "func" and return the result as a string.
!  * Returns NULL when calling the function fails.
   * Uses argv[argc] for the function arguments.
   */
!     void *
! call_func_retstr(func, argc, argv, safe)
      char_u      *func;
      int		argc;
      char_u      **argv;
      int		safe;		/* use the sandbox */
  {
      typval_T	rettv;
!     char_u	*retval;
  
      /* All arguments are passed as strings, no conversion to number. */
      if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
! 	return NULL;
  
!     retval = vim_strsave(get_tv_string(&rettv));
      clear_tv(&rettv);
      return retval;
  }
- # endif
  
! # if defined(FEAT_COMPL_FUNC) || defined(PROTO)
  /*
!  * Call vimL function "func" and return the result as a number.
!  * Returns -1 when calling the function fails.
   * Uses argv[argc] for the function arguments.
   */
!     long
! call_func_retnr(func, argc, argv, safe)
      char_u      *func;
      int		argc;
      char_u      **argv;
      int		safe;		/* use the sandbox */
  {
      typval_T	rettv;
!     long	retval;
  
      /* All arguments are passed as strings, no conversion to number. */
      if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
! 	return -1;
  
!     retval = get_tv_number_chk(&rettv, NULL);
      clear_tv(&rettv);
      return retval;
  }
--- 1640,1693 ----
      return ret;
  }
  
  /*
!  * Call vimL function "func" and return the result as a number.
!  * Returns -1 when calling the function fails.
   * Uses argv[argc] for the function arguments.
   */
!     long
! call_func_retnr(func, argc, argv, safe)
      char_u      *func;
      int		argc;
      char_u      **argv;
      int		safe;		/* use the sandbox */
  {
      typval_T	rettv;
!     long	retval;
  
      /* All arguments are passed as strings, no conversion to number. */
      if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
! 	return -1;
  
!     retval = get_tv_number_chk(&rettv, NULL);
      clear_tv(&rettv);
      return retval;
  }
  
! #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
! 	|| defined(FEAT_COMPL_FUNC) || defined(PROTO)
! 
! # if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
  /*
!  * Call vimL function "func" and return the result as a string.
!  * Returns NULL when calling the function fails.
   * Uses argv[argc] for the function arguments.
   */
!     void *
! call_func_retstr(func, argc, argv, safe)
      char_u      *func;
      int		argc;
      char_u      **argv;
      int		safe;		/* use the sandbox */
  {
      typval_T	rettv;
!     char_u	*retval;
  
      /* All arguments are passed as strings, no conversion to number. */
      if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
! 	return NULL;
  
!     retval = vim_strsave(get_tv_string(&rettv));
      clear_tv(&rettv);
      return retval;
  }
***************
*** 1720,1726 ****
  }
  #endif
  
- 
  /*
   * Save the current function call pointer, and set it to NULL.
   * Used when executing autocommands and for ":source".
--- 1721,1726 ----
***************
*** 9330,9336 ****
   */
      static void
  f_cindent(argvars, rettv)
!     typval_T	*argvars;
      typval_T	*rettv;
  {
  #ifdef FEAT_CINDENT
--- 9330,9336 ----
   */
      static void
  f_cindent(argvars, rettv)
!     typval_T	*argvars UNUSED;
      typval_T	*rettv;
  {
  #ifdef FEAT_CINDENT
***************
*** 10379,10387 ****
  
      static void
  findfilendir(argvars, rettv, find_what)
!     typval_T	*argvars;
      typval_T	*rettv;
!     int		find_what;
  {
  #ifdef FEAT_SEARCHPATH
      char_u	*fname;
--- 10379,10387 ----
  
      static void
  findfilendir(argvars, rettv, find_what)
!     typval_T	*argvars UNUSED;
      typval_T	*rettv;
!     int		find_what UNUSED;
  {
  #ifdef FEAT_SEARCHPATH
      char_u	*fname;
***************
*** 10751,10759 ****
   */
      static void
  foldclosed_both(argvars, rettv, end)
!     typval_T	*argvars;
      typval_T	*rettv;
!     int		end;
  {
  #ifdef FEAT_FOLDING
      linenr_T	lnum;
--- 10751,10759 ----
   */
      static void
  foldclosed_both(argvars, rettv, end)
!     typval_T	*argvars UNUSED;
      typval_T	*rettv;
!     int		end UNUSED;
  {
  #ifdef FEAT_FOLDING
      linenr_T	lnum;
***************
*** 10802,10809 ****
   */
      static void
  f_foldlevel(argvars, rettv)
!     typval_T	*argvars;
!     typval_T	*rettv;
  {
  #ifdef FEAT_FOLDING
      linenr_T	lnum;
--- 10802,10809 ----
   */
      static void
  f_foldlevel(argvars, rettv)
!     typval_T	*argvars UNUSED;
!     typval_T	*rettv UNUSED;
  {
  #ifdef FEAT_FOLDING
      linenr_T	lnum;
***************
*** 11583,11589 ****
      static void
  f_getmatches(argvars, rettv)
      typval_T	*argvars UNUSED;
!     typval_T	*rettv;
  {
  #ifdef FEAT_SEARCH_EXTRA
      dict_T	*dict;
--- 11583,11589 ----
      static void
  f_getmatches(argvars, rettv)
      typval_T	*argvars UNUSED;
!     typval_T	*rettv UNUSED;
  {
  #ifdef FEAT_SEARCH_EXTRA
      dict_T	*dict;
***************
*** 13589,13595 ****
   */
      static void
  f_lispindent(argvars, rettv)
!     typval_T	*argvars;
      typval_T	*rettv;
  {
  #ifdef FEAT_LISP
--- 13589,13595 ----
   */
      static void
  f_lispindent(argvars, rettv)
!     typval_T	*argvars UNUSED;
      typval_T	*rettv;
  {
  #ifdef FEAT_LISP
***************
*** 13983,13990 ****
   */
      static void
  f_matchadd(argvars, rettv)
!     typval_T	*argvars;
!     typval_T	*rettv;
  {
  #ifdef FEAT_SEARCH_EXTRA
      char_u	buf[NUMBUFLEN];
--- 13983,13990 ----
   */
      static void
  f_matchadd(argvars, rettv)
!     typval_T	*argvars UNUSED;
!     typval_T	*rettv UNUSED;
  {
  #ifdef FEAT_SEARCH_EXTRA
      char_u	buf[NUMBUFLEN];
***************
*** 14021,14027 ****
   */
      static void
  f_matcharg(argvars, rettv)
!     typval_T	*argvars;
      typval_T	*rettv;
  {
      if (rettv_list_alloc(rettv) == OK)
--- 14021,14027 ----
   */
      static void
  f_matcharg(argvars, rettv)
!     typval_T	*argvars UNUSED;
      typval_T	*rettv;
  {
      if (rettv_list_alloc(rettv) == OK)
***************
*** 14053,14060 ****
   */
      static void
  f_matchdelete(argvars, rettv)
!     typval_T	*argvars;
!     typval_T	*rettv;
  {
  #ifdef FEAT_SEARCH_EXTRA
      rettv->vval.v_number = match_delete(curwin,
--- 14053,14060 ----
   */
      static void
  f_matchdelete(argvars, rettv)
!     typval_T	*argvars UNUSED;
!     typval_T	*rettv UNUSED;
  {
  #ifdef FEAT_SEARCH_EXTRA
      rettv->vval.v_number = match_delete(curwin,
***************
*** 14871,14878 ****
   */
      static void
  f_reltime(argvars, rettv)
!     typval_T	*argvars;
!     typval_T	*rettv;
  {
  #ifdef FEAT_RELTIME
      proftime_T	res;
--- 14871,14878 ----
   */
      static void
  f_reltime(argvars, rettv)
!     typval_T	*argvars UNUSED;
!     typval_T	*rettv UNUSED;
  {
  #ifdef FEAT_RELTIME
      proftime_T	res;
***************
*** 14920,14926 ****
   */
      static void
  f_reltimestr(argvars, rettv)
!     typval_T	*argvars;
      typval_T	*rettv;
  {
  #ifdef FEAT_RELTIME
--- 14920,14926 ----
   */
      static void
  f_reltimestr(argvars, rettv)
!     typval_T	*argvars UNUSED;
      typval_T	*rettv;
  {
  #ifdef FEAT_RELTIME
***************
*** 15965,15971 ****
      int		flags;	    /* SP_SETPCMARK and other SP_ values */
      pos_T	*match_pos;
      linenr_T	lnum_stop;  /* stop at this line if not zero */
!     long	time_limit; /* stop after this many msec */
  {
      char_u	*save_cpo;
      char_u	*pat, *pat2 = NULL, *pat3 = NULL;
--- 15965,15971 ----
      int		flags;	    /* SP_SETPCMARK and other SP_ values */
      pos_T	*match_pos;
      linenr_T	lnum_stop;  /* stop at this line if not zero */
!     long	time_limit UNUSED; /* stop after this many msec */
  {
      char_u	*save_cpo;
      char_u	*pat, *pat2 = NULL, *pat3 = NULL;
***************
*** 16390,16397 ****
   */
      static void
  f_setmatches(argvars, rettv)
!     typval_T	*argvars;
!     typval_T	*rettv;
  {
  #ifdef FEAT_SEARCH_EXTRA
      list_T	*l;
--- 16390,16397 ----
   */
      static void
  f_setmatches(argvars, rettv)
!     typval_T	*argvars UNUSED;
!     typval_T	*rettv UNUSED;
  {
  #ifdef FEAT_SEARCH_EXTRA
      list_T	*l;
***************
*** 18463,18469 ****
   */
      static void
  f_undofile(argvars, rettv)
!     typval_T	*argvars;
      typval_T	*rettv;
  {
      rettv->v_type = VAR_STRING;
--- 18463,18469 ----
   */
      static void
  f_undofile(argvars, rettv)
!     typval_T	*argvars UNUSED;
      typval_T	*rettv;
  {
      rettv->v_type = VAR_STRING;
*** ../vim-7.3.818/src/ex_docmd.c	2012-12-05 19:13:11.000000000 +0100
--- src/ex_docmd.c	2013-02-14 20:50:56.000000000 +0100
***************
*** 1734,1739 ****
--- 1734,1741 ----
  #ifdef FEAT_EVAL
  	    /* avoid that a function call in 'statusline' does this */
  	    && !getline_equal(fgetline, cookie, get_func_line)
+ #endif
+ #ifdef FEAT_AUTOCMD
  	    /* avoid that an autocommand, e.g. QuitPre, does this */
  	    && !getline_equal(fgetline, cookie, getnextac)
  #endif
***************
*** 5375,5381 ****
--- 5377,5385 ----
  #endif
      return FAIL;
  }
+ #endif
  
+ #if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
  /*
   * List of names for completion for ":command" with the EXPAND_ flag.
   * Must be alphabetical for completion.
***************
*** 5430,5436 ****
--- 5434,5442 ----
      {EXPAND_USER_VARS, "var"},
      {0, NULL}
  };
+ #endif
  
+ #if defined(FEAT_USR_CMDS) || defined(PROTO)
      static void
  uc_list(name, name_len)
      char_u	*name;
***************
*** 6375,6384 ****
      int		vallen;
      int		*complp;
      long	*argt;
!     char_u	**compl_arg;
  {
      char_u	*arg = NULL;
      size_t	arglen = 0;
      int		i;
      int		valend = vallen;
  
--- 6381,6392 ----
      int		vallen;
      int		*complp;
      long	*argt;
!     char_u	**compl_arg UNUSED;
  {
      char_u	*arg = NULL;
+ # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
      size_t	arglen = 0;
+ # endif
      int		i;
      int		valend = vallen;
  
***************
*** 6388,6394 ****
--- 6396,6404 ----
  	if (value[i] == ',')
  	{
  	    arg = &value[i + 1];
+ # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  	    arglen = vallen - i - 1;
+ # endif
  	    valend = i;
  	    break;
  	}
*** ../vim-7.3.818/src/normal.c	2013-01-24 21:00:15.000000000 +0100
--- src/normal.c	2013-02-14 19:33:36.000000000 +0100
***************
*** 2292,2298 ****
--- 2292,2300 ----
  {
  #ifdef FEAT_EVAL
      char_u	*(argv[1]);
+ # ifdef FEAT_VIRTUALEDIT
      int		save_virtual_op = virtual_op;
+ # endif
  
      if (*p_opfunc == NUL)
  	EMSG(_("E774: 'operatorfunc' is empty"));
***************
*** 2312,2324 ****
--- 2314,2330 ----
  	else
  	    argv[0] = (char_u *)"char";
  
+ # ifdef FEAT_VIRTUALEDIT
  	/* Reset virtual_op so that 'virtualedit' can be changed in the
  	 * function. */
  	virtual_op = MAYBE;
+ # endif
  
  	(void)call_func_retnr(p_opfunc, 1, argv, FALSE);
  
+ # ifdef FEAT_VIRTUALEDIT
  	virtual_op = save_virtual_op;
+ # endif
      }
  #else
      EMSG(_("E775: Eval feature not available"));
*** ../vim-7.3.818/src/gui_gtk_x11.c	2013-01-23 16:00:05.000000000 +0100
--- src/gui_gtk_x11.c	2013-02-14 19:38:42.000000000 +0100
***************
*** 5164,5171 ****
      return FAIL;
  }
  
! #if defined(FEAT_TITLE) \
! 	|| defined(PROTO)
  /*
   * Return the text window-id and display.  Only required for X-based GUI's
   */
--- 5164,5170 ----
      return FAIL;
  }
  
! #if defined(FEAT_TITLE) || defined(FEAT_EVAL) || defined(PROTO)
  /*
   * Return the text window-id and display.  Only required for X-based GUI's
   */
*** ../vim-7.3.818/src/version.c	2013-02-14 20:58:30.000000000 +0100
--- src/version.c	2013-02-14 22:09:41.000000000 +0100
***************
*** 727,728 ****
--- 727,730 ----
  {   /* Add new patch number below this line */
+ /**/
+     819,
  /**/

-- 
(letter from Mark to Mike, about the film's probable certificate)
      For an 'A' we would have to: Lose as many shits as possible; Take Jesus
      Christ out, if possible; Loose "I fart in your general direction"; Lose
      "the oral sex"; Lose "oh, fuck off"; Lose "We make castanets out of your
      testicles"
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

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