Mercurial > vim
comparison src/testdir/test_vim9_script.vim @ 27515:1aff400b819e v8.2.4285
patch 8.2.4285: Vim9: type of item in for loop not checked properly
Commit: https://github.com/vim/vim/commit/a1c519518050383e7d319514a3ff6c42a9154c48
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Feb 2 16:20:26 2022 +0000
patch 8.2.4285: Vim9: type of item in for loop not checked properly
Problem: Vim9: type of item in for loop not checked properly.
Solution: Adjust the type checking. (closes https://github.com/vim/vim/issues/9683)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 02 Feb 2022 17:30:05 +0100 |
parents | 55613f0d59bc |
children | 8af6e7761b0c |
comparison
equal
deleted
inserted
replaced
27514:259fb2aa75c0 | 27515:1aff400b819e |
---|---|
2009 var d: dict<number> = {a: 1, b: 2} | 2009 var d: dict<number> = {a: 1, b: 2} |
2010 for [k: job, v: job] in d->items() | 2010 for [k: job, v: job] in d->items() |
2011 echo k v | 2011 echo k v |
2012 endfor | 2012 endfor |
2013 END | 2013 END |
2014 v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected job but got string', 2) | 2014 v9.CheckDefExecAndScriptFailure(lines, ['E1013: Argument 1: type mismatch, expected job but got string', 'E1012: Type mismatch; expected job but got string'], 2) |
2015 | 2015 |
2016 lines =<< trim END | 2016 lines =<< trim END |
2017 var i = 0 | 2017 var i = 0 |
2018 for i in [1, 2, 3] | 2018 for i in [1, 2, 3] |
2019 echo i | 2019 echo i |
2034 for d.x in [1, 2, 3] | 2034 for d.x in [1, 2, 3] |
2035 echo d.x | 2035 echo d.x |
2036 endfor | 2036 endfor |
2037 END | 2037 END |
2038 v9.CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) | 2038 v9.CheckDefExecAndScriptFailure(lines, ['E461:', 'E1017:']) |
2039 | |
2040 lines =<< trim END | |
2041 var l: list<dict<any>> = [{a: 1, b: 'x'}] | |
2042 for item: dict<number> in l | |
2043 echo item | |
2044 endfor | |
2045 END | |
2046 v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected dict<number> but got dict<any>') | |
2047 | |
2048 lines =<< trim END | |
2049 var l: list<dict<any>> = [{n: 1}] | |
2050 for item: dict<number> in l | |
2051 item->extend({s: ''}) | |
2052 endfor | |
2053 END | |
2054 v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>') | |
2039 enddef | 2055 enddef |
2040 | 2056 |
2041 def Test_for_loop_script_var() | 2057 def Test_for_loop_script_var() |
2042 # cannot use s:var in a :def function | 2058 # cannot use s:var in a :def function |
2043 v9.CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1254:') | 2059 v9.CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1254:') |