Skip to content

Commit

Permalink
patch 8.2.3858: Vim9: not enough tests
Browse files Browse the repository at this point in the history
Problem:    Vim9: not enough tests.
Solution:   Add tests for :try/:catch and :redir. Add missing type check.
  • Loading branch information
brammool committed Dec 20, 2021
1 parent 2f9f4cc commit 003312b
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 7 deletions.
17 changes: 17 additions & 0 deletions src/testdir/test_vim9_cmd.vim
Original file line number Diff line number Diff line change
Expand Up @@ -1558,6 +1558,23 @@ def Test_redir_to_var()
redir END
END
CheckDefFailure(lines, 'E1141:')

lines =<< trim END
var text: string
redir => text
echo 'hello'
redir > Xfile
redir END
END
CheckDefFailure(lines, 'E1185:')

lines =<< trim END
var text: number
redir => text
echo 'hello'
redir END
END
CheckDefFailure(lines, 'E1012:')
enddef

def Test_echo_void()
Expand Down
40 changes: 37 additions & 3 deletions src/testdir/test_vim9_script.vim
Original file line number Diff line number Diff line change
Expand Up @@ -611,15 +611,49 @@ def Test_try_catch_throw()
# no requirement for spaces before |
try|echo 0|catch|endtry

# return in try with finally
def ReturnInTry(): number
var ret = 4
try
return ret
catch /this/
return -1
catch /that/
return -1
finally
# changing ret has no effect
ret = 7
endtry
return -2
enddef
assert_equal(4, ReturnInTry())

# return in catch with finally
def ReturnInCatch(): number
var ret = 5
try
throw 'getout'
return -1
catch /getout/
# ret is evaluated here
return ret
finally
# changing ret later has no effect
ret = -3
endtry
return -2
enddef
assert_equal(5, ReturnInCatch())

# return in finally after empty catch
def ReturnInFinally(): number
try
finally
return 4
return 6
endtry
return 2
return -1
enddef
assert_equal(4, ReturnInFinally())
assert_equal(6, ReturnInFinally())

var lines =<< trim END
vim9script
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3858,
/**/
3857,
/**/
Expand Down
11 changes: 7 additions & 4 deletions src/vim9compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -8651,7 +8651,7 @@ compile_endblock(cctx_T *cctx)
}

/*
* compile "try"
* Compile "try".
* Creates a new scope for the try-endtry, pointing to the first catch and
* finally.
* Creates another scope for the "try" block itself.
Expand Down Expand Up @@ -8722,7 +8722,7 @@ compile_try(char_u *arg, cctx_T *cctx)
}

/*
* compile "catch {expr}"
* Compile "catch {expr}".
*/
static char_u *
compile_catch(char_u *arg, cctx_T *cctx UNUSED)
Expand Down Expand Up @@ -9477,8 +9477,8 @@ compile_substitute(char_u *arg, exarg_T *eap, cctx_T *cctx)
static char_u *
compile_redir(char_u *line, exarg_T *eap, cctx_T *cctx)
{
char_u *arg = eap->arg;
lhs_T *lhs = &cctx->ctx_redir_lhs;
char_u *arg = eap->arg;
lhs_T *lhs = &cctx->ctx_redir_lhs;

if (lhs->lhs_name != NULL)
{
Expand Down Expand Up @@ -9534,6 +9534,9 @@ compile_redir(char_u *line, exarg_T *eap, cctx_T *cctx)
if (compile_assign_lhs(arg, lhs, CMD_redir,
FALSE, FALSE, 1, cctx) == FAIL)
return NULL;
if (need_type(&t_string, lhs->lhs_member_type,
-1, 0, cctx, FALSE, FALSE) == FAIL)
return NULL;
generate_instr(cctx, ISN_REDIRSTART);
lhs->lhs_append = append;
if (lhs->lhs_has_index)
Expand Down

0 comments on commit 003312b

Please sign in to comment.