0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

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.
This commit is contained in:
Bram Moolenaar
2019-02-20 22:04:32 +01:00
parent 3585671888
commit 38f08e76ac
5 changed files with 84 additions and 25 deletions

View File

@@ -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)
#ifdef FEAT_FLOAT
if (argvars[0].v_type == VAR_FLOAT
|| argvars[1].v_type == VAR_FLOAT
|| argvars[2].v_type == VAR_FLOAT)
{
prepare_assert_error(&ga);
if (argvars[3].v_type != VAR_UNKNOWN)
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)
{
ga_concat(&ga, tv2string(&argvars[3], &tofree, numbuf, 0));
vim_free(tofree);
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
}
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)
{
vim_snprintf(msg, 200, "Expected range %ld - %ld, but got %ld",
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);
ga_concat(&ga, (char_u *)msg);
}
assert_error(&ga);
ga_clear(&ga);
return 1;
}
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)
{