0
0
mirror of https://github.com/vim/vim.git synced 2025-10-04 05:25:06 -04:00

patch 8.2.3650: Vim9: for loop variable can be a list member

Problem:    Vim9: for loop variable can be a list member.
Solution:   Check for valid variable name. (closes #9179)
This commit is contained in:
Bram Moolenaar
2021-11-22 20:10:18 +00:00
parent 7a53f29c03
commit 3b3755fe19
7 changed files with 38 additions and 9 deletions

View File

@@ -2865,11 +2865,35 @@ def Test_for_loop_fails()
endfor
END
CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected job but got string', 2)
lines =<< trim END
var i = 0
for i in [1, 2, 3]
echo i
endfor
END
CheckDefExecAndScriptFailure2(lines, 'E1017:', 'E1041:')
lines =<< trim END
var l = [0]
for l[0] in [1, 2, 3]
echo l[0]
endfor
END
CheckDefExecAndScriptFailure2(lines, 'E461:', 'E1017:')
lines =<< trim END
var d = {x: 0}
for d.x in [1, 2, 3]
echo d.x
endfor
END
CheckDefExecAndScriptFailure2(lines, 'E461:', 'E1017:')
enddef
def Test_for_loop_script_var()
# cannot use s:var in a :def function
CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1101:')
CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E461:')
# can use s:var in Vim9 script, with or without s:
var lines =<< trim END