1
0
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:
Yegappan Lakshmanan
2024-12-14 19:59:24 +01:00
committed by Christian Brabandt
parent 6cc3027e54
commit e203841e0d
4 changed files with 49 additions and 1 deletions

View File

@@ -3090,6 +3090,14 @@ def Test_heredoc_expr()
END
LINES
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
" Test for assigning to a multi-dimensional list item.

View File

@@ -2038,6 +2038,12 @@ def Test_if_const_expr()
.. 'ccc'
)->setline(1)
endif
if 1
# do nothing
else
var [a] = [10]
endif
enddef
def Test_if_const_expr_fails()
@@ -2234,6 +2240,15 @@ def Test_echowindow_cmd()
# output goes in message window
popup_clear()
# Invalid range
var lines =<< trim END
def Foo()
:$echowindow "foo"
enddef
defcompile
END
v9.CheckDefAndScriptFailure(lines, 'E16: Invalid range')
enddef
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)
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.
def Test_substitute_cmd()
new

View File

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

View File

@@ -3342,7 +3342,7 @@ compile_assignment(
// For "[var, var] = expr" drop the "expr" value.
// 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))
{
if (generate_instr_drop(cctx, ISN_DROP, 1) == NULL)