0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.1455: Vim9: crash when using typecast before constant

Problem:    Vim9: crash when using typecast before constant.
Solution:   Generate constant before checking type.  Add tets.
This commit is contained in:
Bram Moolenaar
2020-08-14 22:44:25 +02:00
parent 79e8db9a21
commit d1103587cf
3 changed files with 12 additions and 2 deletions

View File

@@ -1324,6 +1324,12 @@ let $TESTVAR = 'testvar'
def Test_expr7t()
let ls: list<string> = ['a', <string>g:string_empty]
let ln: list<number> = [<number>g:anint, <number>g:alsoint]
let nr = <number>234
assert_equal(234, nr)
call CheckDefFailure(["let x = <nr>123"], 'E1010:')
call CheckDefFailure(["let x = <number >123"], 'E1068:')
call CheckDefFailure(["let x = <number 123"], 'E1104:')
enddef
" test low level expression

View File

@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1455,
/**/
1454,
/**/

View File

@@ -3501,11 +3501,12 @@ compile_expr7t(char_u **arg, cctx_T *cctx, ppconst_T *ppconst)
if (want_type != NULL)
{
garray_T *stack = &cctx->ctx_type_stack;
type_T *actual = ((type_T **)stack->ga_data)[stack->ga_len - 1];
type_T *actual;
generate_ppconst(cctx, ppconst);
actual = ((type_T **)stack->ga_data)[stack->ga_len - 1];
if (check_type(want_type, actual, FALSE) == FAIL)
{
generate_ppconst(cctx, ppconst);
if (need_type(actual, want_type, -1, cctx, FALSE) == FAIL)
return FAIL;
}
@@ -5016,6 +5017,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
goto theend;
if (*skipwhite(p) != ']')
{
// this should not happen
emsg(_(e_missbrac));
goto theend;
}