Mercurial > vim
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 |