Mercurial > vim
comparison src/testdir/test_vim9_expr.vim @ 27191:63f8dbcf6a74 v8.2.4124
patch 8.2.4124: Vim9: method in compiled function may not see script item
Commit: https://github.com/vim/vim/commit/6389baa6691fde4ca56ec6243ed83322543df300
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Jan 17 20:50:40 2022 +0000
patch 8.2.4124: Vim9: method in compiled function may not see script item
Problem: Vim9: method in compiled function may not see script item.
Solution: Make sure not to skip to the next line. (closes https://github.com/vim/vim/issues/9496)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 17 Jan 2022 22:00:03 +0100 |
parents | 6af18c69c59d |
children | d4f254d02d7c |
comparison
equal
deleted
inserted
replaced
27190:19849ccc38a0 | 27191:63f8dbcf6a74 |
---|---|
1715 let g:dict_one = #{one: 1} | 1715 let g:dict_one = #{one: 1} |
1716 | 1716 |
1717 let $TESTVAR = 'testvar' | 1717 let $TESTVAR = 'testvar' |
1718 | 1718 |
1719 " type casts | 1719 " type casts |
1720 def Test_expr7t() | 1720 def Test_expr7() |
1721 var lines =<< trim END | 1721 var lines =<< trim END |
1722 var ls: list<string> = ['a', <string>g:string_empty] | 1722 var ls: list<string> = ['a', <string>g:string_empty] |
1723 var ln: list<number> = [<number>g:anint, <number>g:thefour] | 1723 var ln: list<number> = [<number>g:anint, <number>g:thefour] |
1724 var nr = <number>234 | 1724 var nr = <number>234 |
1725 assert_equal(234, nr) | 1725 assert_equal(234, nr) |
1741 CheckDefAndScriptFailure(["var x = <number >123"], 'E1068:', 1) | 1741 CheckDefAndScriptFailure(["var x = <number >123"], 'E1068:', 1) |
1742 CheckDefAndScriptFailure(["var x = <number 123"], 'E1104:', 1) | 1742 CheckDefAndScriptFailure(["var x = <number 123"], 'E1104:', 1) |
1743 enddef | 1743 enddef |
1744 | 1744 |
1745 " test low level expression | 1745 " test low level expression |
1746 def Test_expr7_number() | 1746 def Test_expr8_number() |
1747 # number constant | 1747 # number constant |
1748 var lines =<< trim END | 1748 var lines =<< trim END |
1749 assert_equal(0, 0) | 1749 assert_equal(0, 0) |
1750 assert_equal(654, 0654) | 1750 assert_equal(654, 0654) |
1751 | 1751 |
1754 assert_equal(255, 0xff) | 1754 assert_equal(255, 0xff) |
1755 END | 1755 END |
1756 CheckDefAndScriptSuccess(lines) | 1756 CheckDefAndScriptSuccess(lines) |
1757 enddef | 1757 enddef |
1758 | 1758 |
1759 def Test_expr7_float() | 1759 def Test_expr8_float() |
1760 # float constant | 1760 # float constant |
1761 if !has('float') | 1761 if !has('float') |
1762 MissingFeature 'float' | 1762 MissingFeature 'float' |
1763 else | 1763 else |
1764 var lines =<< trim END | 1764 var lines =<< trim END |
1769 END | 1769 END |
1770 CheckDefAndScriptSuccess(lines) | 1770 CheckDefAndScriptSuccess(lines) |
1771 endif | 1771 endif |
1772 enddef | 1772 enddef |
1773 | 1773 |
1774 def Test_expr7_blob() | 1774 def Test_expr8_blob() |
1775 # blob constant | 1775 # blob constant |
1776 var lines =<< trim END | 1776 var lines =<< trim END |
1777 assert_equal(g:blob_empty, 0z) | 1777 assert_equal(g:blob_empty, 0z) |
1778 assert_equal(g:blob_one, 0z01) | 1778 assert_equal(g:blob_one, 0z01) |
1779 assert_equal(g:blob_long, 0z0102.0304) | 1779 assert_equal(g:blob_long, 0z0102.0304) |
1801 CheckDefAndScriptSuccess(lines) | 1801 CheckDefAndScriptSuccess(lines) |
1802 | 1802 |
1803 CheckDefAndScriptFailure(["var x = 0z123"], 'E973:', 1) | 1803 CheckDefAndScriptFailure(["var x = 0z123"], 'E973:', 1) |
1804 enddef | 1804 enddef |
1805 | 1805 |
1806 def Test_expr7_string() | 1806 def Test_expr8_string() |
1807 # string constant | 1807 # string constant |
1808 var lines =<< trim END | 1808 var lines =<< trim END |
1809 assert_equal(g:string_empty, '') | 1809 assert_equal(g:string_empty, '') |
1810 assert_equal(g:string_empty, "") | 1810 assert_equal(g:string_empty, "") |
1811 assert_equal(g:string_short, 'x') | 1811 assert_equal(g:string_short, 'x') |
1818 | 1818 |
1819 CheckDefAndScriptFailure(['var x = "abc'], 'E114:', 1) | 1819 CheckDefAndScriptFailure(['var x = "abc'], 'E114:', 1) |
1820 CheckDefAndScriptFailure(["var x = 'abc"], 'E115:', 1) | 1820 CheckDefAndScriptFailure(["var x = 'abc"], 'E115:', 1) |
1821 enddef | 1821 enddef |
1822 | 1822 |
1823 def Test_expr7_vimvar() | 1823 def Test_expr8_vimvar() |
1824 v:errors = [] | 1824 v:errors = [] |
1825 var errs: list<string> = v:errors | 1825 var errs: list<string> = v:errors |
1826 CheckDefFailure(['var errs: list<number> = v:errors'], 'E1012:') | 1826 CheckDefFailure(['var errs: list<number> = v:errors'], 'E1012:') |
1827 | 1827 |
1828 var old: list<string> = v:oldfiles | 1828 var old: list<string> = v:oldfiles |
1843 exec "normal! afoo fo\<C-N>\<Esc>" | 1843 exec "normal! afoo fo\<C-N>\<Esc>" |
1844 CheckDefExecAndScriptFailure(["var old: dict<number> = v:completed_item"], 'E1012: Type mismatch; expected dict<number> but got dict<string>', 1) | 1844 CheckDefExecAndScriptFailure(["var old: dict<number> = v:completed_item"], 'E1012: Type mismatch; expected dict<number> but got dict<string>', 1) |
1845 bwipe! | 1845 bwipe! |
1846 enddef | 1846 enddef |
1847 | 1847 |
1848 def Test_expr7_special() | 1848 def Test_expr8_special() |
1849 # special constant | 1849 # special constant |
1850 var lines =<< trim END | 1850 var lines =<< trim END |
1851 assert_equal(g:special_true, true) | 1851 assert_equal(g:special_true, true) |
1852 assert_equal(g:special_false, false) | 1852 assert_equal(g:special_false, false) |
1853 assert_equal(g:special_true, v:true) | 1853 assert_equal(g:special_true, v:true) |
1880 CheckDefAndScriptFailure(['v:false = true'], 'E46:', 1) | 1880 CheckDefAndScriptFailure(['v:false = true'], 'E46:', 1) |
1881 CheckDefAndScriptFailure(['v:null = 11'], 'E46:', 1) | 1881 CheckDefAndScriptFailure(['v:null = 11'], 'E46:', 1) |
1882 CheckDefAndScriptFailure(['v:none = 22'], 'E46:', 1) | 1882 CheckDefAndScriptFailure(['v:none = 22'], 'E46:', 1) |
1883 enddef | 1883 enddef |
1884 | 1884 |
1885 def Test_expr7_list() | 1885 def Test_expr8_list() |
1886 # list | 1886 # list |
1887 var lines =<< trim END | 1887 var lines =<< trim END |
1888 assert_equal(g:list_empty, []) | 1888 assert_equal(g:list_empty, []) |
1889 assert_equal(g:list_empty, [ ]) | 1889 assert_equal(g:list_empty, [ ]) |
1890 | 1890 |
1953 'E1004: White space required before and after '':'' at ":b]"', 4) | 1953 'E1004: White space required before and after '':'' at ":b]"', 4) |
1954 CheckDefAndScriptFailure(lines + ['echo numbers[1: b]'], 'E1004:', 4) | 1954 CheckDefAndScriptFailure(lines + ['echo numbers[1: b]'], 'E1004:', 4) |
1955 CheckDefAndScriptFailure(lines + ['echo numbers[a :b]'], 'E1004:', 4) | 1955 CheckDefAndScriptFailure(lines + ['echo numbers[a :b]'], 'E1004:', 4) |
1956 enddef | 1956 enddef |
1957 | 1957 |
1958 def Test_expr7_list_vim9script() | 1958 def Test_expr8_list_vim9script() |
1959 var lines =<< trim END | 1959 var lines =<< trim END |
1960 var l = [ | 1960 var l = [ |
1961 11, | 1961 11, |
1962 22, | 1962 22, |
1963 ] | 1963 ] |
2041 # some comment | 2041 # some comment |
2042 || | 2042 || |
2043 x == 2 | 2043 x == 2 |
2044 enddef | 2044 enddef |
2045 | 2045 |
2046 def Test_expr7_lambda() | 2046 def Test_expr8_lambda() |
2047 var lines =<< trim END | 2047 var lines =<< trim END |
2048 var La = () => 'result' | 2048 var La = () => 'result' |
2049 # comment | 2049 # comment |
2050 assert_equal('result', La()) | 2050 assert_equal('result', La()) |
2051 assert_equal([1, 3, 5], [1, 2, 3]->map((key, val) => key + val)) | 2051 assert_equal([1, 3, 5], [1, 2, 3]->map((key, val) => key + val)) |
2127 eval (name + 2) / 3 | 2127 eval (name + 2) / 3 |
2128 END | 2128 END |
2129 CheckDefAndScriptSuccess(lines) | 2129 CheckDefAndScriptSuccess(lines) |
2130 enddef | 2130 enddef |
2131 | 2131 |
2132 def Test_expr7_lambda_block() | 2132 def Test_expr8_lambda_block() |
2133 var lines =<< trim END | 2133 var lines =<< trim END |
2134 var Func = (s: string): string => { | 2134 var Func = (s: string): string => { |
2135 return 'hello ' .. s | 2135 return 'hello ' .. s |
2136 } | 2136 } |
2137 assert_equal('hello there', Func('there')) | 2137 assert_equal('hello there', Func('there')) |
2207 # some comment | 2207 # some comment |
2208 || | 2208 || |
2209 x == 2 | 2209 x == 2 |
2210 enddef | 2210 enddef |
2211 | 2211 |
2212 def Test_expr7_new_lambda() | 2212 def Test_expr8_new_lambda() |
2213 var lines =<< trim END | 2213 var lines =<< trim END |
2214 var La = () => 'result' | 2214 var La = () => 'result' |
2215 assert_equal('result', La()) | 2215 assert_equal('result', La()) |
2216 assert_equal([1, 3, 5], [1, 2, 3]->map((key, val) => key + val)) | 2216 assert_equal([1, 3, 5], [1, 2, 3]->map((key, val) => key + val)) |
2217 | 2217 |
2292 CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0,', ' k2 1})'], 'E720:', 2) | 2292 CheckDefAndScriptFailure(['var Fx = (a) => ({k1: 0,', ' k2 1})'], 'E720:', 2) |
2293 | 2293 |
2294 CheckDefAndScriptFailure(['var Fx = (a) => [0', ' 1]'], 'E696:', 2) | 2294 CheckDefAndScriptFailure(['var Fx = (a) => [0', ' 1]'], 'E696:', 2) |
2295 enddef | 2295 enddef |
2296 | 2296 |
2297 def Test_expr7_lambda_vim9script() | 2297 def Test_expr8_lambda_vim9script() |
2298 var lines =<< trim END | 2298 var lines =<< trim END |
2299 var v = 10->((a) => | 2299 var v = 10->((a) => |
2300 a | 2300 a |
2301 + 2 | 2301 + 2 |
2302 )() | 2302 )() |
2311 ->mapnew((_, v) => synIDattr(v, 'name'))->len()) | 2311 ->mapnew((_, v) => synIDattr(v, 'name'))->len()) |
2312 END | 2312 END |
2313 CheckDefAndScriptSuccess(lines) | 2313 CheckDefAndScriptSuccess(lines) |
2314 enddef | 2314 enddef |
2315 | 2315 |
2316 def Test_expr7_funcref() | 2316 def Test_expr8_funcref() |
2317 var lines =<< trim END | 2317 var lines =<< trim END |
2318 def RetNumber(): number | 2318 def RetNumber(): number |
2319 return 123 | 2319 return 123 |
2320 enddef | 2320 enddef |
2321 var FuncRef = RetNumber | 2321 var FuncRef = RetNumber |
2348 enddef | 2348 enddef |
2349 | 2349 |
2350 let g:test_space_dict = {'': 'empty', ' ': 'space'} | 2350 let g:test_space_dict = {'': 'empty', ' ': 'space'} |
2351 let g:test_hash_dict = #{one: 1, two: 2} | 2351 let g:test_hash_dict = #{one: 1, two: 2} |
2352 | 2352 |
2353 def Test_expr7_dict() | 2353 def Test_expr8_dict() |
2354 # dictionary | 2354 # dictionary |
2355 var lines =<< trim END | 2355 var lines =<< trim END |
2356 assert_equal(g:dict_empty, {}) | 2356 assert_equal(g:dict_empty, {}) |
2357 assert_equal(g:dict_empty, { }) | 2357 assert_equal(g:dict_empty, { }) |
2358 assert_equal(g:dict_one, {['one']: 1}) | 2358 assert_equal(g:dict_one, {['one']: 1}) |
2459 CheckDefFailure(['var x = ({'], 'E723:', 2) | 2459 CheckDefFailure(['var x = ({'], 'E723:', 2) |
2460 CheckScriptFailure(['vim9script', 'var x = ({'], 'E723:', 2) | 2460 CheckScriptFailure(['vim9script', 'var x = ({'], 'E723:', 2) |
2461 CheckDefExecAndScriptFailure(['{}[getftype("file")]'], 'E716: Key not present in Dictionary: ""', 1) | 2461 CheckDefExecAndScriptFailure(['{}[getftype("file")]'], 'E716: Key not present in Dictionary: ""', 1) |
2462 enddef | 2462 enddef |
2463 | 2463 |
2464 def Test_expr7_dict_vim9script() | 2464 def Test_expr8_dict_vim9script() |
2465 var lines =<< trim END | 2465 var lines =<< trim END |
2466 var d = { | 2466 var d = { |
2467 ['one']: | 2467 ['one']: |
2468 1, | 2468 1, |
2469 ['two']: 2, | 2469 ['two']: 2, |
2590 assert_equal({x: 99}, s:) | 2590 assert_equal({x: 99}, s:) |
2591 END | 2591 END |
2592 CheckScriptSuccess(lines) | 2592 CheckScriptSuccess(lines) |
2593 enddef | 2593 enddef |
2594 | 2594 |
2595 def Test_expr7_dict_in_block() | 2595 def Test_expr8_dict_in_block() |
2596 var lines =<< trim END | 2596 var lines =<< trim END |
2597 vim9script | 2597 vim9script |
2598 command MyCommand { | 2598 command MyCommand { |
2599 echo { | 2599 echo { |
2600 k: 0, } | 2600 k: 0, } |
2613 | 2613 |
2614 delcommand MyCommand | 2614 delcommand MyCommand |
2615 delcommand YourCommand | 2615 delcommand YourCommand |
2616 enddef | 2616 enddef |
2617 | 2617 |
2618 def Test_expr7_call_2bool() | 2618 def Test_expr8_call_2bool() |
2619 var lines =<< trim END | 2619 var lines =<< trim END |
2620 vim9script | 2620 vim9script |
2621 | 2621 |
2622 def BrokenCall(nr: number, mode: bool, use: string): void | 2622 def BrokenCall(nr: number, mode: bool, use: string): void |
2623 assert_equal(3, nr) | 2623 assert_equal(3, nr) |
2661 CheckDefAndScriptFailure(["var x = g:dict_one.#$!"], ['E1002:', 'E15:'], 1) | 2661 CheckDefAndScriptFailure(["var x = g:dict_one.#$!"], ['E1002:', 'E15:'], 1) |
2662 CheckDefExecAndScriptFailure(["var d: dict<any>", "echo d['a']"], 'E716:', 2) | 2662 CheckDefExecAndScriptFailure(["var d: dict<any>", "echo d['a']"], 'E716:', 2) |
2663 CheckDefExecAndScriptFailure(["var d: dict<number>", "d = g:list_empty"], 'E1012: Type mismatch; expected dict<number> but got list<unknown>', 2) | 2663 CheckDefExecAndScriptFailure(["var d: dict<number>", "d = g:list_empty"], 'E1012: Type mismatch; expected dict<number> but got list<unknown>', 2) |
2664 enddef | 2664 enddef |
2665 | 2665 |
2666 def Test_expr7_any_index_slice() | 2666 def Test_expr8_any_index_slice() |
2667 var lines =<< trim END | 2667 var lines =<< trim END |
2668 # getting the one member should clear the list only after getting the item | 2668 # getting the one member should clear the list only after getting the item |
2669 assert_equal('bbb', ['aaa', 'bbb', 'ccc'][1]) | 2669 assert_equal('bbb', ['aaa', 'bbb', 'ccc'][1]) |
2670 | 2670 |
2671 # string is permissive, index out of range accepted | 2671 # string is permissive, index out of range accepted |
2815 | 2815 |
2816 def SetSomeVar() | 2816 def SetSomeVar() |
2817 b:someVar = &fdm | 2817 b:someVar = &fdm |
2818 enddef | 2818 enddef |
2819 | 2819 |
2820 def Test_expr7_option() | 2820 def Test_expr8_option() |
2821 var lines =<< trim END | 2821 var lines =<< trim END |
2822 # option | 2822 # option |
2823 set ts=11 | 2823 set ts=11 |
2824 assert_equal(11, &ts) | 2824 assert_equal(11, &ts) |
2825 &ts = 9 | 2825 &ts = 9 |
2842 unlet b:someVar | 2842 unlet b:someVar |
2843 END | 2843 END |
2844 CheckDefAndScriptSuccess(lines) | 2844 CheckDefAndScriptSuccess(lines) |
2845 enddef | 2845 enddef |
2846 | 2846 |
2847 def Test_expr7_environment() | 2847 def Test_expr8_environment() |
2848 var lines =<< trim END | 2848 var lines =<< trim END |
2849 # environment variable | 2849 # environment variable |
2850 assert_equal('testvar', $TESTVAR) | 2850 assert_equal('testvar', $TESTVAR) |
2851 assert_equal('', $ASDF_ASD_XXX) | 2851 assert_equal('', $ASDF_ASD_XXX) |
2852 END | 2852 END |
2854 | 2854 |
2855 CheckDefAndScriptFailure(["var x = $$$"], ['E1002:', 'E15:'], 1) | 2855 CheckDefAndScriptFailure(["var x = $$$"], ['E1002:', 'E15:'], 1) |
2856 CheckDefAndScriptFailure(["$"], ['E1002:', 'E15:'], 1) | 2856 CheckDefAndScriptFailure(["$"], ['E1002:', 'E15:'], 1) |
2857 enddef | 2857 enddef |
2858 | 2858 |
2859 def Test_expr7_register() | 2859 def Test_expr8_register() |
2860 var lines =<< trim END | 2860 var lines =<< trim END |
2861 @a = 'register a' | 2861 @a = 'register a' |
2862 assert_equal('register a', @a) | 2862 assert_equal('register a', @a) |
2863 | 2863 |
2864 var fname = expand('%') | 2864 var fname = expand('%') |
2880 | 2880 |
2881 CheckDefAndScriptFailure(["@. = 'yes'"], ['E354:', 'E488:'], 1) | 2881 CheckDefAndScriptFailure(["@. = 'yes'"], ['E354:', 'E488:'], 1) |
2882 enddef | 2882 enddef |
2883 | 2883 |
2884 " This is slow when run under valgrind. | 2884 " This is slow when run under valgrind. |
2885 def Test_expr7_namespace() | 2885 def Test_expr8_namespace() |
2886 var lines =<< trim END | 2886 var lines =<< trim END |
2887 g:some_var = 'some' | 2887 g:some_var = 'some' |
2888 assert_equal('some', get(g:, 'some_var')) | 2888 assert_equal('some', get(g:, 'some_var')) |
2889 assert_equal('some', get(g:, 'some_var', 'xxx')) | 2889 assert_equal('some', get(g:, 'some_var', 'xxx')) |
2890 assert_equal('xxx', get(g:, 'no_var', 'xxx')) | 2890 assert_equal('xxx', get(g:, 'no_var', 'xxx')) |
2909 unlet t:some_var | 2909 unlet t:some_var |
2910 END | 2910 END |
2911 CheckDefAndScriptSuccess(lines) | 2911 CheckDefAndScriptSuccess(lines) |
2912 enddef | 2912 enddef |
2913 | 2913 |
2914 def Test_expr7_namespace_loop_def() | 2914 def Test_expr8_namespace_loop_def() |
2915 var lines =<< trim END | 2915 var lines =<< trim END |
2916 # check using g: in a for loop more than DO_NOT_FREE_CNT times | 2916 # check using g: in a for loop more than DO_NOT_FREE_CNT times |
2917 var exists = 0 | 2917 var exists = 0 |
2918 var exists_not = 0 | 2918 var exists_not = 0 |
2919 for i in range(100000) | 2919 for i in range(100000) |
2928 END | 2928 END |
2929 CheckDefSuccess(lines) | 2929 CheckDefSuccess(lines) |
2930 enddef | 2930 enddef |
2931 | 2931 |
2932 " NOTE: this is known to be slow. To skip use: | 2932 " NOTE: this is known to be slow. To skip use: |
2933 " :let $TEST_SKIP_PAT = 'Test_expr7_namespace_loop_script' | 2933 " :let $TEST_SKIP_PAT = 'Test_expr8_namespace_loop_script' |
2934 def Test_expr7_namespace_loop_script() | 2934 def Test_expr8_namespace_loop_script() |
2935 var lines =<< trim END | 2935 var lines =<< trim END |
2936 vim9script | 2936 vim9script |
2937 # check using g: in a for loop more than DO_NOT_FREE_CNT times | 2937 # check using g: in a for loop more than DO_NOT_FREE_CNT times |
2938 var exists = 0 | 2938 var exists = 0 |
2939 var exists_not = 0 | 2939 var exists_not = 0 |
2948 assert_equal(100000, exists_not) | 2948 assert_equal(100000, exists_not) |
2949 END | 2949 END |
2950 CheckScriptSuccess(lines) | 2950 CheckScriptSuccess(lines) |
2951 enddef | 2951 enddef |
2952 | 2952 |
2953 def Test_expr7_parens() | 2953 def Test_expr8_parens() |
2954 # (expr) | 2954 # (expr) |
2955 var lines =<< trim END | 2955 var lines =<< trim END |
2956 assert_equal(4, (6 * 4) / 6) | 2956 assert_equal(4, (6 * 4) / 6) |
2957 assert_equal(0, 6 * ( 4 / 6 )) | 2957 assert_equal(0, 6 * ( 4 / 6 )) |
2958 | 2958 |
2980 assert_equal('onetwo', s) | 2980 assert_equal('onetwo', s) |
2981 END | 2981 END |
2982 CheckDefAndScriptSuccess(lines) | 2982 CheckDefAndScriptSuccess(lines) |
2983 enddef | 2983 enddef |
2984 | 2984 |
2985 def Test_expr7_negate_add() | 2985 def Test_expr8_negate_add() |
2986 var lines =<< trim END | 2986 var lines =<< trim END |
2987 assert_equal(-99, -99) | 2987 assert_equal(-99, -99) |
2988 assert_equal(-99, - 99) | 2988 assert_equal(-99, - 99) |
2989 assert_equal(99, +99) | 2989 assert_equal(99, +99) |
2990 | 2990 |
3029 | 3029 |
3030 def LegacyReturn(): string | 3030 def LegacyReturn(): string |
3031 legacy return #{key: 'ok'}.key | 3031 legacy return #{key: 'ok'}.key |
3032 enddef | 3032 enddef |
3033 | 3033 |
3034 def Test_expr7_legacy_script() | 3034 def Test_expr8_legacy_script() |
3035 var lines =<< trim END | 3035 var lines =<< trim END |
3036 let s:legacy = 'legacy' | 3036 let s:legacy = 'legacy' |
3037 def GetLocal(): string | 3037 def GetLocal(): string |
3038 return legacy | 3038 return legacy |
3039 enddef | 3039 enddef |
3063 | 3063 |
3064 def s:Echo4Arg(arg: any): string | 3064 def s:Echo4Arg(arg: any): string |
3065 return arg | 3065 return arg |
3066 enddef | 3066 enddef |
3067 | 3067 |
3068 def Test_expr7_call() | 3068 def Test_expr8_call() |
3069 var lines =<< trim END | 3069 var lines =<< trim END |
3070 assert_equal('yes', 'yes'->Echo()) | 3070 assert_equal('yes', 'yes'->Echo()) |
3071 assert_equal(true, !range(5)->empty()) | 3071 assert_equal(true, !range(5)->empty()) |
3072 assert_equal([0, 1, 2], 3->range()) | 3072 assert_equal([0, 1, 2], 3->range()) |
3073 END | 3073 END |
3096 | 3096 |
3097 &rtp = save_rtp | 3097 &rtp = save_rtp |
3098 delete('Xruntime', 'rf') | 3098 delete('Xruntime', 'rf') |
3099 enddef | 3099 enddef |
3100 | 3100 |
3101 def Test_expr7_method_call() | 3101 def Test_expr8_method_call() |
3102 var lines =<< trim END | 3102 var lines =<< trim END |
3103 new | 3103 new |
3104 setline(1, ['first', 'last']) | 3104 setline(1, ['first', 'last']) |
3105 'second'->append(1) | 3105 'second'->append(1) |
3106 "third"->append(2) | 3106 "third"->append(2) |
3173 RetVoid()->byteidx(3) | 3173 RetVoid()->byteidx(3) |
3174 END | 3174 END |
3175 CheckDefExecFailure(lines, 'E1013:') | 3175 CheckDefExecFailure(lines, 'E1013:') |
3176 enddef | 3176 enddef |
3177 | 3177 |
3178 def Test_expr7_method_call_linebreak() | 3178 def Test_expr8_method_call_linebreak() |
3179 # this was giving an error when skipping over the expression | 3179 # this was giving an error when skipping over the expression |
3180 var lines =<< trim END | 3180 var lines =<< trim END |
3181 vim9script | 3181 vim9script |
3182 def Test() | 3182 def Test() |
3183 var a: dict<any> = {b: {}} | 3183 var a: dict<any> = {b: {}} |
3189 assert_equal('', v:errmsg) | 3189 assert_equal('', v:errmsg) |
3190 END | 3190 END |
3191 CheckScriptSuccess(lines) | 3191 CheckScriptSuccess(lines) |
3192 enddef | 3192 enddef |
3193 | 3193 |
3194 | 3194 def Test_expr8_method_call_import() |
3195 def Test_expr7_not() | 3195 var lines =<< trim END |
3196 vim9script | |
3197 export def Square(items: list<number>): list<number> | |
3198 return map(items, (_, i) => i * i) | |
3199 enddef | |
3200 END | |
3201 call writefile(lines, 'Xsquare.vim') | |
3202 | |
3203 lines =<< trim END | |
3204 vim9script | |
3205 import './Xsquare.vim' | |
3206 | |
3207 def Test(): list<number> | |
3208 return range(5) | |
3209 ->Xsquare.Square() | |
3210 ->map((_, i) => i * 10) | |
3211 enddef | |
3212 | |
3213 assert_equal([0, 10, 40, 90, 160], Test()) | |
3214 END | |
3215 CheckScriptSuccess(lines) | |
3216 | |
3217 delete('Xsquare.vim') | |
3218 enddef | |
3219 | |
3220 | |
3221 def Test_expr8_not() | |
3196 var lines =<< trim END | 3222 var lines =<< trim END |
3197 assert_equal(true, !'') | 3223 assert_equal(true, !'') |
3198 assert_equal(true, ![]) | 3224 assert_equal(true, ![]) |
3199 assert_equal(false, !'asdf') | 3225 assert_equal(false, !'asdf') |
3200 assert_equal(false, ![2]) | 3226 assert_equal(false, ![2]) |
3242 CheckDefAndScriptSuccess(lines) | 3268 CheckDefAndScriptSuccess(lines) |
3243 enddef | 3269 enddef |
3244 | 3270 |
3245 let g:anumber = 42 | 3271 let g:anumber = 42 |
3246 | 3272 |
3247 def Test_expr7_negate() | 3273 def Test_expr8_negate() |
3248 var lines =<< trim END | 3274 var lines =<< trim END |
3249 var nr = 1 | 3275 var nr = 1 |
3250 assert_equal(-1, -nr) | 3276 assert_equal(-1, -nr) |
3251 assert_equal(-42, -g:anumber) | 3277 assert_equal(-42, -g:anumber) |
3252 END | 3278 END |
3253 CheckDefAndScriptSuccess(lines) | 3279 CheckDefAndScriptSuccess(lines) |
3254 enddef | 3280 enddef |
3255 | 3281 |
3256 func Test_expr7_fails() | 3282 func Test_expr8_fails() |
3257 call CheckDefFailure(["var x = (12"], "E1097:", 3) | 3283 call CheckDefFailure(["var x = (12"], "E1097:", 3) |
3258 call CheckScriptFailure(['vim9script', "var x = (12"], 'E110:', 2) | 3284 call CheckScriptFailure(['vim9script', "var x = (12"], 'E110:', 2) |
3259 | 3285 |
3260 call CheckDefAndScriptFailure(["var x = -'xx'"], "E1030:", 1) | 3286 call CheckDefAndScriptFailure(["var x = -'xx'"], "E1030:", 1) |
3261 call CheckDefAndScriptFailure(["var x = +'xx'"], "E1030:", 1) | 3287 call CheckDefAndScriptFailure(["var x = +'xx'"], "E1030:", 1) |
3311 | 3337 |
3312 func CallMe2(one, two) | 3338 func CallMe2(one, two) |
3313 return a:one .. a:two | 3339 return a:one .. a:two |
3314 endfunc | 3340 endfunc |
3315 | 3341 |
3316 def Test_expr7_trailing() | 3342 def Test_expr8_trailing() |
3317 var lines =<< trim END | 3343 var lines =<< trim END |
3318 # user function call | 3344 # user function call |
3319 assert_equal(123, g:CallMe(123)) | 3345 assert_equal(123, g:CallMe(123)) |
3320 assert_equal(123, g:CallMe( 123)) | 3346 assert_equal(123, g:CallMe( 123)) |
3321 assert_equal(123, g:CallMe(123 )) | 3347 assert_equal(123, g:CallMe(123 )) |
3347 assert_equal(123, d.key) | 3373 assert_equal(123, d.key) |
3348 END | 3374 END |
3349 CheckDefAndScriptSuccess(lines) | 3375 CheckDefAndScriptSuccess(lines) |
3350 enddef | 3376 enddef |
3351 | 3377 |
3352 def Test_expr7_string_subscript() | 3378 def Test_expr8_string_subscript() |
3353 var lines =<< trim END | 3379 var lines =<< trim END |
3354 var text = 'abcdef' | 3380 var text = 'abcdef' |
3355 assert_equal('f', text[-1]) | 3381 assert_equal('f', text[-1]) |
3356 assert_equal('a', text[0]) | 3382 assert_equal('a', text[0]) |
3357 assert_equal('e', text[4]) | 3383 assert_equal('e', text[4]) |
3446 echo d | 3472 echo d |
3447 END | 3473 END |
3448 CheckDefAndScriptFailure(lines, ['E1012: Type mismatch; expected number but got string', 'E1030: Using a String as a Number: "2"'], 1) | 3474 CheckDefAndScriptFailure(lines, ['E1012: Type mismatch; expected number but got string', 'E1030: Using a String as a Number: "2"'], 1) |
3449 enddef | 3475 enddef |
3450 | 3476 |
3451 def Test_expr7_list_subscript() | 3477 def Test_expr8_list_subscript() |
3452 var lines =<< trim END | 3478 var lines =<< trim END |
3453 var list = [0, 1, 2, 3, 4] | 3479 var list = [0, 1, 2, 3, 4] |
3454 assert_equal(0, list[0]) | 3480 assert_equal(0, list[0]) |
3455 assert_equal(4, list[4]) | 3481 assert_equal(4, list[4]) |
3456 assert_equal(4, list[-1]) | 3482 assert_equal(4, list[-1]) |
3489 defcompile | 3515 defcompile |
3490 END | 3516 END |
3491 CheckDefAndScriptSuccess(lines) | 3517 CheckDefAndScriptSuccess(lines) |
3492 enddef | 3518 enddef |
3493 | 3519 |
3494 def Test_expr7_dict_subscript() | 3520 def Test_expr8_dict_subscript() |
3495 var lines =<< trim END | 3521 var lines =<< trim END |
3496 var l = [{lnum: 2}, {lnum: 1}] | 3522 var l = [{lnum: 2}, {lnum: 1}] |
3497 var res = l[0].lnum > l[1].lnum | 3523 var res = l[0].lnum > l[1].lnum |
3498 assert_true(res) | 3524 assert_true(res) |
3499 | 3525 |
3510 defcompile | 3536 defcompile |
3511 END | 3537 END |
3512 CheckDefAndScriptSuccess(lines) | 3538 CheckDefAndScriptSuccess(lines) |
3513 enddef | 3539 enddef |
3514 | 3540 |
3515 def Test_expr7_blob_subscript() | 3541 def Test_expr8_blob_subscript() |
3516 var lines =<< trim END | 3542 var lines =<< trim END |
3517 var b = 0z112233 | 3543 var b = 0z112233 |
3518 assert_equal(0x11, b[0]) | 3544 assert_equal(0x11, b[0]) |
3519 assert_equal(0z112233, b[:]) | 3545 assert_equal(0z112233, b[:]) |
3520 | 3546 |
3522 assert_equal(0z01ab, g:ablob[:]) | 3548 assert_equal(0z01ab, g:ablob[:]) |
3523 END | 3549 END |
3524 CheckDefAndScriptSuccess(lines) | 3550 CheckDefAndScriptSuccess(lines) |
3525 enddef | 3551 enddef |
3526 | 3552 |
3527 def Test_expr7_subscript_linebreak() | 3553 def Test_expr8_subscript_linebreak() |
3528 var lines =<< trim END | 3554 var lines =<< trim END |
3529 var range = range( | 3555 var range = range( |
3530 3) | 3556 3) |
3531 var l = range | 3557 var l = range |
3532 ->mapnew('string(v:key)') | 3558 ->mapnew('string(v:key)') |
3565 one) | 3591 one) |
3566 END | 3592 END |
3567 CheckDefAndScriptFailure(lines, ['E1127:', 'E116:'], 2) | 3593 CheckDefAndScriptFailure(lines, ['E1127:', 'E116:'], 2) |
3568 enddef | 3594 enddef |
3569 | 3595 |
3570 func Test_expr7_trailing_fails() | 3596 func Test_expr8_trailing_fails() |
3571 call CheckDefAndScriptFailure(['var l = [2]', 'l->((ll) => add(ll, 8))'], 'E107:', 2) | 3597 call CheckDefAndScriptFailure(['var l = [2]', 'l->((ll) => add(ll, 8))'], 'E107:', 2) |
3572 call CheckDefAndScriptFailure(['var l = [2]', 'l->((ll) => add(ll, 8)) ()'], 'E274:', 2) | 3598 call CheckDefAndScriptFailure(['var l = [2]', 'l->((ll) => add(ll, 8)) ()'], 'E274:', 2) |
3573 endfunc | 3599 endfunc |
3574 | 3600 |
3575 func Test_expr_fails() | 3601 func Test_expr_fails() |