1 | #### Augmented assignment doesn't work on List
|
2 |
|
3 | # I suppose the logic is that string and array concat is ++
|
4 | #
|
5 | # I wonder if a ++= operator makes sense?
|
6 |
|
7 | shopt -s parse_at simple_word_eval
|
8 | var x = :| a 'b c' |
|
9 | argv.py @x
|
10 |
|
11 | setvar x += :| d e | # fatal error
|
12 | argv.py @x
|
13 | ## status: 3
|
14 | ## STDOUT:
|
15 | ['a', 'b c']
|
16 | ## END
|
17 |
|
18 | #### Augmented assignment respects command_sub_errexit
|
19 |
|
20 |
|
21 | var x = '42'
|
22 | setvar x += $(echo 3)
|
23 | echo x=$x
|
24 |
|
25 | setvar x += $(echo 3; false)
|
26 | echo x=$x
|
27 |
|
28 | ## status: 1
|
29 | ## STDOUT:
|
30 | x=45
|
31 | ## END
|
32 |
|
33 |
|
34 | #### Augmented assignment with integers
|
35 | var x = 1 + 2 * 3
|
36 | echo x=$x
|
37 |
|
38 | setvar x += 4 * 1
|
39 | echo x=$x
|
40 | ## STDOUT:
|
41 | x=7
|
42 | x=11
|
43 | ## END
|
44 |
|
45 | #### Augmented assignment on string changes to Int Float
|
46 |
|
47 | var x = '42'
|
48 | pp line (x)
|
49 |
|
50 | setvar x += 4 * 1
|
51 | pp line (x)
|
52 |
|
53 | setvar x += '9'
|
54 | pp line (x)
|
55 |
|
56 | setvar x = '42'
|
57 | setvar x /= 4
|
58 | pp line (x)
|
59 |
|
60 | ## STDOUT:
|
61 | (Str) "42"
|
62 | (Int) 46
|
63 | (Int) 55
|
64 | (Float) 10.5
|
65 | ## END
|
66 |
|
67 | #### Augmented assignment with floats
|
68 |
|
69 | var x = 42
|
70 |
|
71 | setvar x += 1.5
|
72 | echo $x
|
73 |
|
74 | setvar x += '1.5'
|
75 | echo $x
|
76 |
|
77 | setvar x += '3'
|
78 | echo $x
|
79 | ## STDOUT:
|
80 | 43.5
|
81 | 45.0
|
82 | 48.0
|
83 | ## END
|
84 |
|
85 | #### Int/Float augmented += -= *= /=
|
86 |
|
87 | var x = 0
|
88 |
|
89 | setvar x = 10
|
90 | setvar x -= 3
|
91 | echo x=$x
|
92 |
|
93 | setvar x = 10
|
94 | setvar x *= 3
|
95 | echo x=$x
|
96 |
|
97 | var x = 0
|
98 | setvar x = 10
|
99 | setvar x /= 2
|
100 | echo x=$x
|
101 |
|
102 | ## STDOUT:
|
103 | x=7
|
104 | x=30
|
105 | x=5.0
|
106 | ## END
|
107 |
|
108 | #### Int Augmented //= %= **= and bitwise ops
|
109 |
|
110 | var x = 0
|
111 |
|
112 | setvar x = 10
|
113 | setvar x //= 3
|
114 | echo x=$x
|
115 |
|
116 | setvar x = 10
|
117 | setvar x %= 3
|
118 | echo x=$x
|
119 |
|
120 | setvar x = 10
|
121 | setvar x **= 3
|
122 | echo x=$x
|
123 |
|
124 | echo
|
125 | echo bitwise
|
126 |
|
127 | setvar x = 0b1111
|
128 | setvar x &= 0b0101
|
129 | echo x=$x
|
130 |
|
131 | setvar x = 0b1000
|
132 | setvar x |= 0b0111
|
133 | echo x=$x
|
134 |
|
135 | setvar x = 0b1010
|
136 | setvar x ^= 0b1001
|
137 | echo x=$x
|
138 |
|
139 | echo
|
140 | echo shift
|
141 |
|
142 | setvar x = 0b1000
|
143 | setvar x <<= 1
|
144 | echo x=$x
|
145 |
|
146 | setvar x = 0b1000
|
147 | setvar x >>= 1
|
148 | echo x=$x
|
149 |
|
150 | ## STDOUT:
|
151 | x=3
|
152 | x=1
|
153 | x=1000
|
154 |
|
155 | bitwise
|
156 | x=5
|
157 | x=15
|
158 | x=3
|
159 |
|
160 | shift
|
161 | x=16
|
162 | x=4
|
163 | ## END
|
164 |
|
165 | #### Augmented assignment of Dict
|
166 |
|
167 | var d = {x: 42}
|
168 |
|
169 | setvar d['x'] += 1.5
|
170 | echo $[d.x]
|
171 |
|
172 | setvar d.x += '1.5'
|
173 | echo $[d.x]
|
174 |
|
175 | setvar d.x += '3'
|
176 | echo $[d.x]
|
177 |
|
178 | ## STDOUT:
|
179 | 43.5
|
180 | 45.0
|
181 | 48.0
|
182 | ## END
|
183 |
|
184 | #### Augmented assignment of List
|
185 |
|
186 | shopt -s parse_at
|
187 |
|
188 | var mylist = :| 32 42 |
|
189 |
|
190 | setvar mylist[0] -= 1
|
191 | echo @mylist
|
192 |
|
193 | setvar mylist[1] //= 2
|
194 | echo @mylist
|
195 |
|
196 | setvar mylist[1] /= 2
|
197 | echo @mylist
|
198 |
|
199 |
|
200 | ## STDOUT:
|
201 | 31 42
|
202 | 31 21
|
203 | 31 10.5
|
204 | ## END
|
205 |
|
206 | #### Dict with nonexistent key (bug fix)
|
207 |
|
208 | var d = {x: 42}
|
209 |
|
210 | setvar d.x += 1
|
211 | setglobal d.x += 1
|
212 | echo $[d.x]
|
213 |
|
214 | setvar d.missing -= 1
|
215 | setglobal d.missing -= 1
|
216 |
|
217 |
|
218 | ## status: 3
|
219 | ## STDOUT:
|
220 | 44
|
221 | ## END
|
222 |
|
223 |
|
224 | #### List with nonexistent elemnt
|
225 | var L = [42]
|
226 | setvar L[99] += 1
|
227 |
|
228 | ## status: 3
|
229 | ## STDOUT:
|
230 | ## END
|
231 |
|
232 |
|
233 | #### Augmented assignment doesn't work with multiple LHS
|
234 |
|
235 | var x = 3
|
236 | var y = 4
|
237 | setvar x, y += 2
|
238 | echo $x $y
|
239 |
|
240 | ## status: 2
|
241 | ## STDOUT:
|
242 | ## END
|
243 |
|
244 |
|
245 |
|