rubinius-melbourne 2.0.0.19 → 2.0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +14 -0
  4. data/Gemfile +4 -0
  5. data/Rakefile +31 -0
  6. data/ext/rubinius/melbourne/extconf.rb +9 -2
  7. data/lib/rubinius/melbourne.rb +1 -1
  8. data/lib/rubinius/melbourne/version.rb +1 -1
  9. data/rubinius-melbourne.gemspec +5 -3
  10. data/spec/alias_spec.rb +40 -0
  11. data/spec/and_spec.rb +19 -0
  12. data/spec/array_spec.rb +81 -0
  13. data/spec/attrasgn_spec.rb +112 -0
  14. data/spec/back_ref_spec.rb +11 -0
  15. data/spec/call_spec.rb +298 -0
  16. data/spec/case_spec.rb +234 -0
  17. data/spec/cdecl_spec.rb +45 -0
  18. data/spec/class_spec.rb +83 -0
  19. data/spec/colon2_spec.rb +7 -0
  20. data/spec/colon3_spec.rb +7 -0
  21. data/spec/const_spec.rb +7 -0
  22. data/spec/custom/matchers/parse_as.rb +27 -0
  23. data/spec/custom/runner/relates.rb +83 -0
  24. data/spec/cvar_spec.rb +29 -0
  25. data/spec/cvasgn_spec.rb +30 -0
  26. data/spec/cvdecl_spec.rb +12 -0
  27. data/spec/default.mspec +4 -0
  28. data/spec/defined_spec.rb +117 -0
  29. data/spec/defn_spec.rb +554 -0
  30. data/spec/defs_spec.rb +81 -0
  31. data/spec/dot2_spec.rb +7 -0
  32. data/spec/dot3_spec.rb +7 -0
  33. data/spec/dregx_spec.rb +52 -0
  34. data/spec/dstr_spec.rb +169 -0
  35. data/spec/dsym_spec.rb +10 -0
  36. data/spec/dxstr_spec.rb +11 -0
  37. data/spec/ensure_spec.rb +117 -0
  38. data/spec/false_spec.rb +7 -0
  39. data/spec/flip2_spec.rb +43 -0
  40. data/spec/flip3_spec.rb +27 -0
  41. data/spec/for_spec.rb +61 -0
  42. data/spec/gasgn_spec.rb +13 -0
  43. data/spec/gvar_spec.rb +25 -0
  44. data/spec/hash_spec.rb +31 -0
  45. data/spec/iasgn_spec.rb +25 -0
  46. data/spec/if_spec.rb +131 -0
  47. data/spec/iter_spec.rb +613 -0
  48. data/spec/lasgn_spec.rb +377 -0
  49. data/spec/lit_spec.rb +61 -0
  50. data/spec/masgn_spec.rb +406 -0
  51. data/spec/match2_spec.rb +19 -0
  52. data/spec/match3_spec.rb +24 -0
  53. data/spec/match_spec.rb +7 -0
  54. data/spec/module_spec.rb +47 -0
  55. data/spec/nil_spec.rb +7 -0
  56. data/spec/not_spec.rb +17 -0
  57. data/spec/nth_ref_spec.rb +7 -0
  58. data/spec/op_asgn_spec.rb +246 -0
  59. data/spec/or_spec.rb +35 -0
  60. data/spec/postexe_spec.rb +7 -0
  61. data/spec/regex_spec.rb +28 -0
  62. data/spec/rescue_spec.rb +359 -0
  63. data/spec/return_spec.rb +57 -0
  64. data/spec/sclass_spec.rb +55 -0
  65. data/spec/str_spec.rb +97 -0
  66. data/spec/super_spec.rb +93 -0
  67. data/spec/true_spec.rb +7 -0
  68. data/spec/undef_spec.rb +98 -0
  69. data/spec/until_spec.rb +140 -0
  70. data/spec/valias_spec.rb +7 -0
  71. data/spec/while_spec.rb +192 -0
  72. data/spec/xstr_spec.rb +7 -0
  73. data/spec/yield_spec.rb +65 -0
  74. data/spec/zsuper_spec.rb +45 -0
  75. metadata +171 -13
