forked from aniani/vim
patch 9.1.0925: Vim9: expression compiled when not necessary
Problem: Vim9: expression compiled when not necessary Solution: do not compile when ctx_skip is set, add a few more Vim9 expressions tests (Yegappan Lakshmanan) closes: #16218 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
6cc3027e54
commit
e203841e0d
@@ -3090,6 +3090,14 @@ def Test_heredoc_expr()
|
|||||||
END
|
END
|
||||||
LINES
|
LINES
|
||||||
v9.CheckDefAndScriptFailure(lines, 'E15: Invalid expression: "}"')
|
v9.CheckDefAndScriptFailure(lines, 'E15: Invalid expression: "}"')
|
||||||
|
|
||||||
|
# dangling "}"
|
||||||
|
lines =<< trim LINES
|
||||||
|
var text =<< trim eval END
|
||||||
|
aa}a
|
||||||
|
END
|
||||||
|
LINES
|
||||||
|
v9.CheckDefAndScriptFailure(lines, "E1278: Stray '}' without a matching '{': aa}a")
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
" Test for assigning to a multi-dimensional list item.
|
" Test for assigning to a multi-dimensional list item.
|
||||||
|
@@ -2038,6 +2038,12 @@ def Test_if_const_expr()
|
|||||||
.. 'ccc'
|
.. 'ccc'
|
||||||
)->setline(1)
|
)->setline(1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if 1
|
||||||
|
# do nothing
|
||||||
|
else
|
||||||
|
var [a] = [10]
|
||||||
|
endif
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_if_const_expr_fails()
|
def Test_if_const_expr_fails()
|
||||||
@@ -2234,6 +2240,15 @@ def Test_echowindow_cmd()
|
|||||||
|
|
||||||
# output goes in message window
|
# output goes in message window
|
||||||
popup_clear()
|
popup_clear()
|
||||||
|
|
||||||
|
# Invalid range
|
||||||
|
var lines =<< trim END
|
||||||
|
def Foo()
|
||||||
|
:$echowindow "foo"
|
||||||
|
enddef
|
||||||
|
defcompile
|
||||||
|
END
|
||||||
|
v9.CheckDefAndScriptFailure(lines, 'E16: Invalid range')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_for_outside_of_function()
|
def Test_for_outside_of_function()
|
||||||
@@ -5133,6 +5148,29 @@ def Test_unknown_type_in_typecast()
|
|||||||
v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected number but got bool', 2)
|
v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected number but got bool', 2)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
" Test for calling a function as a method with a list argument
|
||||||
|
" This exercises some conditions in the assignment statement parsing code.
|
||||||
|
def Test_method_call_with_list_arg()
|
||||||
|
var lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
|
||||||
|
def Foo(l: list<number>)
|
||||||
|
g:save_list = l
|
||||||
|
enddef
|
||||||
|
|
||||||
|
def Bar()
|
||||||
|
var a = 10
|
||||||
|
var b = 20
|
||||||
|
[a, b]->Foo()
|
||||||
|
enddef
|
||||||
|
|
||||||
|
g:save_list = []
|
||||||
|
Bar()
|
||||||
|
assert_equal([10, 20], g:save_list)
|
||||||
|
END
|
||||||
|
v9.CheckSourceSuccess(lines)
|
||||||
|
enddef
|
||||||
|
|
||||||
" Keep this last, it messes up highlighting.
|
" Keep this last, it messes up highlighting.
|
||||||
def Test_substitute_cmd()
|
def Test_substitute_cmd()
|
||||||
new
|
new
|
||||||
|
@@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
925,
|
||||||
/**/
|
/**/
|
||||||
924,
|
924,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -3342,7 +3342,7 @@ compile_assignment(
|
|||||||
|
|
||||||
// For "[var, var] = expr" drop the "expr" value.
|
// For "[var, var] = expr" drop the "expr" value.
|
||||||
// Also for "[var, var; _] = expr".
|
// Also for "[var, var; _] = expr".
|
||||||
if (cac.cac_var_count > 0 &&
|
if (cctx->ctx_skip != SKIP_YES && cac.cac_var_count > 0 &&
|
||||||
(!cac.cac_semicolon || !cac.cac_did_generate_slice))
|
(!cac.cac_semicolon || !cac.cac_did_generate_slice))
|
||||||
{
|
{
|
||||||
if (generate_instr_drop(cctx, ISN_DROP, 1) == NULL)
|
if (generate_instr_drop(cctx, ISN_DROP, 1) == NULL)
|
||||||
|
Reference in New Issue
Block a user