diff src/eval.c @ 15904:fec4416adb80 v8.1.0958

patch 8.1.0958: compiling weird regexp pattern is very slow commit https://github.com/vim/vim/commit/38f08e76acf7d21bb34cf8f79f0f82eb63cdc987 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Feb 20 22:04:32 2019 +0100 patch 8.1.0958: compiling weird regexp pattern is very slow Problem: Compiling weird regexp pattern is very slow. Solution: When reallocating post list increase size by 50%. (Kuang-che Wu, closes #4012) Make assert_inrange() accept float values.
author Bram Moolenaar <Bram@vim.org>
date Wed, 20 Feb 2019 22:15:05 +0100
parents 7fad90423bd2
children 9cc42db77a54
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -9365,32 +9365,65 @@ assert_inrange(typval_T *argvars)
 {
     garray_T	ga;
     int		error = FALSE;
-    varnumber_T	lower = tv_get_number_chk(&argvars[0], &error);
-    varnumber_T	upper = tv_get_number_chk(&argvars[1], &error);
-    varnumber_T	actual = tv_get_number_chk(&argvars[2], &error);
     char_u	*tofree;
     char	msg[200];
     char_u	numbuf[NUMBUFLEN];
 
-    if (error)
-	return 0;
-    if (actual < lower || actual > upper)
-    {
-	prepare_assert_error(&ga);
-	if (argvars[3].v_type != VAR_UNKNOWN)
-	{
-	    ga_concat(&ga, tv2string(&argvars[3], &tofree, numbuf, 0));
-	    vim_free(tofree);
-	}
-	else
-	{
-	    vim_snprintf(msg, 200, "Expected range %ld - %ld, but got %ld",
+#ifdef FEAT_FLOAT
+    if (argvars[0].v_type == VAR_FLOAT
+	    || argvars[1].v_type == VAR_FLOAT
+	    || argvars[2].v_type == VAR_FLOAT)
+    {
+	float_T flower = tv_get_float(&argvars[0]);
+	float_T fupper = tv_get_float(&argvars[1]);
+	float_T factual = tv_get_float(&argvars[2]);
+
+	if (factual < flower || factual > fupper)
+	{
+	    prepare_assert_error(&ga);
+	    if (argvars[3].v_type != VAR_UNKNOWN)
+	    {
+		ga_concat(&ga, tv2string(&argvars[3], &tofree, numbuf, 0));
+		vim_free(tofree);
+	    }
+	    else
+	    {
+		vim_snprintf(msg, 200, "Expected range %g - %g, but got %g",
+						      flower, fupper, factual);
+		ga_concat(&ga, (char_u *)msg);
+	    }
+	    assert_error(&ga);
+	    ga_clear(&ga);
+	    return 1;
+	}
+    }
+    else
+#endif
+    {
+	varnumber_T	lower = tv_get_number_chk(&argvars[0], &error);
+	varnumber_T	upper = tv_get_number_chk(&argvars[1], &error);
+	varnumber_T	actual = tv_get_number_chk(&argvars[2], &error);
+
+	if (error)
+	    return 0;
+	if (actual < lower || actual > upper)
+	{
+	    prepare_assert_error(&ga);
+	    if (argvars[3].v_type != VAR_UNKNOWN)
+	    {
+		ga_concat(&ga, tv2string(&argvars[3], &tofree, numbuf, 0));
+		vim_free(tofree);
+	    }
+	    else
+	    {
+		vim_snprintf(msg, 200, "Expected range %ld - %ld, but got %ld",
 				       (long)lower, (long)upper, (long)actual);
-	    ga_concat(&ga, (char_u *)msg);
-	}
-	assert_error(&ga);
-	ga_clear(&ga);
-	return 1;
+		ga_concat(&ga, (char_u *)msg);
+	    }
+	    assert_error(&ga);
+	    ga_clear(&ga);
+	    return 1;
+	}
     }
     return 0;
 }
@@ -9822,14 +9855,8 @@ typval_compare(
     {
 	float_T f1, f2;
 
-	if (typ1->v_type == VAR_FLOAT)
-	    f1 = typ1->vval.v_float;
-	else
-	    f1 = tv_get_number(typ1);
-	if (typ2->v_type == VAR_FLOAT)
-	    f2 = typ2->vval.v_float;
-	else
-	    f2 = tv_get_number(typ2);
+	f1 = tv_get_float(typ1);
+	f2 = tv_get_float(typ2);
 	n1 = FALSE;
 	switch (type)
 	{