@@ -0,0 +1,377 @@
1
+ describe "An Lasgn node" do
2
+ relates "a = 1" do
3
+ parse do
4
+ [:lasgn, :a, [:lit, 1]]
5
+ end
6
+ end
7
+
8
+ relates "a = b, c, *d" do
9
+ parse do
10
+ [:lasgn,
11
+ :a,
12
+ [:svalue,
13
+ [:array,
14
+ [:call, nil, :b, [:arglist]],
15
+ [:call, nil, :c, [:arglist]],
16
+ [:splat, [:call, nil, :d, [:arglist]]]]]]
17
+ end
18
+ end
19
+
20
+ relates "a = [b, *c]" do
21
+ parse do
22
+ [:lasgn,
23
+ :a,
24
+ [:array,
25
+ [:call, nil, :b, [:arglist]],
26
+ [:splat, [:call, nil, :c, [:arglist]]]]]
27
+ end
28
+ end
29
+
30
+ relates <<-ruby do
31
+ x = (y = 1
32
+ (y + 2))
33
+ ruby
34
+
35
+ parse do
36
+ [:lasgn,
37
+ :x,
38
+ [:block,
39
+ [:lasgn, :y, [:lit, 1]],
40
+ [:call, [:lvar, :y], :+, [:arglist, [:lit, 2]]]]]
41
+ end
42
+ end
43
+
44
+ relates <<-ruby do
45
+ a = []
46
+ a [42]
47
+ ruby
48
+
49
+ parse do
50
+ [:block,
51
+ [:lasgn, :a, [:array]],
52
+ [:call, [:lvar, :a], :[], [:arglist, [:lit, 42]]]]
53
+ end
54
+
55
+ # call index space
56
+ end
57
+
58
+ relates 'var = ["foo", "bar"]' do
59
+ parse do
60
+ [:lasgn, :var, [:array, [:str, "foo"], [:str, "bar"]]]
61
+ end
62
+ end
63
+
64
+ relates "c = (2 + 3)" do
65
+ parse do
66
+ [:lasgn, :c, [:call, [:lit, 2], :+, [:arglist, [:lit, 3]]]]
67
+ end
68
+ end
69
+
70
+ relates "a = *[1]" do
71
+ parse do
72
+ [:lasgn, :a, [:svalue, [:splat, [:array, [:lit, 1]]]]]
73
+ end
74
+ end
75
+
76
+ relates "a = *b" do
77
+ parse do
78
+ [:lasgn, :a, [:svalue, [:splat, [:call, nil, :b, [:arglist]]]]]
79
+ end
80
+ end
81
+
82
+ relates <<-ruby do
83
+ a = if c
84
+ begin
85
+ b
86
+ rescue
87
+ nil
88
+ end
89
+ end
90
+ a
91
+ ruby
92
+
93
+ parse do
94
+ [:block,
95
+ [:lasgn,
96
+ :a,
97
+ [:if,
98
+ [:call, nil, :c, [:arglist]],
99
+ [:rescue, [:call, nil, :b, [:arglist]], [:resbody, [:array], [:nil]]],
100
+ nil]],
101
+ [:lvar, :a]]
102
+ end
103
+ end
104
+
105
+ relates "x = [*[1]]" do
106
+ parse do
107
+ [:lasgn, :x, [:array, [:splat, [:array, [:lit, 1]]]]]
108
+ end
109
+ end
110
+
111
+ relates "a = []" do
112
+ parse do
113
+ [:lasgn, :a, [:array]]
114
+ end
115
+ end
116
+
117
+ relates <<-ruby do
118
+ a = 12
119
+ a
120
+ ruby
121
+
122
+ parse do
123
+ [:block, [:lasgn, :a, [:lit, 12]], [:lvar, :a]]
124
+ end
125
+ end
126
+
127
+ relates <<-ruby do
128
+ name
129
+ name = 3
130
+ name
131
+ ruby
132
+
133
+ parse do
134
+ [:block,
135
+ [:call, nil, :name, [:arglist]],
136
+ [:lasgn, :name, [:lit, 3]],
137
+ [:lvar, :name]]
138
+ end
139
+ end
140
+
141
+ relates "a=12; b=13; true" do
142
+ parse do
143
+ [:block, [:lasgn, :a, [:lit, 12]], [:lasgn, :b, [:lit, 13]], [:true]]
144
+ end
145
+ end
146
+
147
+ relates <<-ruby do
148
+ def f
149
+ a = 1
150
+ end
151
+ ruby
152
+
153
+ parse do
154
+ [:defn, :f, [:args], [:scope, [:block, [:lasgn, :a, [:lit, 1]]]]]
155
+ end
156
+ end
157
+
158
+ relates <<-ruby do
159
+ def f(a)
160
+ a = 1
161
+ end
162
+ ruby
163
+
164
+ parse do
165
+ [:defn, :f, [:args, :a], [:scope, [:block, [:lasgn, :a, [:lit, 1]]]]]
166
+ end
167
+ end
168
+
169
+ relates <<-ruby do
170
+ def f
171
+ b { a = 1 }
172
+ end
173
+ ruby
174
+
175
+ parse do
176
+ [:defn,
177
+ :f,
178
+ [:args],
179
+ [:scope,
180
+ [:block,
181
+ [:iter, [:call, nil, :b, [:arglist]], nil, [:lasgn, :a, [:lit, 1]]]]]]
182
+ end
183
+ end
184
+
185
+ relates <<-ruby do
186
+ def f(a)
187
+ b { a = 2 }
188
+ end
189
+ ruby
190
+
191
+ parse do
192
+ [:defn,
193
+ :f,
194
+ [:args, :a],
195
+ [:scope,
196
+ [:block,
197
+ [:iter, [:call, nil, :b, [:arglist]], nil, [:lasgn, :a, [:lit, 2]]]]]]
198
+ end
199
+ end
200
+
201
+ relates <<-ruby do
202
+ def f
203
+ a = 1
204
+ b { a = 2 }
205
+ end
206
+ ruby
207
+
208
+ parse do
209
+ [:defn,
210
+ :f,
211
+ [:args],
212
+ [:scope,
213
+ [:block,
214
+ [:lasgn, :a, [:lit, 1]],
215
+ [:iter, [:call, nil, :b, [:arglist]], nil, [:lasgn, :a, [:lit, 2]]]]]]
216
+ end
217
+ end
218
+
219
+ relates <<-ruby do
220
+ def f
221
+ a
222
+ b { a = 1 }
223
+ end
224
+ ruby
225
+
226
+ parse do
227
+ [:defn,
228
+ :f,
229
+ [:args],
230
+ [:scope,
231
+ [:block,
232
+ [:call, nil, :a, [:arglist]],
233
+ [:iter, [:call, nil, :b, [:arglist]], nil, [:lasgn, :a, [:lit, 1]]]]]]
234
+ end
235
+ end
236
+
237
+ relates <<-ruby do
238
+ def f
239
+ b { a = 1 }
240
+ a
241
+ end
242
+ ruby
243
+
244
+ parse do
245
+ [:defn,
246
+ :f,
247
+ [:args],
248
+ [:scope,
249
+ [:block,
250
+ [:iter, [:call, nil, :b, [:arglist]], nil, [:lasgn, :a, [:lit, 1]]],
251
+ [:call, nil, :a, [:arglist]]]]]
252
+ end
253
+ end
254
+
255
+ relates <<-ruby do
256
+ def f
257
+ a = 1
258
+ b { a = 2 }
259
+ a
260
+ end
261
+ ruby
262
+
263
+ parse do
264
+ [:defn,
265
+ :f,
266
+ [:args],
267
+ [:scope,
268
+ [:block,
269
+ [:lasgn, :a, [:lit, 1]],
270
+ [:iter, [:call, nil, :b, [:arglist]], nil, [:lasgn, :a, [:lit, 2]]],
271
+ [:lvar, :a]]]]
272
+ end
273
+ end
274
+
275
+ relates <<-ruby do
276
+ class F
277
+ a = 1
278
+ end
279
+ ruby
280
+
281
+ parse do
282
+ [:class, :F, nil, [:scope, [:lasgn, :a, [:lit, 1]]]]
283
+ end
284
+ end
285
+
286
+ relates <<-ruby do
287
+ a = Object
288
+ class a::F
289
+ b = 1
290
+ end
291
+ ruby
292
+
293
+ parse do
294
+ [:block,
295
+ [:lasgn, :a, [:const, :Object]],
296
+ [:class, [:colon2, [:lvar, :a], :F], nil, [:scope, [:lasgn, :b, [:lit, 1]]]]]
297
+ end
298
+ end
299
+
300
+ relates <<-ruby do
301
+ a = Object
302
+ class F < a
303
+ b = 1
304
+ end
305
+ ruby
306
+
307
+ parse do
308
+ [:block,
309
+ [:lasgn, :a, [:const, :Object]],
310
+ [:class, :F, [:lvar, :a], [:scope, [:lasgn, :b, [:lit, 1]]]]]
311
+ end
312
+ end
313
+
314
+ relates <<-ruby do
315
+ class F
316
+ a = 1
317
+ def f
318
+ a = 1
319
+ end
320
+ end
321
+ ruby
322
+
323
+ parse do
324
+ [:class,
325
+ :F,
326
+ nil,
327
+ [:scope,
328
+ [:block,
329
+ [:lasgn, :a, [:lit, 1]],
330
+ [:defn, :f, [:args], [:scope, [:block, [:lasgn, :a, [:lit, 1]]]]]]]]
331
+ end
332
+ end
333
+
334
+ relates <<-ruby do
335
+ module M
336
+ a = 1
337
+ end
338
+ ruby
339
+
340
+ parse do
341
+ [:module, :M, [:scope, [:lasgn, :a, [:lit, 1]]]]
342
+ end
343
+ end
344
+
345
+ relates <<-ruby do
346
+ module M
347
+ a = 1
348
+ def f
349
+ a = 1
350
+ end
351
+ end
352
+ ruby
353
+
354
+ parse do
355
+ [:module,
356
+ :M,
357
+ [:scope,
358
+ [:block,
359
+ [:lasgn, :a, [:lit, 1]],
360
+ [:defn, :f, [:args], [:scope, [:block, [:lasgn, :a, [:lit, 1]]]]]]]]
361
+ end
362
+ end
363
+
364
+ relates <<-ruby do
365
+ a = Object
366
+ module a::M
367
+ b = 1
368
+ end
369
+ ruby
370
+
371
+ parse do
372
+ [:block,
373
+ [:lasgn, :a, [:const, :Object]],
374
+ [:module, [:colon2, [:lvar, :a], :M], [:scope, [:lasgn, :b, [:lit, 1]]]]]
375
+ end
376
+ end
377
+ end
data/spec/lit_spec.rb ADDED
@@ -0,0 +1,61 @@
1
+ describe "A Lit node" do
2
+ relates "0b1111" do
3
+ parse do
4
+ [:lit, 15]
5
+ end
6
+ end
7
+
8
+ relates "1.1" do
9
+ parse do
10
+ [:lit, 1.1]
11
+ end
12
+ end
13
+
14
+ relates "0xffffffffffffffff" do
15
+ parse do
16
+ [:lit, 18446744073709551615]
17
+ end
18
+ end
19
+
20
+ relates "0xffff_ffff_ffff_ffff" do
21
+ parse do
22
+ [:lit, 18446744073709551615]
23
+ end
24
+ end
25
+
26
+ relates "07654" do
27
+ parse do
28
+ [:lit, 4012]
29
+ end
30
+ end
31
+
32
+ relates "-1" do
33
+ parse do
34
+ [:lit, -1]
35
+ end
36
+ end
37
+
38
+ relates "1" do
39
+ parse do
40
+ [:lit, 1]
41
+ end
42
+ end
43
+
44
+ relates "8000_0000" do
45
+ parse do
46
+ [:lit, 80000000]
47
+ end
48
+ end
49
+
50
+ relates ":x" do
51
+ parse do
52
+ [:lit, :x]
53
+ end
54
+ end
55
+
56
+ relates ":\"*args\"" do
57
+ parse do
58
+ [:lit, :"*args"]
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,406 @@
1
+ describe "A Masgn node" do
2
+ relates "a, b.c = b.c, true" do
3
+ parse do
4
+ [:masgn,
5
+ [:array,
6
+ [:lasgn, :a],
7
+ [:attrasgn, [:call, nil, :b, [:arglist]], :c=, [:arglist]]],
8
+ [:array, [:call, [:call, nil, :b, [:arglist]], :c, [:arglist]], [:true]]]
9
+ end
10
+ end
11
+
12
+ relates "a, b = 1, 2, 3" do
13
+ parse do
14
+ [:masgn,
15
+ [:array, [:lasgn, :a], [:lasgn, :b]],
16
+ [:array, [:lit, 1], [:lit, 2], [:lit, 3]]]
17
+ end
18
+ end
19
+
20
+ relates "a, b = c, d" do
21
+ parse do
22
+ [:masgn,
23
+ [:array, [:lasgn, :a], [:lasgn, :b]],
24
+ [:array, [:call, nil, :c, [:arglist]], [:call, nil, :d, [:arglist]]]]
25
+ end
26
+ end
27
+
28
+ relates "a, b, *c = 1, 2, *[3, 4]" do
29
+ parse do
30
+ [:masgn,
31
+ [:array, [:lasgn, :a], [:lasgn, :b], [:splat, [:lasgn, :c]]],
32
+ [:array, [:lit, 1], [:lit, 2], [:splat, [:array, [:lit, 3], [:lit, 4]]]]]
33
+ end
34
+ end
35
+
36
+ relates "a.b, a.c, _ = q" do
37
+ parse do
38
+ [:masgn,
39
+ [:array,
40
+ [:attrasgn, [:call, nil, :a, [:arglist]], :b=, [:arglist]],
41
+ [:attrasgn, [:call, nil, :a, [:arglist]], :c=, [:arglist]],
42
+ [:lasgn, :_]],
43
+ [:to_ary, [:call, nil, :q, [:arglist]]]]
44
+ end
45
+ end
46
+
47
+ relates <<-ruby do
48
+ a, i, j = [], 1, 2
49
+ a[i], a[j] = a[j], a[i]
50
+ ruby
51
+
52
+ parse do
53
+ [:block,
54
+ [:masgn,
55
+ [:array, [:lasgn, :a], [:lasgn, :i], [:lasgn, :j]],
56
+ [:array, [:array], [:lit, 1], [:lit, 2]]],
57
+ [:masgn,
58
+ [:array,
59
+ [:attrasgn, [:lvar, :a], :[]=, [:arglist, [:lvar, :i]]],
60
+ [:attrasgn, [:lvar, :a], :[]=, [:arglist, [:lvar, :j]]]],
61
+ [:array,
62
+ [:call, [:lvar, :a], :[], [:arglist, [:lvar, :j]]],
63
+ [:call, [:lvar, :a], :[], [:arglist, [:lvar, :i]]]]]]
64
+ end
65
+ end
66
+
67
+ relates <<-ruby do
68
+ c, d, e, f = [], 1, 2, 3
69
+ a, *b = c[d] = f(e, f, c)
70
+ ruby
71
+
72
+ parse do
73
+ [:block,
74
+ [:masgn,
75
+ [:array, [:lasgn, :c], [:lasgn, :d], [:lasgn, :e], [:lasgn, :f]],
76
+ [:array, [:array], [:lit, 1], [:lit, 2], [:lit, 3]]],
77
+ [:masgn,
78
+ [:array, [:lasgn, :a], [:splat, [:lasgn, :b]]],
79
+ [:to_ary,
80
+ [:attrasgn,
81
+ [:lvar, :c],
82
+ :[]=,
83
+ [:arglist,
84
+ [:lvar, :d],
85
+ [:call, nil, :f, [:arglist, [:lvar, :e], [:lvar, :f], [:lvar, :c]]]]]]]]
86
+ end
87
+ end
88
+
89
+ relates "a, b.c = d, e" do
90
+ parse do
91
+ [:masgn,
92
+ [:array,
93
+ [:lasgn, :a],
94
+ [:attrasgn, [:call, nil, :b, [:arglist]], :c=, [:arglist]]],
95
+ [:array, [:call, nil, :d, [:arglist]], [:call, nil, :e, [:arglist]]]]
96
+ end
97
+ end
98
+
99
+ relates "*a.m = *b" do
100
+ parse do
101
+ [:masgn,
102
+ [:array,
103
+ [:splat, [:attrasgn, [:call, nil, :a, [:arglist]], :m=, [:arglist]]]],
104
+ [:splat, [:call, nil, :b, [:arglist]]]]
105
+ end
106
+ end
107
+
108
+ relates "*a.m = b" do
109
+ parse do
110
+ [:masgn,
111
+ [:array,
112
+ [:splat, [:attrasgn, [:call, nil, :a, [:arglist]], :m=, [:arglist]]]],
113
+ [:to_ary, [:call, nil, :b, [:arglist]]]]
114
+ end
115
+ end
116
+
117
+ relates "A, B, C = 1, 2, 3" do
118
+ parse do
119
+ [:masgn,
120
+ [:array, [:cdecl, :A], [:cdecl, :B], [:cdecl, :C]],
121
+ [:array, [:lit, 1], [:lit, 2], [:lit, 3]]]
122
+ end
123
+ end
124
+
125
+ relates "* = 1, 2" do
126
+ parse do
127
+ [:masgn, [:array, [:splat]], [:array, [:lit, 1], [:lit, 2]]]
128
+ end
129
+ end
130
+
131
+ relates "*$a = b" do
132
+ parse do
133
+ [:masgn,
134
+ [:array, [:splat, [:gasgn, :$a]]],
135
+ [:to_ary, [:call, nil, :b, [:arglist]]]]
136
+ end
137
+ end
138
+
139
+ relates "*$a = *b" do
140
+ parse do
141
+ [:masgn,
142
+ [:array, [:splat, [:gasgn, :$a]]],
143
+ [:splat, [:call, nil, :b, [:arglist]]]]
144
+ end
145
+ end
146
+
147
+ relates "a, @b = c, d" do
148
+ parse do
149
+ [:masgn,
150
+ [:array, [:lasgn, :a], [:iasgn, :@b]],
151
+ [:array, [:call, nil, :c, [:arglist]], [:call, nil, :d, [:arglist]]]]
152
+ end
153
+ end
154
+
155
+ relates "*@a = b" do
156
+ parse do
157
+ [:masgn,
158
+ [:array, [:splat, [:iasgn, :@a]]],
159
+ [:to_ary, [:call, nil, :b, [:arglist]]]]
160
+ end
161
+ end
162
+
163
+ relates "*@a = *b" do
164
+ parse do
165
+ [:masgn,
166
+ [:array, [:splat, [:iasgn, :@a]]],
167
+ [:splat, [:call, nil, :b, [:arglist]]]]
168
+ end
169
+ end
170
+
171
+ relates "@a, $b = 1, 2" do
172
+ parse do
173
+ [:masgn,
174
+ [:array, [:iasgn, :@a], [:gasgn, :$b]],
175
+ [:array, [:lit, 1], [:lit, 2]]]
176
+ end
177
+ end
178
+
179
+ relates "a, b = (@a = 1), @a" do
180
+ parse do
181
+ [:masgn,
182
+ [:array, [:lasgn, :a], [:lasgn, :b]],
183
+ [:array, [:iasgn, :@a, [:lit, 1]], [:ivar, :@a]]]
184
+ end
185
+ end
186
+
187
+ relates "@@a, @@b = 1, 2" do
188
+ parse do
189
+ [:masgn,
190
+ [:array, [:cvdecl, :@@a], [:cvdecl, :@@b]],
191
+ [:array, [:lit, 1], [:lit, 2]]]
192
+ end
193
+ end
194
+
195
+ relates "a, b, *c = 1, 2, 3" do
196
+ parse do
197
+ [:masgn,
198
+ [:array, [:lasgn, :a], [:lasgn, :b], [:splat, [:lasgn, :c]]],
199
+ [:array, [:lit, 1], [:lit, 2], [:lit, 3]]]
200
+ end
201
+ end
202
+
203
+ relates "a, b, *c = 1, 2" do
204
+ # TODO
205
+ end
206
+
207
+ relates "a, b, c, *d = 1, 2" do
208
+ # TODO
209
+ end
210
+
211
+ relates "a, b, c = *d" do
212
+ parse do
213
+ [:masgn,
214
+ [:array, [:lasgn, :a], [:lasgn, :b], [:lasgn, :c]],
215
+ [:splat, [:call, nil, :d, [:arglist]]]]
216
+ end
217
+ end
218
+
219
+ relates "a, b, c = 1, *d" do
220
+ parse do
221
+ [:masgn,
222
+ [:array, [:lasgn, :a], [:lasgn, :b], [:lasgn, :c]],
223
+ [:array, [:lit, 1], [:splat, [:call, nil, :d, [:arglist]]]]]
224
+ end
225
+ end
226
+
227
+ relates "a, b, *c = *d" do
228
+ parse do
229
+ [:masgn,
230
+ [:array, [:lasgn, :a], [:lasgn, :b], [:splat, [:lasgn, :c]]],
231
+ [:splat, [:call, nil, :d, [:arglist]]]]
232
+ end
233
+ end
234
+
235
+ relates "*a = 1, 2, 3" do
236
+ parse do
237
+ [:masgn,
238
+ [:array, [:splat, [:lasgn, :a]]],
239
+ [:array, [:lit, 1], [:lit, 2], [:lit, 3]]]
240
+ end
241
+ end
242
+
243
+ relates "*a = b" do
244
+ parse do
245
+ [:masgn,
246
+ [:array, [:splat, [:lasgn, :a]]],
247
+ [:to_ary, [:call, nil, :b, [:arglist]]]]
248
+ end
249
+ end
250
+
251
+ relates "*a = *b" do
252
+ parse do
253
+ [:masgn,
254
+ [:array, [:splat, [:lasgn, :a]]],
255
+ [:splat, [:call, nil, :b, [:arglist]]]]
256
+ end
257
+ end
258
+
259
+ relates "a, (b, c) = [1, [2, 3]]" do
260
+ parse do
261
+ [:masgn,
262
+ [:array, [:lasgn, :a], [:masgn, [:array, [:lasgn, :b], [:lasgn, :c]]]],
263
+ [:to_ary, [:array, [:lit, 1], [:array, [:lit, 2], [:lit, 3]]]]]
264
+ end
265
+ end
266
+
267
+ relates "a, = *[[[1]]]" do
268
+ parse do
269
+ [:masgn,
270
+ [:array, [:lasgn, :a]],
271
+ [:splat, [:array, [:array, [:array, [:lit, 1]]]]]]
272
+ end
273
+ end
274
+
275
+ relates "a, b, * = c" do
276
+ parse do
277
+ [:masgn,
278
+ [:array, [:lasgn, :a], [:lasgn, :b], [:splat]],
279
+ [:to_ary, [:call, nil, :c, [:arglist]]]]
280
+ end
281
+ end
282
+
283
+ relates "a, b, = c" do
284
+ parse do
285
+ [:masgn,
286
+ [:array, [:lasgn, :a], [:lasgn, :b]],
287
+ [:to_ary, [:call, nil, :c, [:arglist]]]]
288
+ end
289
+ end
290
+
291
+ relates "a, b, c = m d" do
292
+ parse do
293
+ [:masgn,
294
+ [:array, [:lasgn, :a], [:lasgn, :b], [:lasgn, :c]],
295
+ [:to_ary, [:call, nil, :m, [:arglist, [:call, nil, :d, [:arglist]]]]]]
296
+ end
297
+ end
298
+
299
+ relates "a, b, *c = d, e, f, g" do
300
+
301
+ parse do
302
+ [:masgn,
303
+ [:array, [:lasgn, :a], [:lasgn, :b], [:splat, [:lasgn, :c]]],
304
+ [:array,
305
+ [:call, nil, :d, [:arglist]],
306
+ [:call, nil, :e, [:arglist]],
307
+ [:call, nil, :f, [:arglist]],
308
+ [:call, nil, :g, [:arglist]]]]
309
+ end
310
+ end
311
+
312
+ relates "a, b, *c = d.e(\"f\")" do
313
+ parse do
314
+ [:masgn,
315
+ [:array, [:lasgn, :a], [:lasgn, :b], [:splat, [:lasgn, :c]]],
316
+ [:to_ary, [:call, [:call, nil, :d, [:arglist]], :e, [:arglist, [:str, "f"]]]]]
317
+ end
318
+ end
319
+
320
+ relates "a, b, *c = d" do
321
+ parse do
322
+ [:masgn,
323
+ [:array, [:lasgn, :a], [:lasgn, :b], [:splat, [:lasgn, :c]]],
324
+ [:to_ary, [:call, nil, :d, [:arglist]]]]
325
+ end
326
+ end
327
+
328
+ relates "a, b = c" do
329
+ parse do
330
+ [:masgn,
331
+ [:array, [:lasgn, :a], [:lasgn, :b]],
332
+ [:to_ary, [:call, nil, :c, [:arglist]]]]
333
+ end
334
+ end
335
+
336
+ relates <<-ruby do
337
+ m do
338
+ a, b = 1, 2
339
+ next
340
+ end
341
+ ruby
342
+
343
+ parse do
344
+ [:iter,
345
+ [:call, nil, :m, [:arglist]],
346
+ nil,
347
+ [:block,
348
+ [:masgn,
349
+ [:array, [:lasgn, :a], [:lasgn, :b]],
350
+ [:array, [:lit, 1], [:lit, 2]]],
351
+ [:next]]]
352
+ end
353
+ end
354
+
355
+ relates "a, (b, c) = 1" do
356
+ # TODO
357
+ end
358
+
359
+ relates "a, (b, c) = *1" do
360
+ # TODO
361
+ end
362
+
363
+ relates "a, (b, c) = 1, 2, 3" do
364
+ # TODO
365
+ end
366
+
367
+ relates "a, (b, *c), d = 1, 2, 3, 4" do
368
+ # TODO
369
+ end
370
+
371
+ relates "a, (b, c) = 1, *2" do
372
+ # TODO
373
+ end
374
+
375
+ relates "a, (b, *c) = 1" do
376
+ # TODO
377
+ end
378
+
379
+ relates "a, (b, *c) = 1, 2" do
380
+ # TODO
381
+ end
382
+
383
+ relates "a, (b, *c) = *1" do
384
+ # TODO
385
+ end
386
+
387
+ relates "a, (b, *c) = 1, *2" do
388
+ # TODO
389
+ end
390
+
391
+ relates "a, (*b) = 1" do
392
+ # TODO
393
+ end
394
+
395
+ relates "a, (*b) = 1, 2" do
396
+ # TODO
397
+ end
398
+
399
+ relates "a, (*b) = *1" do
400
+ # TODO
401
+ end
402
+
403
+ relates "a, (*b) = 1, *2" do
404
+ # TODO
405
+ end
406
+ end