mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.1233: Vim9: various errors not caught by try/catch
Problem: Vim9: various errors not caught by try/catch. Solution: Do not bail out if an error is inside try/catch.
This commit is contained in:
parent
b68ced5f07
commit
f0b9f43c31
@ -17,6 +17,7 @@ let g:inc_counter = 1
|
|||||||
let $SOME_ENV_VAR = 'some'
|
let $SOME_ENV_VAR = 'some'
|
||||||
let g:alist = [7]
|
let g:alist = [7]
|
||||||
let g:astring = 'text'
|
let g:astring = 'text'
|
||||||
|
let g:anumber = 123
|
||||||
|
|
||||||
def Test_assignment()
|
def Test_assignment()
|
||||||
let bool1: bool = true
|
let bool1: bool = true
|
||||||
@ -534,6 +535,13 @@ def Test_try_catch()
|
|||||||
|
|
||||||
try
|
try
|
||||||
n = s:does_not_exist
|
n = s:does_not_exist
|
||||||
|
catch /E121:/
|
||||||
|
n = 111
|
||||||
|
endtry
|
||||||
|
assert_equal(111, n)
|
||||||
|
|
||||||
|
try
|
||||||
|
n = g:does_not_exist
|
||||||
catch /E121:/
|
catch /E121:/
|
||||||
n = 121
|
n = 121
|
||||||
endtry
|
endtry
|
||||||
@ -546,6 +554,50 @@ def Test_try_catch()
|
|||||||
n = 222
|
n = 222
|
||||||
endtry
|
endtry
|
||||||
assert_equal(222, n)
|
assert_equal(222, n)
|
||||||
|
|
||||||
|
try
|
||||||
|
n = -g:astring
|
||||||
|
catch /E39:/
|
||||||
|
n = 233
|
||||||
|
endtry
|
||||||
|
assert_equal(233, n)
|
||||||
|
|
||||||
|
try
|
||||||
|
n = +g:astring
|
||||||
|
catch /E1030:/
|
||||||
|
n = 244
|
||||||
|
endtry
|
||||||
|
assert_equal(244, n)
|
||||||
|
|
||||||
|
try
|
||||||
|
n = +g:alist
|
||||||
|
catch /E745:/
|
||||||
|
n = 255
|
||||||
|
endtry
|
||||||
|
assert_equal(255, n)
|
||||||
|
|
||||||
|
let nd: dict<any>
|
||||||
|
try
|
||||||
|
nd = {g:anumber: 1}
|
||||||
|
catch /E1029:/
|
||||||
|
n = 266
|
||||||
|
endtry
|
||||||
|
assert_equal(266, n)
|
||||||
|
|
||||||
|
try
|
||||||
|
[n] = [1, 2, 3]
|
||||||
|
catch /E1093:/
|
||||||
|
n = 277
|
||||||
|
endtry
|
||||||
|
assert_equal(277, n)
|
||||||
|
|
||||||
|
# TODO: make this work
|
||||||
|
# try
|
||||||
|
# &ts = g:astring
|
||||||
|
# catch /E1093:/
|
||||||
|
# n = 288
|
||||||
|
# endtry
|
||||||
|
# assert_equal(288, n)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def ThrowFromDef()
|
def ThrowFromDef()
|
||||||
|
@ -754,6 +754,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1233,
|
||||||
/**/
|
/**/
|
||||||
1232,
|
1232,
|
||||||
/**/
|
/**/
|
||||||
|
@ -1065,9 +1065,7 @@ call_def_function(
|
|||||||
if (di == NULL)
|
if (di == NULL)
|
||||||
{
|
{
|
||||||
semsg(_(e_undefvar), name);
|
semsg(_(e_undefvar), name);
|
||||||
if (trylevel > 0)
|
goto on_error;
|
||||||
continue;
|
|
||||||
goto failed;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1115,7 +1113,7 @@ call_def_function(
|
|||||||
{
|
{
|
||||||
semsg(_("E121: Undefined variable: %c:%s"),
|
semsg(_("E121: Undefined variable: %c:%s"),
|
||||||
namespace, iptr->isn_arg.string);
|
namespace, iptr->isn_arg.string);
|
||||||
goto failed;
|
goto on_error;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2088,9 +2086,7 @@ call_def_function(
|
|||||||
case EXPR_SUB: f1 = f1 - f2; break;
|
case EXPR_SUB: f1 = f1 - f2; break;
|
||||||
case EXPR_ADD: f1 = f1 + f2; break;
|
case EXPR_ADD: f1 = f1 + f2; break;
|
||||||
default: emsg(_(e_modulus));
|
default: emsg(_(e_modulus));
|
||||||
if (trylevel > 0)
|
goto on_error;
|
||||||
continue;
|
|
||||||
goto failed;
|
|
||||||
}
|
}
|
||||||
clear_tv(tv1);
|
clear_tv(tv1);
|
||||||
clear_tv(tv2);
|
clear_tv(tv2);
|
||||||
@ -2144,9 +2140,7 @@ call_def_function(
|
|||||||
if (tv->v_type != VAR_LIST)
|
if (tv->v_type != VAR_LIST)
|
||||||
{
|
{
|
||||||
emsg(_(e_listreq));
|
emsg(_(e_listreq));
|
||||||
if (trylevel > 0)
|
goto on_error;
|
||||||
continue;
|
|
||||||
goto failed;
|
|
||||||
}
|
}
|
||||||
list = tv->vval.v_list;
|
list = tv->vval.v_list;
|
||||||
|
|
||||||
@ -2154,18 +2148,14 @@ call_def_function(
|
|||||||
if (tv->v_type != VAR_NUMBER)
|
if (tv->v_type != VAR_NUMBER)
|
||||||
{
|
{
|
||||||
emsg(_(e_number_exp));
|
emsg(_(e_number_exp));
|
||||||
if (trylevel > 0)
|
goto on_error;
|
||||||
continue;
|
|
||||||
goto failed;
|
|
||||||
}
|
}
|
||||||
n = tv->vval.v_number;
|
n = tv->vval.v_number;
|
||||||
clear_tv(tv);
|
clear_tv(tv);
|
||||||
if ((li = list_find(list, n)) == NULL)
|
if ((li = list_find(list, n)) == NULL)
|
||||||
{
|
{
|
||||||
semsg(_(e_listidx), n);
|
semsg(_(e_listidx), n);
|
||||||
if (trylevel > 0)
|
goto on_error;
|
||||||
continue;
|
|
||||||
goto failed;
|
|
||||||
}
|
}
|
||||||
--ectx.ec_stack.ga_len;
|
--ectx.ec_stack.ga_len;
|
||||||
// Clear the list after getting the item, to avoid that it
|
// Clear the list after getting the item, to avoid that it
|
||||||
@ -2238,9 +2228,7 @@ call_def_function(
|
|||||||
if ((di = dict_find(dict, key, -1)) == NULL)
|
if ((di = dict_find(dict, key, -1)) == NULL)
|
||||||
{
|
{
|
||||||
semsg(_(e_dictkey), key);
|
semsg(_(e_dictkey), key);
|
||||||
if (trylevel > 0)
|
goto on_error;
|
||||||
continue;
|
|
||||||
goto failed;
|
|
||||||
}
|
}
|
||||||
clear_tv(tv);
|
clear_tv(tv);
|
||||||
--ectx.ec_stack.ga_len;
|
--ectx.ec_stack.ga_len;
|
||||||
@ -2291,7 +2279,7 @@ call_def_function(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
emsg(_(e_number_exp));
|
emsg(_(e_number_exp));
|
||||||
goto failed;
|
goto on_error;
|
||||||
}
|
}
|
||||||
#ifdef FEAT_FLOAT
|
#ifdef FEAT_FLOAT
|
||||||
if (tv->v_type == VAR_FLOAT)
|
if (tv->v_type == VAR_FLOAT)
|
||||||
@ -2307,10 +2295,10 @@ call_def_function(
|
|||||||
|
|
||||||
tv = STACK_TV_BOT(-1);
|
tv = STACK_TV_BOT(-1);
|
||||||
if (check_not_string(tv) == FAIL)
|
if (check_not_string(tv) == FAIL)
|
||||||
goto failed;
|
goto on_error;
|
||||||
(void)tv_get_number_chk(tv, &error);
|
(void)tv_get_number_chk(tv, &error);
|
||||||
if (error)
|
if (error)
|
||||||
goto failed;
|
goto on_error;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2329,7 +2317,7 @@ call_def_function(
|
|||||||
semsg(_("E1029: Expected %s but got %s"),
|
semsg(_("E1029: Expected %s but got %s"),
|
||||||
vartype_name(ct->ct_type),
|
vartype_name(ct->ct_type),
|
||||||
vartype_name(tv->v_type));
|
vartype_name(tv->v_type));
|
||||||
goto failed;
|
goto on_error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2348,7 +2336,7 @@ call_def_function(
|
|||||||
{
|
{
|
||||||
semsg(_("E1093: Expected %d items but got %d"),
|
semsg(_("E1093: Expected %d items but got %d"),
|
||||||
min_len, list == NULL ? 0 : list->lv_len);
|
min_len, list == NULL ? 0 : list->lv_len);
|
||||||
goto failed;
|
goto on_error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2403,6 +2391,11 @@ call_def_function(
|
|||||||
clear_tv(STACK_TV_BOT(0));
|
clear_tv(STACK_TV_BOT(0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
continue;
|
||||||
|
|
||||||
|
on_error:
|
||||||
|
if (trylevel == 0)
|
||||||
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user