mirror of
https://github.com/neovim/neovim.git
synced 2025-10-17 15:21:47 +00:00
vim-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 vim/vim#4012) Make assert_inrange() accept float values.
38f08e76ac
Omit changes to typval_compare()
because patch v8.0.1505 was not ported.
This commit is contained in:
@@ -5867,26 +5867,53 @@ int assert_inrange(typval_T *argvars)
|
||||
FUNC_ATTR_NONNULL_ALL
|
||||
{
|
||||
bool error = false;
|
||||
const varnumber_T lower = tv_get_number_chk(&argvars[0], &error);
|
||||
const varnumber_T upper = tv_get_number_chk(&argvars[1], &error);
|
||||
const varnumber_T actual = tv_get_number_chk(&argvars[2], &error);
|
||||
|
||||
if (error) {
|
||||
return 0;
|
||||
}
|
||||
if (actual < lower || actual > upper) {
|
||||
garray_T ga;
|
||||
prepare_assert_error(&ga);
|
||||
if (argvars[0].v_type == VAR_FLOAT
|
||||
|| argvars[1].v_type == VAR_FLOAT
|
||||
|| argvars[2].v_type == VAR_FLOAT) {
|
||||
const float_T flower = tv_get_float(&argvars[0]);
|
||||
const float_T fupper = tv_get_float(&argvars[1]);
|
||||
const float_T factual = tv_get_float(&argvars[2]);
|
||||
|
||||
char msg[55];
|
||||
vim_snprintf(msg, sizeof(msg),
|
||||
"range %" PRIdVARNUMBER " - %" PRIdVARNUMBER ",",
|
||||
lower, upper);
|
||||
fill_assert_error(&ga, &argvars[3], (char_u *)msg, NULL, &argvars[2],
|
||||
ASSERT_INRANGE);
|
||||
assert_error(&ga);
|
||||
ga_clear(&ga);
|
||||
return 1;
|
||||
if (factual < flower || factual > fupper) {
|
||||
garray_T ga;
|
||||
prepare_assert_error(&ga);
|
||||
if (argvars[3].v_type != VAR_UNKNOWN) {
|
||||
char_u *const tofree = (char_u *)encode_tv2string(&argvars[3], NULL);
|
||||
ga_concat(&ga, tofree);
|
||||
xfree(tofree);
|
||||
} else {
|
||||
char msg[80];
|
||||
vim_snprintf(msg, sizeof(msg), "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 {
|
||||
const varnumber_T lower = tv_get_number_chk(&argvars[0], &error);
|
||||
const varnumber_T upper = tv_get_number_chk(&argvars[1], &error);
|
||||
const varnumber_T actual = tv_get_number_chk(&argvars[2], &error);
|
||||
|
||||
if (error) {
|
||||
return 0;
|
||||
}
|
||||
if (actual < lower || actual > upper) {
|
||||
garray_T ga;
|
||||
prepare_assert_error(&ga);
|
||||
|
||||
char msg[55];
|
||||
vim_snprintf(msg, sizeof(msg),
|
||||
"range %" PRIdVARNUMBER " - %" PRIdVARNUMBER ",",
|
||||
lower, upper);
|
||||
fill_assert_error(&ga, &argvars[3], (char_u *)msg, NULL, &argvars[2],
|
||||
ASSERT_INRANGE);
|
||||
assert_error(&ga);
|
||||
ga_clear(&ga);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user