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:')