annotate src/testdir/test_vim9_typealias.vim @ 35245:66bb9dc0fe1f default tip

Added tag v9.1.0432 for changeset 8f04cf65ecff1ae5c9b24f3b503afe96d5b904bb
author Christian Brabandt <cb@256bit.org>
date Wed, 22 May 2024 17:00:08 +0200
parents 920e132817da
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
1 " Test Vim9 type aliases
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
3 source check.vim
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
4 import './vim9.vim' as v9
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
6 " Test for :type command to create type aliases
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
7 def Test_typealias()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
8 # Use type alias at script level
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
9 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11 type ListOfStrings = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
12 def Foo(a: ListOfStrings): ListOfStrings
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
13 return a
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
14 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
15 var b: ListOfStrings = ['a', 'b']
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
16 assert_equal(['a', 'b'], b)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
17 assert_equal(['e', 'f'], Foo(['e', 'f']))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
18 assert_equal('typealias<list<string>>', typename(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
19 assert_equal(v:t_typealias, type(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
20 assert_equal('ListOfStrings', string(ListOfStrings))
34006
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
21 assert_fails('var x = null == ListOfStrings', 'E1403: Type alias "ListOfStrings" cannot be used as a value')
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
22 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
23 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
24
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
25 # Use type alias at def function level
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
26 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
27 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
28 type ListOfStrings = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
29 def Foo(a: ListOfStrings): ListOfStrings
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
30 return a
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
31 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
32 def Bar()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
33 var c: ListOfStrings = ['c', 'd']
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
34 assert_equal(['c', 'd'], c)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
35 assert_equal(['e', 'f'], Foo(['e', 'f']))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
36 assert_equal('typealias<list<string>>', typename(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
37 assert_equal(v:t_typealias, type(ListOfStrings))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
38 assert_equal('ListOfStrings', string(ListOfStrings))
34006
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
39 #assert_equal(false, null == ListOfStrings)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
40 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
41 Bar()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
42 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
43 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
44
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
45 # Use :type outside a Vim9 script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
46 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
47 type Index = number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
48 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
49 v9.CheckSourceFailure(lines, 'E1393: Type can only be defined in Vim9 script', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
50
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
51 # Use :type without any arguments
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
52 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
53 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
54 type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
55 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
56 v9.CheckSourceFailure(lines, 'E1397: Missing type alias name', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
57
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
58 # Use :type with a name but no type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
59 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
60 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
61 type MyType
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
62 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
63 v9.CheckSourceFailure(lines, "E398: Missing '=': ", 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
64
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
65 # Use :type with a name but no type following "="
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
66 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
67 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
68 type MyType =
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
69 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
70 v9.CheckSourceFailure(lines, 'E1398: Missing type alias type', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
71
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
72 # No space before or after "="
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
73 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
74 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
75 type MyType=number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
76 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
77 v9.CheckSourceFailure(lines, 'E1315: White space required after name: MyType=number', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
78
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
79 # No space after "="
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
80 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
81 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
82 type MyType =number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
83 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
84 v9.CheckSourceFailure(lines, "E1069: White space required after '=': =number", 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
85
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
86 # type alias without "="
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
87 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
88 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
89 type Index number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
90 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
91 v9.CheckSourceFailure(lines, "E398: Missing '=': number", 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
92
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
93 # type alias for a non-existing type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
94 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
95 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
96 type Index = integer
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
97 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
98 v9.CheckSourceFailure(lines, 'E1010: Type not recognized: integer', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
99
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
100 # type alias starting with lower-case letter
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
101 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
102 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
103 type index = number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
104 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
105 v9.CheckSourceFailure(lines, 'E1394: Type name must start with an uppercase letter: index = number', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
106
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
107 # No white space following the alias name
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
108 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
109 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
110 type Index:number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
111 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
112 v9.CheckSourceFailure(lines, 'E1315: White space required after name: Index:number', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
113
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
114 # something following the type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
115 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
116 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
117 type ListOfNums = list<number> string
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
118 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
119 v9.CheckSourceFailure(lines, 'E488: Trailing characters: string', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
120
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
121 # type alias name collides with a variable name
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
122 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
123 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
124 var ListOfNums: number = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
125 type ListOfNums = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
126 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
127 v9.CheckSourceFailure(lines, 'E1041: Redefining script item: "ListOfNums"', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
128
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
129 # duplicate type alias name
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
130 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
131 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
132 type MyList = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
133 type MyList = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
134 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
135 v9.CheckSourceFailure(lines, 'E1396: Type alias "MyList" already exists', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
136
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
137 # def function argument name collision with a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
138 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
139 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
140 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
141 def Foo(A: number)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
142 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
143 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
144 v9.CheckSourceFailure(lines, 'E1168: Argument already declared in the script: A: number)', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
145
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
146 # def function local variable name collision with a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
147 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
148 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
149 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
150 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
151 var A: number = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
152 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
153 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
154 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
155 v9.CheckSourceFailure(lines, 'E1054: Variable already declared in the script: A', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
156
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
157 # type alias a variable
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
158 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
159 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
160 var A: list<number> = []
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
161 type B = A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
162 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
163 v9.CheckSourceFailure(lines, 'E1010: Type not recognized: A', 3)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
164
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
165 # type alias a class
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
166 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
167 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
168 class C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
169 endclass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
170 type AC = C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
171 assert_equal('class<C>', typename(AC))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
172 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
173 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
174
35062
f57990be7526 patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
Christian Brabandt <cb@256bit.org>
parents: 34344
diff changeset
175 # another command follows a type alias
f57990be7526 patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
Christian Brabandt <cb@256bit.org>
parents: 34344
diff changeset
176 lines =<< trim END
f57990be7526 patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
Christian Brabandt <cb@256bit.org>
parents: 34344
diff changeset
177 vim9script
f57990be7526 patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
Christian Brabandt <cb@256bit.org>
parents: 34344
diff changeset
178 type MyType = number | var x = 20
f57990be7526 patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
Christian Brabandt <cb@256bit.org>
parents: 34344
diff changeset
179 assert_equal(20, x)
f57990be7526 patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
Christian Brabandt <cb@256bit.org>
parents: 34344
diff changeset
180 END
f57990be7526 patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
Christian Brabandt <cb@256bit.org>
parents: 34344
diff changeset
181 v9.CheckSourceSuccess(lines)
f57990be7526 patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
Christian Brabandt <cb@256bit.org>
parents: 34344
diff changeset
182
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
183 # Sourcing a script twice (which will free script local variables)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
184 # Uses "lines" from the previous test
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
185 new
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
186 setline(1, lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
187 :source
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
188 :source
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
189 bw!
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
190
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
191 # type alias a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
192 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
193 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
194 type A = string
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
195 type B = A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
196 var b: B = 'abc'
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
197 assert_equal('abc', b)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
198 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
199 var c: B = 'def'
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
200 assert_equal('def', c)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
201 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
202 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
203 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
204 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
205
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
206 # Assigning to a type alias (script level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
207 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
208 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
209 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
210 MyType = [1, 2, 3]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
211 END
34006
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
212 v9.CheckSourceFailure(lines, 'E1403: Type alias "MyType" cannot be used as a value', 3)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
213
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
214 # Assigning a type alias (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
215 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
216 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
217 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
218 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
219 var x = A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
220 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
221 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
222 END
33924
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
223 v9.CheckSourceFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
224
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
225 # Using type alias in an expression (script level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
226 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
227 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
228 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
229 assert_fails('var m = MyType', 'E1403: Type alias "MyType" cannot be used as a value')
34006
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
230 assert_fails('var i = MyType + 1', 'E1403: Type alias "MyType" cannot be used as a value')
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
231 assert_fails('var f = 1.0 + MyType', 'E1403: Type alias "MyType" cannot be used as a value')
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
232 assert_fails('MyType += 10', 'E1403: Type alias "MyType" cannot be used as a value')
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
233 assert_fails('var x = $"-{MyType}-"', 'E1403: Type alias "MyType" cannot be used as a value')
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
234 assert_fails('var x = MyType[1]', 'E1403: Type alias "MyType" cannot be used as a value')
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
235 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
236 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
237
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
238 # Using type alias in an expression (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
239 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
240 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
241 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
242 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
243 var x = MyType + 1
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
244 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
245 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
246 END
34006
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
247 v9.CheckSourceFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
248
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
249 # Using type alias in an expression (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
250 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
251 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
252 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
253 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
254 MyType = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
255 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
256 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
257 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
258 v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "MyType"', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
259
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
260 # Using type alias in an expression (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
261 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
262 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
263 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
264 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
265 MyType += 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
266 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
267 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
268 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
269 v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "MyType"', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
270
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
271 # Convert type alias to a string (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
272 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
273 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
274 type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
275 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
276 var x = $"-{MyType}-"
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
277 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
278 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
279 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
280 v9.CheckSourceFailure(lines, 'E1105: Cannot convert typealias to string', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
281
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
282 # Using type alias as a float
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
283 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
284 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
285 type B = number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
286 sort([1.1, B], 'f')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
287 END
33933
aceaf677dd92 patch 9.0.2163: Vim9: type can be assigned to list/dict
Christian Brabandt <cb@256bit.org>
parents: 33924
diff changeset
288 v9.CheckSourceFailure(lines, 'E1403: Type alias "B" cannot be used as a value', 3)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
289
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
290 # Creating a typealias in a def function
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
291 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
292 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
293 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
294 var n: number = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
295 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
296 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
297 defcompile
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
298 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
299 v9.CheckSourceFailure(lines, 'E1399: Type can only be used in a script', 2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
300
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
301 # json_encode should fail with a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
302 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
303 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
304 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
305 var x = json_encode(A)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
306 END
33949
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
307 v9.CheckSourceFailure(lines, 'E1403: Type alias "A" cannot be used as a value', 3)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
308
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
309 # Comparing type alias with a number (script level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
310 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
311 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
312 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
313 var n: number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
314 var x = A == n
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
315 END
34006
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
316 v9.CheckSourceFailure(lines, 'E1403: Type alias "A" cannot be used as a value', 4)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
317
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
318 # Comparing type alias with a number (def function level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
319 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
320 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
321 type A = list<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
322 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
323 var n: number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
324 var x = A == n
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
325 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
326 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
327 END
34006
ab6a70fad5b5 patch 9.0.2184: Vim9: inconsistent :type/:class messages
Christian Brabandt <cb@256bit.org>
parents: 33949
diff changeset
328 v9.CheckSourceFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 2)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
329
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
330 # casting a number to a type alias (script level)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
331 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
332 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
333 type MyType = bool
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
334 assert_equal(true, <MyType>1 == true)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
335 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
336 v9.CheckSourceSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
337 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
338
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
339 " Test for exporting and importing type aliases
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
340 def Test_typealias_import()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
341 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
342 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
343 export type MyType = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
344 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
345 writefile(lines, 'Xtypeexport.vim', 'D')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
346
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
347 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
348 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
349 import './Xtypeexport.vim' as A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
350
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
351 var myList: A.MyType = [1, 2, 3]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
352 def Foo(l: A.MyType)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
353 assert_equal([1, 2, 3], l)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
354 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
355 Foo(myList)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
356 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
357 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
358
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
359 # Use a non existing type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
360 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
361 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
362 import './Xtypeexport.vim' as A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
363
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
364 var myNum: A.SomeType = 10
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
365 END
35141
920e132817da patch 9.1.0400: Vim9: confusing error message for unknown type
Christian Brabandt <cb@256bit.org>
parents: 35062
diff changeset
366 v9.CheckScriptFailure(lines, 'E1010: Type not recognized: A.SomeType', 4)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
367
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
368 # Use a type alias that is not exported
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
369 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
370 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
371 type NewType = dict<string>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
372 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
373 writefile(lines, 'Xtypeexport2.vim', 'D')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
374 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
375 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
376 import './Xtypeexport2.vim' as A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
377
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
378 var myDict: A.NewType = {}
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
379 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
380 v9.CheckScriptFailure(lines, 'E1049: Item not exported in script: NewType', 4)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
381
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
382 # Using the same name as an imported type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
383 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
384 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
385 export type MyType2 = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
386 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
387 writefile(lines, 'Xtypeexport3.vim', 'D')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
388 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
389 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
390 import './Xtypeexport3.vim' as A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
391
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
392 type MyType2 = A.MyType2
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
393 var myList1: A.MyType2 = [1, 2, 3]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
394 var myList2: MyType2 = [4, 5, 6]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
395 assert_equal([1, 2, 3], myList1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
396 assert_equal([4, 5, 6], myList2)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
397 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
398 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
399
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
400 # Using an exported class to create a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
401 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
402 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
403 export class MyClass
33942
3bba09502b8d patch 9.0.2167: Vim9: not consistently using :var for declarations
Christian Brabandt <cb@256bit.org>
parents: 33936
diff changeset
404 var val = 10
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
405 endclass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
406 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
407 writefile(lines, 'Xtypeexport4.vim', 'D')
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
408 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
409 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
410 import './Xtypeexport4.vim' as T
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
411
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
412 type MyType3 = T.MyClass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
413 var c: MyType3 = MyType3.new()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
414 assert_equal(10, c.val)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
415 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
416 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
417 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
418
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
419 " Test for using typealias as a def function argument and return type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
420 def Test_typealias_func_argument()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
421 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
422 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
423 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
424 def Foo(l: A): A
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
425 assert_equal([1, 2], l)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
426 return l
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
427 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
428 var x: A = [1, 2]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
429 assert_equal([1, 2], Foo(x))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
430 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
431 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
432
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
433 # passing a type alias variable to a function expecting a specific type
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
434 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
435 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
436 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
437 def Foo(l: list<number>)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
438 assert_equal([1, 2], l)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
439 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
440 var x: A = [1, 2]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
441 Foo(x)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
442 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
443 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
444
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
445 # passing a type alias variable to a function expecting any
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
446 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
447 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
448 type A = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
449 def Foo(l: any)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
450 assert_equal([1, 2], l)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
451 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
452 var x: A = [1, 2]
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
453 Foo(x)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
454 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
455 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
456 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
457
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
458 " Using a type alias with a builtin function
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
459 def Test_typealias_with_builtin_functions()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
460 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
461 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
462 type A = list<func>
33949
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
463 var x = empty(A)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
464 END
33949
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
465 v9.CheckScriptFailure(lines, 'E1403: Type alias "A" cannot be used as a value', 3)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
466
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
467 # Using a type alias with len()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
468 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
469 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
470 type A = list<func>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
471 var x = len(A)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
472 END
33949
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
473 v9.CheckScriptFailure(lines, 'E1403: Type alias "A" cannot be used as a value', 3)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
474
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
475 # Using a type alias with len()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
476 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
477 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
478 type A = list<func>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
479 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
480 var x = len(A)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
481 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
482 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
483 END
33949
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
484 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
485
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
486 # Using a type alias with eval()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
487 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
488 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
489 type A = number
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
490 def Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
491 var x = eval("A")
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
492 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
493 Foo()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
494 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
495 v9.CheckScriptFailure(lines, 'E1403: Type alias "A" cannot be used as a value', 1)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
496 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
497
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
498 " Test for type alias refcount
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
499 def Test_typealias_refcount()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
500 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
501 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
502 type A = list<func>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
503 assert_equal(1, test_refcount(A))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
504 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
505 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
506
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
507 lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
508 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
509 type B = list<number>
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
510 var x: B = []
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
511 assert_equal(1, test_refcount(B))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
512 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
513 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
514 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
515
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
516 " Test for using instanceof() with a type alias
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
517 def Test_typealias_instanceof()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
518 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
519 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
520 class C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
521 endclass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
522
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
523 type Ctype = C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
524 var o = C.new()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
525 assert_equal(1, instanceof(o, Ctype))
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
526 type Ntype = number
33924
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
527 assert_fails('instanceof(o, Ntype)', 'E693: Class or class typealias required for argument 2')
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
528 assert_fails('instanceof(o, Ctype, Ntype)', 'E693: Class or class typealias required for argument 3')
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
529
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
530 def F()
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
531 var x = instanceof(o, Ntype)
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
532 enddef
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
533 assert_fails('F()', 'E693: Class or class typealias required for argument 2')
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
534
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
535 def G(): bool
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
536 return instanceof(o, Ctype)
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
537 enddef
ccdb948c7273 patch 9.0.2160: instanceof() should use varargs as second arg
Christian Brabandt <cb@256bit.org>
parents: 33913
diff changeset
538 assert_equal(1, G())
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
539 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
540 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
541 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
542
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
543 " Test for type aliasing a class
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
544 def Test_typealias_class()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
545 var lines =<< trim END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
546 vim9script
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
547 class C
33942
3bba09502b8d patch 9.0.2167: Vim9: not consistently using :var for declarations
Christian Brabandt <cb@256bit.org>
parents: 33936
diff changeset
548 var color = 'green'
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
549 endclass
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
550 type MyClass = C
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
551 var o: MyClass = MyClass.new()
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
552 assert_equal('green', o.color)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
553 END
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
554 v9.CheckScriptSuccess(lines)
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
555 enddef
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
556
33936
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
557 " Test for typealias as function arg and return value
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
558 def Test_type_as_func_argument_or_return_value()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
559 # check typealias as arg, function call in script level
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
560 var lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
561 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
562 type A = number
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
563 def Foo(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
564 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
565 Foo(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
566 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
567 v9.CheckScriptFailure(lines, 'E1403: Type alias "A" cannot be used as a value', 5)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
568
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
569 # check typealias as function return, function call in script level
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
570 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
571 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
572 type A = number
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
573 def Foo(): any
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
574 return A
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
575 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
576 Foo()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
577 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
578 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
579
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
580 # check typealias as arg, function call in :def
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
581 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
582 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
583 type A = number
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
584 def Foo(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
585 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
586 def F()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
587 Foo(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
588 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
589 F()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
590 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
591 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
592
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
593 # check typealias as function return, function call in :def
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
594 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
595 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
596 type A = number
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
597 def Foo(): any
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
598 return A
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
599 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
600 def F()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
601 Foo()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
602 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
603 F()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
604 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
605 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
606
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
607 # check funcref using typealias as arg at script level
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
608 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
609 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
610 type A = number
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
611 def F(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
612 echo typename(arg)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
613 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
614 var Fref: func(any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
615 Fref = F
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
616
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
617 Fref(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
618 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
619 v9.CheckScriptFailure(lines, 'E1403: Type alias "A" cannot be used as a value', 9)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
620
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
621 # check funcref using typealias as arg in :def
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
622 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
623 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
624 type A = number
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
625 def F(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
626 echo typename(arg)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
627 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
628 var Fref: func(any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
629 Fref = F
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
630
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
631 def G()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
632 Fref(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
633 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
634 G()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
635 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
636 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
637
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
638 # check funcref using typealias as return
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
639 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
640 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
641 type A = number
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
642 def F(): any
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
643 return A
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
644 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
645 var Fref: func(): any
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
646 Fref = F
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
647
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
648 Fref()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
649 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
650 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
651
34344
be4389b04043 patch 9.1.0105: Style: typos found
Christian Brabandt <cb@256bit.org>
parents: 34006
diff changeset
652 # check deferred function using typealias as arg
33936
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
653 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
654 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
655 type A = number
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
656 def F(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
657 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
658 def G()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
659 defer F(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
660 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
661 G()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
662 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
663 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
664 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
665
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
666 " Test for class typealias as function arg and return value
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
667 def Test_class_as_func_argument_or_return_value()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
668 # check class typealias as arg, function call in script level
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
669 var lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
670 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
671 class C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
672 endclass
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
673 type A = C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
674 def Foo(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
675 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
676 Foo(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
677 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
678 v9.CheckScriptFailure(lines, 'E1405: Class "C" cannot be used as a value', 7)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
679
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
680 # check class typealias as function return, function call in script level
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
681 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
682 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
683 class C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
684 endclass
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
685 type A = C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
686 def Foo(): any
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
687 return A
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
688 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
689 Foo()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
690 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
691 v9.CheckScriptFailure(lines, 'E1405: Class "C" cannot be used as a value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
692
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
693 # check class typealias as arg, function call in :def
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
694 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
695 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
696 class C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
697 endclass
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
698 type A = C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
699 def Foo(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
700 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
701 def F()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
702 Foo(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
703 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
704 F()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
705 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
706 v9.CheckScriptFailure(lines, 'E1405: Class "C" cannot be used as a value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
707
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
708 # check class typealias as function return, function call in :def
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
709 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
710 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
711 class C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
712 endclass
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
713 type A = C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
714 def Foo(): any
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
715 return A
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
716 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
717 def F()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
718 Foo()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
719 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
720 F()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
721 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
722 v9.CheckScriptFailure(lines, 'E1405: Class "C" cannot be used as a value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
723
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
724 # check funcref using class typealias as arg at script level
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
725 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
726 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
727 class C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
728 endclass
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
729 type A = C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
730 def F(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
731 echo typename(arg)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
732 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
733 var Fref: func(any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
734 Fref = F
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
735
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
736 Fref(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
737 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
738 v9.CheckScriptFailure(lines, 'E1405: Class "C" cannot be used as a value', 11)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
739
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
740 # check funcref using class typealias as arg in :def
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
741 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
742 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
743 class C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
744 endclass
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
745 type A = C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
746 def F(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
747 echo typename(arg)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
748 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
749 var Fref: func(any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
750 Fref = F
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
751
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
752 def G()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
753 Fref(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
754 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
755 G()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
756 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
757 v9.CheckScriptFailure(lines, 'E1405: Class "C" cannot be used as a value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
758
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
759 # check funcref using class typealias as return
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
760 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
761 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
762 class C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
763 endclass
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
764 type A = C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
765 def F(): any
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
766 return A
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
767 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
768 var Fref: func(): any
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
769 Fref = F
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
770
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
771 Fref()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
772 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
773 v9.CheckScriptFailure(lines, 'E1405: Class "C" cannot be used as a value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
774
34344
be4389b04043 patch 9.1.0105: Style: typos found
Christian Brabandt <cb@256bit.org>
parents: 34006
diff changeset
775 # check deferred function using class typealias as arg
33936
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
776 lines =<< trim END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
777 vim9script
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
778 class C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
779 endclass
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
780 type A = C
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
781 def F(arg: any)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
782 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
783 def G()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
784 defer F(A)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
785 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
786 G()
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
787 END
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
788 v9.CheckScriptFailure(lines, 'E1405: Class "C" cannot be used as a value', 1)
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
789 enddef
bdd408288d95 patch 9.0.2164: Vim9: can use type a func arg/return value
Christian Brabandt <cb@256bit.org>
parents: 33933
diff changeset
790
33949
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
791 def Test_passing_typealias_to_builtin()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
792 # type, typename, string, instanceof are allowed type argument
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
793 var lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
794 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
795 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
796 var x: any
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
797 x = type(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
798 x = typename(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
799 x = string(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
800 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
801 v9.CheckScriptSuccess(lines)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
802
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
803 # check argument to add at script level
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
804 # Note: add() is special cased in compile_call in vim9expr
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
805 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
806 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
807 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
808 add([], T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
809 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
810 v9.CheckScriptFailure(lines, 'E1403: Type alias "T" cannot be used as a value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
811
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
812 # check argument to add in :def
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
813 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
814 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
815 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
816 def F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
817 add([], T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
818 enddef
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
819 F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
820 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
821 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
822
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
823 # check member call argument to add at script level
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
824 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
825 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
826 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
827 []->add(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
828 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
829 v9.CheckScriptFailure(lines, 'E1403: Type alias "T" cannot be used as a value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
830
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
831 # check member call argument to add in :def
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
832 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
833 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
834 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
835 def F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
836 []->add(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
837 enddef
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
838 F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
839 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
840 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
841
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
842 # Try "empty()" builtin
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
843 # check argument to empty at script level
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
844 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
845 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
846 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
847 empty(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
848 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
849 v9.CheckScriptFailure(lines, 'E1403: Type alias "T" cannot be used as a value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
850
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
851 # check argument to empty in :def
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
852 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
853 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
854 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
855 def F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
856 empty(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
857 enddef
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
858 F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
859 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
860 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
861
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
862 # check member call argument to empty at script level
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
863 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
864 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
865 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
866 T->empty()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
867 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
868 v9.CheckScriptFailure(lines, 'E1403: Type alias "T" cannot be used as a value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
869
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
870 # check member call argument to empty in :def
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
871 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
872 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
873 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
874 def F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
875 T->empty()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
876 enddef
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
877 F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
878 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
879 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
880
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
881 # Try "abs()" builtin
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
882 # check argument to abs at script level
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
883 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
884 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
885 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
886 abs(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
887 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
888 v9.CheckScriptFailure(lines, 'E1403: Type alias "T" cannot be used as a value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
889
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
890 # check argument to abs in :def
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
891 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
892 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
893 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
894 def F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
895 abs(T)
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
896 enddef
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
897 F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
898 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
899 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
900
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
901 # check member call argument to abs at script level
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
902 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
903 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
904 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
905 T->abs()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
906 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
907 v9.CheckScriptFailure(lines, 'E1403: Type alias "T" cannot be used as a value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
908
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
909 # check member call argument to abs in :def
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
910 lines =<< trim END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
911 vim9script
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
912 type T = number
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
913 def F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
914 T->abs()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
915 enddef
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
916 F()
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
917 END
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
918 v9.CheckScriptFailure(lines, 'E1407: Cannot use a Typealias as a variable or value')
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
919 enddef
84b93d95a952 patch 9.0.2169: Vim9: builtin funcs may accept a non-value
Christian Brabandt <cb@256bit.org>
parents: 33942
diff changeset
920
33687
9a932ba43f6e patch 9.0.2080: vim9_script test too large
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
921 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker