comparison src/testdir/test_vim9_expr.vim @ 23565:34aa2907082a v8.2.2325

patch 8.2.2325: Vim9: crash if map() changes the item type Commit: https://github.com/vim/vim/commit/75ab91ff3403e725a79ac9c7351b78e9aff71d67 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 10 22:42:50 2021 +0100 patch 8.2.2325: Vim9: crash if map() changes the item type Problem: Vim9: crash if map() changes the item type. Solution: Check that the item type is still OK. (closes https://github.com/vim/vim/issues/7652) Fix problem with mapnew() on range list.
author Bram Moolenaar <Bram@vim.org>
date Sun, 10 Jan 2021 22:45:06 +0100
parents 647ff61c0bcd
children 455ad460ff4f
comparison
equal deleted inserted replaced
23564:469359887d3e 23565:34aa2907082a
1857 assert_equal('result', La()) 1857 assert_equal('result', La())
1858 assert_equal([1, 3, 5], [1, 2, 3]->map((key, val) => key + val)) 1858 assert_equal([1, 3, 5], [1, 2, 3]->map((key, val) => key + val))
1859 1859
1860 # line continuation inside lambda with "cond ? expr : expr" works 1860 # line continuation inside lambda with "cond ? expr : expr" works
1861 var ll = range(3) 1861 var ll = range(3)
1862 map(ll, (k, v) => v % 2 ? { 1862 var dll = mapnew(ll, (k, v) => v % 2 ? {
1863 ['111']: 111 } : {} 1863 ['111']: 111 } : {}
1864 ) 1864 )
1865 assert_equal([{}, {111: 111}, {}], ll) 1865 assert_equal([{}, {111: 111}, {}], dll)
1866 1866
1867 ll = range(3) 1867 ll = range(3)
1868 map(ll, (k, v) => v == 8 || v 1868 map(ll, (k, v) => v == 8 || v
1869 == 9 1869 == 9
1870 || v % 2 ? 111 : 222 1870 || v % 2 ? 111 : 222
1944 assert_equal('result', La()) 1944 assert_equal('result', La())
1945 assert_equal([1, 3, 5], [1, 2, 3]->map((key, val) => key + val)) 1945 assert_equal([1, 3, 5], [1, 2, 3]->map((key, val) => key + val))
1946 1946
1947 # line continuation inside lambda with "cond ? expr : expr" works 1947 # line continuation inside lambda with "cond ? expr : expr" works
1948 var ll = range(3) 1948 var ll = range(3)
1949 map(ll, (k, v) => v % 2 ? { 1949 var dll = mapnew(ll, (k, v) => v % 2 ? {
1950 ['111']: 111 } : {} 1950 ['111']: 111 } : {}
1951 ) 1951 )
1952 assert_equal([{}, {111: 111}, {}], ll) 1952 assert_equal([{}, {111: 111}, {}], dll)
1953 1953
1954 ll = range(3) 1954 ll = range(3)
1955 map(ll, (k, v) => v == 8 || v 1955 map(ll, (k, v) => v == 8 || v
1956 == 9 1956 == 9
1957 || v % 2 ? 111 : 222 1957 || v % 2 ? 111 : 222
2962 2962
2963 def Test_expr7_subscript_linebreak() 2963 def Test_expr7_subscript_linebreak()
2964 var range = range( 2964 var range = range(
2965 3) 2965 3)
2966 var l = range 2966 var l = range
2967 ->map('string(v:key)') 2967 ->mapnew('string(v:key)')
2968 assert_equal(['0', '1', '2'], l) 2968 assert_equal(['0', '1', '2'], l)
2969 2969
2970 l = range 2970 l = range
2971 ->map('string(v:key)') 2971 ->mapnew('string(v:key)')
2972 assert_equal(['0', '1', '2'], l) 2972 assert_equal(['0', '1', '2'], l)
2973 2973
2974 l = range # comment 2974 l = range # comment
2975 ->map('string(v:key)') 2975 ->mapnew('string(v:key)')
2976 assert_equal(['0', '1', '2'], l) 2976 assert_equal(['0', '1', '2'], l)
2977 2977
2978 l = range 2978 l = range
2979 2979
2980 ->map('string(v:key)') 2980 ->mapnew('string(v:key)')
2981 assert_equal(['0', '1', '2'], l) 2981 assert_equal(['0', '1', '2'], l)
2982 2982
2983 l = range 2983 l = range
2984 # comment 2984 # comment
2985 ->map('string(v:key)') 2985 ->mapnew('string(v:key)')
2986 assert_equal(['0', '1', '2'], l) 2986 assert_equal(['0', '1', '2'], l)
2987 2987
2988 assert_equal('1', l[ 2988 assert_equal('1', l[
2989 1]) 2989 1])
2990 2990