diff src/eval.c @ 1655:6412b0befebc v7.2a.007

updated for version 7.2a-007
author vimboss
date Sat, 28 Jun 2008 13:09:56 +0000
parents d166fe2bfe74
children 5bbc2d6658ad
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -405,8 +405,8 @@ static int eval2 __ARGS((char_u **arg, t
 static int eval3 __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static int eval4 __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static int eval5 __ARGS((char_u **arg, typval_T *rettv, int evaluate));
-static int eval6 __ARGS((char_u **arg, typval_T *rettv, int evaluate));
-static int eval7 __ARGS((char_u **arg, typval_T *rettv, int evaluate));
+static int eval6 __ARGS((char_u **arg, typval_T *rettv, int evaluate, int want_string));
+static int eval7 __ARGS((char_u **arg, typval_T *rettv, int evaluate, int want_string));
 
 static int eval_index __ARGS((char_u **arg, typval_T *rettv, int evaluate, int verbose));
 static int get_option_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
@@ -4458,7 +4458,7 @@ eval5(arg, rettv, evaluate)
     /*
      * Get the first variable.
      */
-    if (eval6(arg, rettv, evaluate) == FAIL)
+    if (eval6(arg, rettv, evaluate, FALSE) == FAIL)
 	return FAIL;
 
     /*
@@ -4494,7 +4494,7 @@ eval5(arg, rettv, evaluate)
 	 * Get the second variable.
 	 */
 	*arg = skipwhite(*arg + 1);
-	if (eval6(arg, &var2, evaluate) == FAIL)
+	if (eval6(arg, &var2, evaluate, op == '.') == FAIL)
 	{
 	    clear_tv(rettv);
 	    return FAIL;
@@ -4624,10 +4624,11 @@ eval5(arg, rettv, evaluate)
  * Return OK or FAIL.
  */
     static int
-eval6(arg, rettv, evaluate)
+eval6(arg, rettv, evaluate, want_string)
     char_u	**arg;
     typval_T	*rettv;
     int		evaluate;
+    int		want_string;  /* after "." operator */
 {
     typval_T	var2;
     int		op;
@@ -4641,7 +4642,7 @@ eval6(arg, rettv, evaluate)
     /*
      * Get the first variable.
      */
-    if (eval7(arg, rettv, evaluate) == FAIL)
+    if (eval7(arg, rettv, evaluate, want_string) == FAIL)
 	return FAIL;
 
     /*
@@ -4676,7 +4677,7 @@ eval6(arg, rettv, evaluate)
 	 * Get the second variable.
 	 */
 	*arg = skipwhite(*arg + 1);
-	if (eval7(arg, &var2, evaluate) == FAIL)
+	if (eval7(arg, &var2, evaluate, FALSE) == FAIL)
 	    return FAIL;
 
 	if (evaluate)
@@ -4790,10 +4791,11 @@ eval6(arg, rettv, evaluate)
  * Return OK or FAIL.
  */
     static int
-eval7(arg, rettv, evaluate)
+eval7(arg, rettv, evaluate, want_string)
     char_u	**arg;
     typval_T	*rettv;
     int		evaluate;
+    int		want_string;	/* after "." operator */
 {
     long	n;
     int		len;
@@ -4838,8 +4840,10 @@ eval7(arg, rettv, evaluate)
 
 		/* We accept a float when the format matches
 		 * "[0-9]\+\.[0-9]\+\([eE][+-]\?[0-9]\+\)\?".  This is very
-		 * strict to avoid backwards compatibility problems. */
-		if (p[0] == '.' && vim_isdigit(p[1]))
+		 * strict to avoid backwards compatibility problems.
+		 * Don't look for a float after the "." operator, so that
+		 * ":let vers = 1.2.3" doesn't fail. */
+		if (!want_string && p[0] == '.' && vim_isdigit(p[1]))
 		{
 		    get_float = TRUE;
 		    p = skipdigits(p + 2);