components/vim/vim72-patches/7.2.149
changeset 379 c6a17bba1da3
parent 378 f0b61ed1d10d
child 380 e92b3b4a1c66
equal deleted inserted replaced
378:f0b61ed1d10d 379:c6a17bba1da3
     1 To: [email protected]
       
     2 Subject: Patch 7.2.149
       
     3 Fcc: outbox
       
     4 From: Bram Moolenaar <[email protected]>
       
     5 Mime-Version: 1.0
       
     6 Content-Type: text/plain; charset=ISO-8859-1
       
     7 Content-Transfer-Encoding: 8bit
       
     8 ------------
       
     9 
       
    10 Patch 7.2.149
       
    11 Problem:    Using return value of function that doesn't return a value results
       
    12 	    in reading uninitialized memory.
       
    13 Solution:   Set the default to return zero.  Make cursor() return -1 on
       
    14 	    failure.  Let complete() return an empty string in case of an
       
    15 	    error.  (partly by Dominique Pelle)
       
    16 Files:	    runtime/doc/eval.txt, src/eval.c
       
    17 
       
    18 
       
    19 *** ../vim-7.2.148/runtime/doc/eval.txt	Tue Dec  9 10:56:50 2008
       
    20 --- runtime/doc/eval.txt	Sun Mar 22 14:28:49 2009
       
    21 ***************
       
    22 *** 2414,2419 ****
       
    23 --- 2419,2425 ----
       
    24   		When 'virtualedit' is used {off} specifies the offset in
       
    25   		screen columns from the start of the character.  E.g., a
       
    26   		position within a <Tab> or after the last character.
       
    27 + 		Returns 0 when the position could be set, -1 otherwise.
       
    28   
       
    29   
       
    30   deepcopy({expr}[, {noref}])				*deepcopy()* *E698*
       
    31 ***************
       
    32 *** 4516,4521 ****
       
    33 --- 4526,4532 ----
       
    34   		should also work to move files across file systems.  The
       
    35   		result is a Number, which is 0 if the file was renamed
       
    36   		successfully, and non-zero when the renaming failed.
       
    37 + 		NOTE: If {to} exists it is overwritten without warning.
       
    38   		This function is not available in the |sandbox|.
       
    39   
       
    40   repeat({expr}, {count})					*repeat()*
       
    41 *** ../vim-7.2.148/src/eval.c	Wed Feb  4 16:25:53 2009
       
    42 --- src/eval.c	Sun Mar 22 20:45:18 2009
       
    43 ***************
       
    44 *** 1285,1291 ****
       
    45 --- 1285,1293 ----
       
    46       typval_T	tv;
       
    47       char_u	*retval;
       
    48       garray_T	ga;
       
    49 + #ifdef FEAT_FLOAT
       
    50       char_u	numbuf[NUMBUFLEN];
       
    51 + #endif
       
    52   
       
    53       if (eval0(arg, &tv, nextcmd, TRUE) == FAIL)
       
    54   	retval = NULL;
       
    55 ***************
       
    56 *** 8018,8024 ****
       
    57       /* execute the function if no errors detected and executing */
       
    58       if (evaluate && error == ERROR_NONE)
       
    59       {
       
    60 ! 	rettv->v_type = VAR_NUMBER;	/* default is number rettv */
       
    61   	error = ERROR_UNKNOWN;
       
    62   
       
    63   	if (!builtin_function(fname))
       
    64 --- 8020,8027 ----
       
    65       /* execute the function if no errors detected and executing */
       
    66       if (evaluate && error == ERROR_NONE)
       
    67       {
       
    68 ! 	rettv->v_type = VAR_NUMBER;	/* default rettv is number zero */
       
    69 ! 	rettv->vval.v_number = 0;
       
    70   	error = ERROR_UNKNOWN;
       
    71   
       
    72   	if (!builtin_function(fname))
       
    73 ***************
       
    74 *** 8268,8274 ****
       
    75   		return;
       
    76   	    li = l->lv_first;
       
    77   	}
       
    78 - 	rettv->vval.v_number = 0;	/* Default: Success */
       
    79   	for (;;)
       
    80   	{
       
    81   	    if (l == NULL)
       
    82 --- 8271,8276 ----
       
    83 ***************
       
    84 *** 8728,8734 ****
       
    85       int		dummy;
       
    86       dict_T	*selfdict = NULL;
       
    87   
       
    88 -     rettv->vval.v_number = 0;
       
    89       if (argvars[1].v_type != VAR_LIST)
       
    90       {
       
    91   	EMSG(_(e_listreq));
       
    92 --- 8730,8735 ----
       
    93 ***************
       
    94 *** 9036,9048 ****
       
    95       if (buttons == NULL || *buttons == NUL)
       
    96   	buttons = (char_u *)_("&Ok");
       
    97   
       
    98 !     if (error)
       
    99 ! 	rettv->vval.v_number = 0;
       
   100 !     else
       
   101   	rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
       
   102   								   def, NULL);
       
   103 - #else
       
   104 -     rettv->vval.v_number = 0;
       
   105   #endif
       
   106   }
       
   107   
       
   108 --- 9037,9045 ----
       
   109       if (buttons == NULL || *buttons == NUL)
       
   110   	buttons = (char_u *)_("&Ok");
       
   111   
       
   112 !     if (!error)
       
   113   	rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
       
   114   								   def, NULL);
       
   115   #endif
       
   116   }
       
   117   
       
   118 ***************
       
   119 *** 9181,9195 ****
       
   120       }
       
   121   
       
   122       rettv->vval.v_number = cs_connection(num, dbpath, prepend);
       
   123 - #else
       
   124 -     rettv->vval.v_number = 0;
       
   125   #endif
       
   126   }
       
   127   
       
   128   /*
       
   129    * "cursor(lnum, col)" function
       
   130    *
       
   131 !  * Moves the cursor to the specified line and column
       
   132    */
       
   133   /*ARGSUSED*/
       
   134       static void
       
   135 --- 9178,9191 ----
       
   136       }
       
   137   
       
   138       rettv->vval.v_number = cs_connection(num, dbpath, prepend);
       
   139   #endif
       
   140   }
       
   141   
       
   142   /*
       
   143    * "cursor(lnum, col)" function
       
   144    *
       
   145 !  * Moves the cursor to the specified line and column.
       
   146 !  * Returns 0 when the position could be set, -1 otherwise.
       
   147    */
       
   148   /*ARGSUSED*/
       
   149       static void
       
   150 ***************
       
   151 *** 9202,9207 ****
       
   152 --- 9198,9204 ----
       
   153       long	coladd = 0;
       
   154   #endif
       
   155   
       
   156 +     rettv->vval.v_number = -1;
       
   157       if (argvars[1].v_type == VAR_UNKNOWN)
       
   158       {
       
   159   	pos_T	    pos;
       
   160 ***************
       
   161 *** 9246,9251 ****
       
   162 --- 9243,9249 ----
       
   163   #endif
       
   164   
       
   165       curwin->w_set_curswant = TRUE;
       
   166 +     rettv->vval.v_number = 0;
       
   167   }
       
   168   
       
   169   /*
       
   170 ***************
       
   171 *** 9291,9298 ****
       
   172   {
       
   173   #ifdef FEAT_AUTOCMD
       
   174       rettv->vval.v_number = did_filetype;
       
   175 - #else
       
   176 -     rettv->vval.v_number = 0;
       
   177   #endif
       
   178   }
       
   179   
       
   180 --- 9289,9294 ----
       
   181 ***************
       
   182 *** 9605,9611 ****
       
   183       typval_T	*argvars;
       
   184       typval_T	*rettv;
       
   185   {
       
   186 -     rettv->vval.v_number = 0;
       
   187       if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
       
   188       {
       
   189   	list_T		*l1, *l2;
       
   190 --- 9601,9606 ----
       
   191 ***************
       
   192 *** 9733,9739 ****
       
   193       if (check_secure())
       
   194   	return;
       
   195   
       
   196 -     rettv->vval.v_number = 0;
       
   197       keys = get_tv_string(&argvars[0]);
       
   198       if (*keys != NUL)
       
   199       {
       
   200 --- 9728,9733 ----
       
   201 ***************
       
   202 *** 9901,9907 ****
       
   203       char_u	*ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
       
   204       int		save_did_emsg;
       
   205   
       
   206 -     rettv->vval.v_number = 0;
       
   207       if (argvars[0].v_type == VAR_LIST)
       
   208       {
       
   209   	if ((l = argvars[0].vval.v_list) == NULL
       
   210 --- 9895,9900 ----
       
   211 ***************
       
   212 *** 10084,10091 ****
       
   213   	else
       
   214   	    rettv->vval.v_number = (varnumber_T)f;
       
   215       }
       
   216 -     else
       
   217 - 	rettv->vval.v_number = 0;
       
   218   }
       
   219   
       
   220   /*
       
   221 --- 10077,10082 ----
       
   222 ***************
       
   223 *** 10219,10227 ****
       
   224       lnum = get_tv_lnum(argvars);
       
   225       if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count)
       
   226   	rettv->vval.v_number = foldLevel(lnum);
       
   227 -     else
       
   228   #endif
       
   229 - 	rettv->vval.v_number = 0;
       
   230   }
       
   231   
       
   232   /*
       
   233 --- 10210,10216 ----
       
   234 ***************
       
   235 *** 10337,10343 ****
       
   236       typval_T	*argvars;
       
   237       typval_T	*rettv;
       
   238   {
       
   239 -     rettv->vval.v_number = 0;
       
   240   #ifdef FEAT_GUI
       
   241       if (gui.in_use)
       
   242   	gui_mch_set_foreground();
       
   243 --- 10326,10331 ----
       
   244 ***************
       
   245 *** 10359,10365 ****
       
   246   {
       
   247       char_u	*s;
       
   248   
       
   249 -     rettv->vval.v_number = 0;
       
   250       s = get_tv_string(&argvars[0]);
       
   251       if (s == NULL || *s == NUL || VIM_ISDIGIT(*s))
       
   252   	EMSG2(_(e_invarg2), s);
       
   253 --- 10347,10352 ----
       
   254 ***************
       
   255 *** 10429,10437 ****
       
   256   
       
   257       if (tv == NULL)
       
   258       {
       
   259 ! 	if (argvars[2].v_type == VAR_UNKNOWN)
       
   260 ! 	    rettv->vval.v_number = 0;
       
   261 ! 	else
       
   262   	    copy_tv(&argvars[2], rettv);
       
   263       }
       
   264       else
       
   265 --- 10416,10422 ----
       
   266   
       
   267       if (tv == NULL)
       
   268       {
       
   269 ! 	if (argvars[2].v_type != VAR_UNKNOWN)
       
   270   	    copy_tv(&argvars[2], rettv);
       
   271       }
       
   272       else
       
   273 ***************
       
   274 *** 10456,10468 ****
       
   275   {
       
   276       char_u	*p;
       
   277   
       
   278 !     if (retlist)
       
   279 !     {
       
   280 ! 	if (rettv_list_alloc(rettv) == FAIL)
       
   281 ! 	    return;
       
   282 !     }
       
   283 !     else
       
   284 ! 	rettv->vval.v_number = 0;
       
   285   
       
   286       if (buf == NULL || buf->b_ml.ml_mfp == NULL || start < 0)
       
   287   	return;
       
   288 --- 10441,10448 ----
       
   289   {
       
   290       char_u	*p;
       
   291   
       
   292 !     if (retlist && rettv_list_alloc(rettv) == FAIL)
       
   293 ! 	return;
       
   294   
       
   295       if (buf == NULL || buf->b_ml.ml_mfp == NULL || start < 0)
       
   296   	return;
       
   297 ***************
       
   298 *** 11009,11016 ****
       
   299       dict_T	*dict;
       
   300       matchitem_T	*cur = curwin->w_match_head;
       
   301   
       
   302 -     rettv->vval.v_number = 0;
       
   303 - 
       
   304       if (rettv_list_alloc(rettv) == OK)
       
   305       {
       
   306   	while (cur != NULL)
       
   307 --- 10989,10994 ----
       
   308 ***************
       
   309 *** 11089,11095 ****
       
   310       win_T	*wp;
       
   311   #endif
       
   312   
       
   313 -     rettv->vval.v_number = 0;
       
   314   #ifdef FEAT_QUICKFIX
       
   315       if (rettv_list_alloc(rettv) == OK)
       
   316       {
       
   317 --- 11067,11072 ----
       
   318 ***************
       
   319 *** 11935,11941 ****
       
   320       typval_T	*argvars;
       
   321       typval_T	*rettv;
       
   322   {
       
   323 -     rettv->vval.v_number = 0;
       
   324       if (argvars[0].v_type != VAR_DICT)
       
   325       {
       
   326   	EMSG(_(e_dictreq));
       
   327 --- 11912,11917 ----
       
   328 ***************
       
   329 *** 12052,12059 ****
       
   330   	n = del_history_entry(get_histtype(str),
       
   331   				      get_tv_string_buf(&argvars[1], buf));
       
   332       rettv->vval.v_number = n;
       
   333 - #else
       
   334 -     rettv->vval.v_number = 0;
       
   335   #endif
       
   336   }
       
   337   
       
   338 --- 12028,12033 ----
       
   339 ***************
       
   340 *** 12415,12421 ****
       
   341       int		selected;
       
   342       int		mouse_used;
       
   343   
       
   344 -     rettv->vval.v_number = 0;
       
   345   #ifdef NO_CONSOLE_INPUT
       
   346       /* While starting up, there is no place to enter text. */
       
   347       if (no_console_input())
       
   348 --- 12389,12394 ----
       
   349 ***************
       
   350 *** 12464,12470 ****
       
   351   	--ga_userinput.ga_len;
       
   352   	restore_typeahead((tasave_T *)(ga_userinput.ga_data)
       
   353   						       + ga_userinput.ga_len);
       
   354 ! 	rettv->vval.v_number = 0; /* OK */
       
   355       }
       
   356       else if (p_verbose > 1)
       
   357       {
       
   358 --- 12437,12443 ----
       
   359   	--ga_userinput.ga_len;
       
   360   	restore_typeahead((tasave_T *)(ga_userinput.ga_data)
       
   361   						       + ga_userinput.ga_len);
       
   362 ! 	/* default return is zero == OK */
       
   363       }
       
   364       else if (p_verbose > 1)
       
   365       {
       
   366 ***************
       
   367 *** 12488,12494 ****
       
   368   	save_typeahead((tasave_T *)(ga_userinput.ga_data)
       
   369   						       + ga_userinput.ga_len);
       
   370   	++ga_userinput.ga_len;
       
   371 ! 	rettv->vval.v_number = 0; /* OK */
       
   372       }
       
   373       else
       
   374   	rettv->vval.v_number = 1; /* Failed */
       
   375 --- 12461,12467 ----
       
   376   	save_typeahead((tasave_T *)(ga_userinput.ga_data)
       
   377   						       + ga_userinput.ga_len);
       
   378   	++ga_userinput.ga_len;
       
   379 ! 	/* default return is zero == OK */
       
   380       }
       
   381       else
       
   382   	rettv->vval.v_number = 1; /* Failed */
       
   383 ***************
       
   384 *** 12522,12528 ****
       
   385       list_T	*l;
       
   386       int		error = FALSE;
       
   387   
       
   388 -     rettv->vval.v_number = 0;
       
   389       if (argvars[0].v_type != VAR_LIST)
       
   390   	EMSG2(_(e_listarg), "insert()");
       
   391       else if ((l = argvars[0].vval.v_list) != NULL
       
   392 --- 12495,12500 ----
       
   393 ***************
       
   394 *** 12641,12647 ****
       
   395       dict_T	*d;
       
   396       int		todo;
       
   397   
       
   398 -     rettv->vval.v_number = 0;
       
   399       if (argvars[0].v_type != VAR_DICT)
       
   400       {
       
   401   	EMSG(_(e_dictreq));
       
   402 --- 12613,12618 ----
       
   403 ***************
       
   404 *** 12729,12735 ****
       
   405       garray_T	ga;
       
   406       char_u	*sep;
       
   407   
       
   408 -     rettv->vval.v_number = 0;
       
   409       if (argvars[0].v_type != VAR_LIST)
       
   410       {
       
   411   	EMSG(_(e_listreq));
       
   412 --- 12700,12705 ----
       
   413 ***************
       
   414 *** 12827,12835 ****
       
   415   #endif
       
   416   
       
   417       rettv->v_type = type;
       
   418 !     if (type == VAR_NUMBER)
       
   419 ! 	rettv->vval.v_number = 0;
       
   420 !     else
       
   421   	rettv->vval.v_string = NULL;
       
   422   
       
   423       if (check_restricted() || check_secure())
       
   424 --- 12797,12803 ----
       
   425   #endif
       
   426   
       
   427       rettv->v_type = type;
       
   428 !     if (type != VAR_NUMBER)
       
   429   	rettv->vval.v_string = NULL;
       
   430   
       
   431       if (check_restricted() || check_secure())
       
   432 ***************
       
   433 *** 13770,13776 ****
       
   434       typval_T	*argvars;
       
   435       typval_T	*rettv;
       
   436   {
       
   437 -     rettv->vval.v_number = 0;
       
   438   #ifdef FEAT_INS_EXPAND
       
   439       if (pum_visible())
       
   440   	rettv->vval.v_number = 1;
       
   441 --- 13738,13743 ----
       
   442 ***************
       
   443 *** 13804,13810 ****
       
   444   	    stride = get_tv_number_chk(&argvars[2], &error);
       
   445       }
       
   446   
       
   447 -     rettv->vval.v_number = 0;
       
   448       if (error)
       
   449   	return;		/* type error; errmsg already given */
       
   450       if (stride == 0)
       
   451 --- 13771,13776 ----
       
   452 ***************
       
   453 *** 14193,14199 ****
       
   454       typval_T	*argvars;
       
   455       typval_T	*rettv;
       
   456   {
       
   457 -     rettv->vval.v_number = 0;
       
   458   #ifdef FEAT_CLIENTSERVER
       
   459   # ifdef WIN32
       
   460       /* On Win32 it's done in this application. */
       
   461 --- 14159,14164 ----
       
   462 ***************
       
   463 *** 14249,14255 ****
       
   464   	rettv->vval.v_number = (s != NULL);
       
   465       }
       
   466   # else
       
   467 -     rettv->vval.v_number = 0;
       
   468       if (check_connection() == FAIL)
       
   469   	return;
       
   470   
       
   471 --- 14214,14219 ----
       
   472 ***************
       
   473 *** 14338,14344 ****
       
   474       dict_T	*d;
       
   475       dictitem_T	*di;
       
   476   
       
   477 -     rettv->vval.v_number = 0;
       
   478       if (argvars[0].v_type == VAR_DICT)
       
   479       {
       
   480   	if (argvars[2].v_type != VAR_UNKNOWN)
       
   481 --- 14302,14307 ----
       
   482 ***************
       
   483 *** 14696,14702 ****
       
   484       list_T	*l;
       
   485       listitem_T	*li, *ni;
       
   486   
       
   487 -     rettv->vval.v_number = 0;
       
   488       if (argvars[0].v_type != VAR_LIST)
       
   489   	EMSG2(_(e_listarg), "reverse()");
       
   490       else if ((l = argvars[0].vval.v_list) != NULL
       
   491 --- 14659,14664 ----
       
   492 ***************
       
   493 *** 15048,15055 ****
       
   494       int		lnum = 0;
       
   495       int		col = 0;
       
   496   
       
   497 -     rettv->vval.v_number = 0;
       
   498 - 
       
   499       if (rettv_list_alloc(rettv) == FAIL)
       
   500   	return;
       
   501   
       
   502 --- 15010,15015 ----
       
   503 ***************
       
   504 *** 15236,15243 ****
       
   505       int		n;
       
   506       int		flags = 0;
       
   507   
       
   508 -     rettv->vval.v_number = 0;
       
   509 - 
       
   510       if (rettv_list_alloc(rettv) == FAIL)
       
   511   	return;
       
   512   
       
   513 --- 15196,15201 ----
       
   514 ***************
       
   515 *** 15323,15330 ****
       
   516       typval_T	*varp;
       
   517       char_u	nbuf[NUMBUFLEN];
       
   518   
       
   519 -     rettv->vval.v_number = 0;
       
   520 - 
       
   521       if (check_restricted() || check_secure())
       
   522   	return;
       
   523       (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
       
   524 --- 15281,15286 ----
       
   525 ***************
       
   526 *** 15404,15410 ****
       
   527       else
       
   528   	line = get_tv_string_chk(&argvars[1]);
       
   529   
       
   530 !     rettv->vval.v_number = 0;		/* OK */
       
   531       for (;;)
       
   532       {
       
   533   	if (l != NULL)
       
   534 --- 15360,15366 ----
       
   535       else
       
   536   	line = get_tv_string_chk(&argvars[1]);
       
   537   
       
   538 !     /* default result is zero == OK */
       
   539       for (;;)
       
   540       {
       
   541   	if (l != NULL)
       
   542 ***************
       
   543 *** 15717,15722 ****
       
   544 --- 15673,15679 ----
       
   545   /*
       
   546    * "setwinvar()" and "settabwinvar()" functions
       
   547    */
       
   548 + /*ARGSUSED*/
       
   549       static void
       
   550   setwinvar(argvars, rettv, off)
       
   551       typval_T	*argvars;
       
   552 ***************
       
   553 *** 15733,15740 ****
       
   554       char_u	nbuf[NUMBUFLEN];
       
   555       tabpage_T	*tp;
       
   556   
       
   557 -     rettv->vval.v_number = 0;
       
   558 - 
       
   559       if (check_restricted() || check_secure())
       
   560   	return;
       
   561   
       
   562 --- 15690,15695 ----
       
   563 ***************
       
   564 *** 15947,15953 ****
       
   565       long	len;
       
   566       long	i;
       
   567   
       
   568 -     rettv->vval.v_number = 0;
       
   569       if (argvars[0].v_type != VAR_LIST)
       
   570   	EMSG2(_(e_listarg), "sort()");
       
   571       else
       
   572 --- 15902,15907 ----
       
   573 ***************
       
   574 *** 16870,16878 ****
       
   575       typval_T	*argvars;
       
   576       typval_T	*rettv;
       
   577   {
       
   578 ! #ifndef FEAT_WINDOWS
       
   579 !     rettv->vval.v_number = 0;
       
   580 ! #else
       
   581       tabpage_T	*tp;
       
   582       win_T	*wp = NULL;
       
   583   
       
   584 --- 16824,16830 ----
       
   585       typval_T	*argvars;
       
   586       typval_T	*rettv;
       
   587   {
       
   588 ! #ifdef FEAT_WINDOWS
       
   589       tabpage_T	*tp;
       
   590       win_T	*wp = NULL;
       
   591   
       
   592 ***************
       
   593 *** 16884,16902 ****
       
   594   	if (tp != NULL)
       
   595   	    wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
       
   596       }
       
   597 !     if (wp == NULL)
       
   598 ! 	rettv->vval.v_number = 0;
       
   599 !     else
       
   600       {
       
   601 ! 	if (rettv_list_alloc(rettv) == FAIL)
       
   602 ! 	    rettv->vval.v_number = 0;
       
   603 ! 	else
       
   604 ! 	{
       
   605 ! 	    for (; wp != NULL; wp = wp->w_next)
       
   606 ! 		if (list_append_number(rettv->vval.v_list,
       
   607   						wp->w_buffer->b_fnum) == FAIL)
       
   608 ! 		    break;
       
   609 ! 	}
       
   610       }
       
   611   #endif
       
   612   }
       
   613 --- 16836,16847 ----
       
   614   	if (tp != NULL)
       
   615   	    wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
       
   616       }
       
   617 !     if (wp != NULL && rettv_list_alloc(rettv) != FAIL)
       
   618       {
       
   619 ! 	for (; wp != NULL; wp = wp->w_next)
       
   620 ! 	    if (list_append_number(rettv->vval.v_list,
       
   621   						wp->w_buffer->b_fnum) == FAIL)
       
   622 ! 		break;
       
   623       }
       
   624   #endif
       
   625   }
       
   626 ***************
       
   627 *** 17024,17033 ****
       
   628       int		first;
       
   629   
       
   630       if (rettv_list_alloc(rettv) == FAIL)
       
   631 -     {
       
   632 - 	rettv->vval.v_number = 0;
       
   633   	return;
       
   634 -     }
       
   635   
       
   636       for (first = TRUE; ; first = FALSE)
       
   637   	if (get_tagfname(&tn, first, fname) == FAIL
       
   638 --- 16969,16975 ----
       
   639 ***************
       
   640 *** 17401,17408 ****
       
   641       /* A non-zero number or non-empty string argument: reset mode. */
       
   642       if (non_zero_arg(&argvars[0]))
       
   643   	curbuf->b_visual_mode_eval = NUL;
       
   644 - #else
       
   645 -     rettv->vval.v_number = 0; /* return anything, it won't work anyway */
       
   646   #endif
       
   647   }
       
   648   
       
   649 --- 17343,17348 ----
       
   650 *** ../vim-7.2.148/src/version.c	Wed Mar 18 19:07:09 2009
       
   651 --- src/version.c	Wed Apr 22 12:44:05 2009
       
   652 ***************
       
   653 *** 678,679 ****
       
   654 --- 678,681 ----
       
   655   {   /* Add new patch number below this line */
       
   656 + /**/
       
   657 +     149,
       
   658   /**/
       
   659 
       
   660 
       
   661 -- 
       
   662 WOMAN:   Well, 'ow did you become king then?
       
   663 ARTHUR:  The Lady of the Lake, [angels sing] her arm clad in the purest
       
   664          shimmering samite, held aloft Excalibur from the bosom of the water
       
   665          signifying by Divine Providence that I, Arthur, was to carry
       
   666          Excalibur.  [singing stops] That is why I am your king!
       
   667                                   The Quest for the Holy Grail (Monty Python)
       
   668 
       
   669  /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
       
   670 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
       
   671 \\\        download, build and distribute -- http://www.A-A-P.org        ///
       
   672  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///