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:
@@ -1324,6 +1324,12 @@ let $TESTVAR = 'testvar'
|
|||||||
def Test_expr7t()
|
def Test_expr7t()
|
||||||
let ls: list<string> = ['a', <string>g:string_empty]
|
let ls: list<string> = ['a', <string>g:string_empty]
|
||||||
let ln: list<number> = [<number>g:anint, <number>g:alsoint]
|
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
|
enddef
|
||||||
|
|
||||||
" test low level expression
|
" test low level expression
|
||||||
|
@@ -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 */
|
||||||
|
/**/
|
||||||
|
1455,
|
||||||
/**/
|
/**/
|
||||||
1454,
|
1454,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -3501,11 +3501,12 @@ compile_expr7t(char_u **arg, cctx_T *cctx, ppconst_T *ppconst)
|
|||||||
if (want_type != NULL)
|
if (want_type != NULL)
|
||||||
{
|
{
|
||||||
garray_T *stack = &cctx->ctx_type_stack;
|
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)
|
if (check_type(want_type, actual, FALSE) == FAIL)
|
||||||
{
|
{
|
||||||
generate_ppconst(cctx, ppconst);
|
|
||||||
if (need_type(actual, want_type, -1, cctx, FALSE) == FAIL)
|
if (need_type(actual, want_type, -1, cctx, FALSE) == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@@ -5016,6 +5017,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
goto theend;
|
goto theend;
|
||||||
if (*skipwhite(p) != ']')
|
if (*skipwhite(p) != ']')
|
||||||
{
|
{
|
||||||
|
// this should not happen
|
||||||
emsg(_(e_missbrac));
|
emsg(_(e_missbrac));
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user