rubinius-compiler 2.3.1 → 3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rubinius/code/compiler.rb +10 -0
  3. data/lib/rubinius/{compiler → code/compiler}/compiled_file.rb +0 -0
  4. data/lib/rubinius/{compiler → code/compiler}/compiler.rb +0 -0
  5. data/lib/rubinius/{compiler → code/compiler}/evaluator.rb +0 -0
  6. data/lib/rubinius/{compiler → code/compiler}/generator.rb +0 -0
  7. data/lib/rubinius/{compiler → code/compiler}/generator_methods.rb +0 -0
  8. data/lib/rubinius/{compiler → code/compiler}/iseq.rb +0 -0
  9. data/lib/rubinius/{compiler → code/compiler}/locals.rb +0 -0
  10. data/lib/rubinius/{compiler → code/compiler}/opcodes.rb +0 -0
  11. data/lib/rubinius/{compiler → code/compiler}/printers.rb +0 -0
  12. data/lib/rubinius/{compiler → code/compiler}/stages.rb +0 -0
  13. data/lib/rubinius/{compiler → code/compiler}/version.rb +1 -1
  14. metadata +23 -271
  15. data/.gitignore +0 -17
  16. data/.travis.yml +0 -8
  17. data/Gemfile +0 -4
  18. data/LICENSE +0 -25
  19. data/README.md +0 -29
  20. data/Rakefile +0 -1
  21. data/lib/rubinius/compiler.rb +0 -10
  22. data/rubinius-compiler.gemspec +0 -28
  23. data/spec/alias_spec.rb +0 -39
  24. data/spec/and_spec.rb +0 -44
  25. data/spec/array_spec.rb +0 -110
  26. data/spec/attrasgn_spec.rb +0 -186
  27. data/spec/back_ref_spec.rb +0 -11
  28. data/spec/call_spec.rb +0 -580
  29. data/spec/case_spec.rb +0 -576
  30. data/spec/cdecl_spec.rb +0 -70
  31. data/spec/class_spec.rb +0 -120
  32. data/spec/colon2_spec.rb +0 -8
  33. data/spec/colon3_spec.rb +0 -8
  34. data/spec/const_spec.rb +0 -7
  35. data/spec/custom/guards/profiler.rb +0 -18
  36. data/spec/custom/helpers/generator.rb +0 -828
  37. data/spec/custom/matchers/compile_as.rb +0 -46
  38. data/spec/custom/mspec.rb +0 -15
  39. data/spec/custom/runner/actions/debug.rb +0 -10
  40. data/spec/custom/runner/actions/gcstats.rb +0 -17
  41. data/spec/custom/runner/actions/memory.rb +0 -11
  42. data/spec/custom/runner/actions/parser.rb +0 -14
  43. data/spec/custom/runner/actions/profiler.rb +0 -19
  44. data/spec/custom/runner/relates.rb +0 -86
  45. data/spec/custom/utils/options.rb +0 -40
  46. data/spec/custom/utils/script.rb +0 -50
  47. data/spec/cvar_spec.rb +0 -39
  48. data/spec/cvasgn_spec.rb +0 -33
  49. data/spec/cvdecl_spec.rb +0 -17
  50. data/spec/defined_spec.rb +0 -616
  51. data/spec/defn_spec.rb +0 -732
  52. data/spec/defs_spec.rb +0 -113
  53. data/spec/dot2_spec.rb +0 -16
  54. data/spec/dot3_spec.rb +0 -17
  55. data/spec/dregx_spec.rb +0 -160
  56. data/spec/dstr_spec.rb +0 -424
  57. data/spec/dsym_spec.rb +0 -18
  58. data/spec/dxstr_spec.rb +0 -24
  59. data/spec/ensure_spec.rb +0 -196
  60. data/spec/false_spec.rb +0 -7
  61. data/spec/flip2_spec.rb +0 -21
  62. data/spec/flip3_spec.rb +0 -12
  63. data/spec/for_spec.rb +0 -228
  64. data/spec/gasgn_spec.rb +0 -15
  65. data/spec/generator/encode_spec.rb +0 -34
  66. data/spec/gvar_spec.rb +0 -37
  67. data/spec/hash_spec.rb +0 -108
  68. data/spec/iasgn_spec.rb +0 -26
  69. data/spec/if_spec.rb +0 -415
  70. data/spec/iter_spec.rb +0 -1011
  71. data/spec/lasgn_spec.rb +0 -561
  72. data/spec/lit_spec.rb +0 -61
  73. data/spec/masgn_spec.rb +0 -1558
  74. data/spec/match2_spec.rb +0 -42
  75. data/spec/match3_spec.rb +0 -54
  76. data/spec/match_spec.rb +0 -29
  77. data/spec/module_spec.rb +0 -73
  78. data/spec/nil_spec.rb +0 -7
  79. data/spec/not_spec.rb +0 -47
  80. data/spec/nth_ref_spec.rb +0 -7
  81. data/spec/op_asgn_spec.rb +0 -563
  82. data/spec/or_spec.rb +0 -126
  83. data/spec/postexe_spec.rb +0 -11
  84. data/spec/preexe_spec.rb +0 -21
  85. data/spec/regex_spec.rb +0 -54
  86. data/spec/rescue_spec.rb +0 -763
  87. data/spec/return_spec.rb +0 -152
  88. data/spec/sclass_spec.rb +0 -138
  89. data/spec/spec_helper.rb +0 -12
  90. data/spec/str_spec.rb +0 -118
  91. data/spec/super_spec.rb +0 -170
  92. data/spec/transforms/assembly_spec.rb +0 -195
  93. data/spec/transforms/block_given_spec.rb +0 -75
  94. data/spec/transforms/fast_coerce_spec.rb +0 -112
  95. data/spec/transforms/fast_new_spec.rb +0 -255
  96. data/spec/transforms/invoke_primitive_spec.rb +0 -14
  97. data/spec/transforms/kernel_methods_spec.rb +0 -29
  98. data/spec/transforms/primitive_spec.rb +0 -33
  99. data/spec/transforms/privately_spec.rb +0 -24
  100. data/spec/true_spec.rb +0 -7
  101. data/spec/undef_spec.rb +0 -133
  102. data/spec/until_spec.rb +0 -254
  103. data/spec/valias_spec.rb +0 -11
  104. data/spec/while_spec.rb +0 -494
  105. data/spec/xstr_spec.rb +0 -10
  106. data/spec/yield_spec.rb +0 -92
  107. data/spec/zsuper_spec.rb +0 -63
data/spec/lit_spec.rb DELETED
@@ -1,61 +0,0 @@
1
- describe "A Lit node" do
2
- relates "0b1111" do
3
- compile do |g|
4
- g.push 15
5
- end
6
- end
7
-
8
- relates "1.1" do
9
- compile do |g|
10
- g.push_literal 1.1
11
- end
12
- end
13
-
14
- relates "0xffffffffffffffff" do
15
- compile do |g|
16
- g.push_literal 18446744073709551615
17
- end
18
- end
19
-
20
- relates "0xffff_ffff_ffff_ffff" do
21
- compile do |g|
22
- g.push_literal 18446744073709551615
23
- end
24
- end
25
-
26
- relates "07654" do
27
- compile do |g|
28
- g.push 4012
29
- end
30
- end
31
-
32
- relates "-1" do
33
- compile do |g|
34
- g.push(-1)
35
- end
36
- end
37
-
38
- relates "1" do
39
- compile do |g|
40
- g.push 1
41
- end
42
- end
43
-
44
- relates "8000_0000" do
45
- compile do |g|
46
- g.push 80000000
47
- end
48
- end
49
-
50
- relates ":x" do
51
- compile do |g|
52
- g.push_literal :x
53
- end
54
- end
55
-
56
- relates ":\"*args\"" do
57
- compile do |g|
58
- g.push_literal :"*args"
59
- end
60
- end
61
- end
data/spec/masgn_spec.rb DELETED
@@ -1,1558 +0,0 @@
1
- describe "A Masgn node" do
2
- relates "a, b.c = b.c, true" do
3
- compile do |g|
4
- g.push :self
5
- g.send :b, 0, true
6
- g.send :c, 0, false
7
- g.push :true
8
-
9
- g.dup_many 2
10
- g.make_array 2
11
- g.move_down 2
12
-
13
- g.rotate 2
14
-
15
- g.set_local 0
16
- g.pop
17
-
18
- g.push :self
19
- g.send :b, 0, true
20
- g.swap
21
- g.send :c=, 1, false
22
-
23
- g.pop
24
- end
25
- end
26
-
27
- relates "a, b = 1, 2, 3" do
28
- compile do |g|
29
- g.push 1
30
- g.push 2
31
- g.push 3
32
-
33
- g.dup_many 3
34
- g.make_array 3
35
- g.move_down 3
36
-
37
- g.rotate 3
38
-
39
- g.set_local 0
40
- g.pop
41
- g.set_local 1
42
- g.pop
43
-
44
- g.pop # no set_local since the LHS is smaller than the RHS
45
- end
46
- end
47
-
48
- relates "a, b = c, d" do
49
- compile do |g|
50
- g.push :self
51
- g.send :c, 0, true
52
- g.push :self
53
- g.send :d, 0, true
54
-
55
- g.dup_many 2
56
- g.make_array 2
57
- g.move_down 2
58
-
59
- g.rotate 2
60
-
61
- g.set_local 0
62
- g.pop
63
-
64
- g.set_local 1
65
- g.pop
66
- end
67
- end
68
-
69
- ruby_version_is ""..."1.9" do
70
- relates "a, b, *c = 1, 2, *[3, 4]" do
71
- compile do |g|
72
- g.push 1
73
- g.push 2
74
- g.make_array 2
75
- g.push 3
76
- g.push 4
77
- g.make_array 2
78
- g.cast_array
79
- g.send :+, 1
80
- g.cast_array
81
- g.dup
82
-
83
- g.shift_array
84
- g.set_local 0
85
- g.pop
86
-
87
- g.shift_array
88
- g.set_local 1
89
- g.pop
90
-
91
- g.cast_array
92
- g.set_local 2
93
- g.pop
94
- end
95
- end
96
- end
97
-
98
- ruby_version_is "1.9" do
99
- relates "a, b, *c = 1, 2, *[3, 4]" do
100
- compile do |g|
101
- g.push 1
102
- g.push 2
103
- g.push 3
104
- g.push 4
105
-
106
- g.dup_many 4
107
- g.make_array 4
108
- g.move_down 4
109
-
110
- g.make_array 2
111
- g.rotate 3
112
-
113
- g.set_local 0
114
- g.pop
115
-
116
- g.set_local 1
117
- g.pop
118
-
119
- g.cast_array
120
- g.set_local 2
121
- g.pop
122
- end
123
- end
124
- end
125
-
126
- relates "a.b, a.c, _ = q" do
127
- compile do |g|
128
- g.push :self
129
- g.send :q, 0, true
130
- g.cast_multi_value
131
-
132
- g.dup
133
-
134
- g.shift_array
135
- g.push :self
136
- g.send :a, 0, true
137
- g.swap
138
- g.send :b=, 1, false
139
- g.pop
140
-
141
- g.shift_array
142
- g.push :self
143
- g.send :a, 0, true
144
- g.swap
145
- g.send :c=, 1, false
146
- g.pop
147
-
148
- g.shift_array
149
- g.set_local 0
150
- g.pop
151
-
152
- g.pop
153
- end
154
- end
155
-
156
- relates <<-ruby do
157
- a, i, j = [], 1, 2
158
- a[i], a[j] = a[j], a[i]
159
- ruby
160
-
161
- compile do |g|
162
- g.make_array 0
163
- g.push 1
164
- g.push 2
165
-
166
- g.dup_many 3
167
- g.make_array 3
168
- g.move_down 3
169
-
170
- g.rotate 3
171
-
172
- g.set_local 0
173
- g.pop
174
-
175
- g.set_local 1
176
- g.pop
177
-
178
- g.set_local 2
179
- g.pop
180
-
181
- g.pop
182
-
183
- g.push_local 0
184
- g.push_local 2
185
- g.send :[], 1, false
186
- g.push_local 0
187
- g.push_local 1
188
- g.send :[], 1, false
189
-
190
- g.dup_many 2
191
- g.make_array 2
192
- g.move_down 2
193
-
194
- g.rotate 2
195
-
196
- g.push_local 0
197
- g.swap
198
- g.push_local 1
199
- g.swap
200
- g.send :[]=, 2, false
201
- g.pop
202
-
203
- g.push_local 0
204
- g.swap
205
- g.push_local 2
206
- g.swap
207
- g.send :[]=, 2, false
208
- g.pop
209
- end
210
- end
211
-
212
- relates <<-ruby do
213
- c, d, e, f = [], 1, 2, 3
214
- a, *b = c[d] = f(e, f, c)
215
- ruby
216
-
217
- compile do |g|
218
- g.make_array 0
219
- g.push 1
220
- g.push 2
221
- g.push 3
222
-
223
- g.dup_many 4
224
- g.make_array 4
225
- g.move_down 4
226
-
227
- g.rotate 4
228
-
229
- g.set_local 0
230
- g.pop
231
- g.set_local 1
232
- g.pop
233
- g.set_local 2
234
- g.pop
235
- g.set_local 3
236
- g.pop
237
-
238
- g.pop
239
-
240
- g.push_local 0
241
- g.push_local 1
242
- g.push :self
243
- g.push_local 2
244
- g.push_local 3
245
- g.push_local 0
246
- g.send :f, 3, true
247
-
248
- g.dup
249
- g.move_down 3
250
- g.send :[]=, 2, false
251
- g.pop
252
-
253
- g.cast_multi_value
254
- g.dup
255
-
256
- g.shift_array
257
- g.set_local 4
258
- g.pop
259
- g.cast_array
260
- g.set_local 5
261
- g.pop
262
- end
263
- end
264
-
265
- relates "a, b.c = d, e" do
266
- compile do |g|
267
- g.push :self
268
- g.send :d, 0, true
269
- g.push :self
270
- g.send :e, 0, true
271
-
272
- g.dup_many 2
273
- g.make_array 2
274
- g.move_down 2
275
-
276
- g.rotate 2
277
-
278
- g.set_local 0
279
- g.pop
280
-
281
- g.push :self
282
- g.send :b, 0, true
283
- g.swap
284
- g.send :c=, 1, false
285
-
286
- g.pop
287
- end
288
- end
289
-
290
- relates "*a.m = *b" do
291
- compile do |g|
292
- g.push :self
293
- g.send :b, 0, true
294
- g.cast_array
295
- g.dup
296
-
297
- g.push :self
298
- g.send :a, 0, true
299
- g.swap
300
- g.send :m=, 1, false
301
-
302
- g.pop
303
- end
304
- end
305
-
306
- relates "*a.m = b" do
307
- compile do |g|
308
- g.push :self
309
- g.send :b, 0, true
310
-
311
- array = g.new_label
312
- g.cast_multi_value
313
- g.cast_array
314
- g.dup
315
- g.dup
316
- g.push_cpath_top
317
- g.find_const :Array
318
- g.swap
319
- g.kind_of
320
- g.git array
321
-
322
- g.make_array 1
323
-
324
- array.set!
325
- g.push :self
326
- g.send :a, 0, true
327
- g.swap
328
- g.send :m=, 1, false
329
- g.pop
330
- end
331
- end
332
-
333
- relates "t, *a[:m] = b" do
334
- compile do |g|
335
- ary = g.new_label
336
- assign = g.new_label
337
-
338
- g.push :self
339
- g.send :b, 0, true
340
-
341
- g.cast_multi_value
342
- g.dup
343
-
344
- g.shift_array
345
- g.set_local 0
346
- g.pop
347
-
348
- g.cast_array
349
- g.push :self
350
- g.send :a, 0, true
351
- g.swap
352
- g.push_literal :m
353
- g.swap
354
- g.send :[]=, 2, false
355
- g.pop
356
- end
357
- end
358
-
359
- relates "A, B, C = 1, 2, 3" do
360
- compile do |g|
361
- g.push 1
362
- g.push 2
363
- g.push 3
364
-
365
- g.dup_many 3
366
- g.make_array 3
367
- g.move_down 3
368
-
369
- g.rotate 3
370
-
371
- g.push_scope
372
- g.swap
373
- g.push_literal :A
374
- g.swap
375
- g.send :const_set, 2
376
- g.pop
377
-
378
- g.push_scope
379
- g.swap
380
- g.push_literal :B
381
- g.swap
382
- g.send :const_set, 2
383
- g.pop
384
-
385
- g.push_scope
386
- g.swap
387
- g.push_literal :C
388
- g.swap
389
- g.send :const_set, 2
390
- g.pop
391
- end
392
- end
393
-
394
- relates "* = 1, 2" do
395
- compile do |g|
396
- g.push 1
397
- g.push 2
398
-
399
- g.make_array 2
400
- g.dup
401
-
402
- g.pop
403
- end
404
- end
405
-
406
- relates "*$a = b" do
407
- compile do |g|
408
- g.push :self
409
- g.send :b, 0, true
410
-
411
- array = g.new_label
412
- g.cast_multi_value
413
- g.cast_array
414
- g.dup
415
- g.dup
416
- g.push_cpath_top
417
- g.find_const :Array
418
- g.swap
419
- g.kind_of
420
- g.git array
421
-
422
- g.make_array 1
423
-
424
- array.set!
425
- g.push_rubinius
426
- g.find_const :Globals
427
- g.swap
428
- g.push_literal :$a
429
- g.swap
430
- g.send :[]=, 2
431
- g.pop
432
- end
433
- end
434
-
435
- relates "*$a = *b" do
436
- compile do |g|
437
- g.push :self
438
- g.send :b, 0, true
439
- g.cast_array
440
- g.dup
441
- g.push_rubinius
442
- g.find_const :Globals
443
- g.swap
444
- g.push_literal :$a
445
- g.swap
446
- g.send :[]=, 2
447
- g.pop
448
- end
449
- end
450
-
451
- relates "a, @b = c, d" do
452
- compile do |g|
453
- g.push :self
454
- g.send :c, 0, true
455
- g.push :self
456
- g.send :d, 0, true
457
-
458
- g.dup_many 2
459
- g.make_array 2
460
- g.move_down 2
461
-
462
- g.rotate 2
463
-
464
- g.set_local 0
465
- g.pop
466
-
467
- g.set_ivar :@b
468
- g.pop
469
- end
470
- end
471
-
472
- relates "*@a = b" do
473
- compile do |g|
474
- ary = g.new_label
475
- assign = g.new_label
476
-
477
- g.push :self
478
- g.send :b, 0, true
479
-
480
- array = g.new_label
481
- g.cast_multi_value
482
- g.cast_array
483
- g.dup
484
- g.dup
485
- g.push_cpath_top
486
- g.find_const :Array
487
- g.swap
488
- g.kind_of
489
- g.git array
490
-
491
- g.make_array 1
492
-
493
- array.set!
494
- g.set_ivar :@a
495
-
496
- g.pop
497
- end
498
- end
499
-
500
- relates "*@a = *b" do
501
- compile do |g|
502
- g.push :self
503
- g.send :b, 0, true
504
- g.cast_array
505
- g.dup
506
- g.set_ivar :@a
507
- g.pop
508
- end
509
- end
510
-
511
- relates "@a, $b = 1, 2" do
512
- compile do |g|
513
- g.push 1
514
- g.push 2
515
-
516
- g.dup_many 2
517
- g.make_array 2
518
- g.move_down 2
519
-
520
- g.rotate 2
521
-
522
- g.set_ivar :@a
523
- g.pop
524
-
525
- g.push_rubinius
526
- g.find_const :Globals
527
- g.swap
528
- g.push_literal :$b
529
- g.swap
530
- g.send :[]=, 2
531
-
532
- g.pop
533
- end
534
- end
535
-
536
- relates "a, b = (@a = 1), @a" do
537
- compile do |g|
538
- g.push 1
539
- g.set_ivar :@a
540
- g.push_ivar :@a
541
-
542
- g.dup_many 2
543
- g.make_array 2
544
- g.move_down 2
545
-
546
- g.rotate 2
547
-
548
- g.set_local 0
549
- g.pop
550
- g.set_local 1
551
- g.pop
552
- end
553
- end
554
-
555
- relates "@@a, @@b = 1, 2" do
556
- compile do |g|
557
- g.push 1
558
- g.push 2
559
-
560
- g.dup_many 2
561
- g.make_array 2
562
- g.move_down 2
563
-
564
- g.rotate 2
565
-
566
- g.push_scope
567
- g.swap
568
- g.push_literal :@@a
569
- g.swap
570
- g.send :class_variable_set, 2
571
- g.pop
572
-
573
- g.push_scope
574
- g.swap
575
- g.push_literal :@@b
576
- g.swap
577
- g.send :class_variable_set, 2
578
- g.pop
579
- end
580
- end
581
-
582
- relates "a, b, *c = 1, 2, 3" do
583
- compile do |g|
584
- g.push 1
585
- g.push 2
586
- g.push 3
587
-
588
- g.dup_many 3
589
- g.make_array 3
590
- g.move_down 3
591
-
592
- g.make_array 1
593
-
594
- g.rotate 3
595
-
596
- g.set_local 0
597
- g.pop
598
-
599
- g.set_local 1
600
- g.pop
601
-
602
- g.cast_array
603
- g.set_local 2
604
- g.pop
605
- end
606
- end
607
-
608
- relates "a, b, *c = 1, 2" do
609
- compile do |g|
610
- g.push 1
611
- g.push 2
612
-
613
- g.dup_many 2
614
- g.make_array 2
615
- g.move_down 2
616
-
617
- g.make_array 0
618
-
619
- g.rotate 3
620
-
621
- g.set_local 0
622
- g.pop
623
-
624
- g.set_local 1
625
- g.pop
626
-
627
- g.cast_array
628
- g.set_local 2
629
- g.pop
630
- end
631
- end
632
-
633
- relates "a, b, c, *d = 1, 2" do
634
- compile do |g|
635
- g.push 1
636
- g.push 2
637
-
638
- g.dup_many 2
639
- g.make_array 2
640
- g.move_down 2
641
-
642
- g.push :nil
643
- g.make_array 0
644
-
645
- g.rotate 4
646
-
647
- g.set_local 0
648
- g.pop
649
-
650
- g.set_local 1
651
- g.pop
652
-
653
- g.set_local 2
654
- g.pop
655
-
656
- g.cast_array
657
- g.set_local 3
658
- g.pop
659
- end
660
- end
661
-
662
- relates "a, b, c = *d" do
663
- compile do |g|
664
- g.push :self
665
- g.send :d, 0, true
666
-
667
- g.cast_array
668
- g.dup
669
-
670
- g.shift_array
671
- g.set_local 0
672
- g.pop
673
-
674
- g.shift_array
675
- g.set_local 1
676
- g.pop
677
-
678
- g.shift_array
679
- g.set_local 2
680
- g.pop
681
-
682
- g.pop
683
- end
684
- end
685
-
686
- relates "a, b, c = 1, *d" do
687
- compile do |g|
688
- g.push 1
689
- g.make_array 1
690
-
691
- g.push :self
692
- g.send :d, 0, true
693
- g.cast_array
694
-
695
- g.send :+, 1
696
- g.cast_array
697
-
698
- g.dup
699
-
700
- g.shift_array
701
- g.set_local 0
702
- g.pop
703
-
704
- g.shift_array
705
- g.set_local 1
706
- g.pop
707
-
708
- g.shift_array
709
- g.set_local 2
710
- g.pop
711
-
712
- g.pop
713
- end
714
- end
715
-
716
- relates "a, b, *c = *d" do
717
- compile do |g|
718
- g.push :self
719
- g.send :d, 0, true
720
-
721
- g.cast_array
722
- g.dup
723
-
724
- g.shift_array
725
- g.set_local 0
726
- g.pop
727
-
728
- g.shift_array
729
- g.set_local 1
730
- g.pop
731
-
732
- g.cast_array
733
- g.set_local 2
734
- g.pop
735
- end
736
- end
737
-
738
- relates "*a = 1, 2, 3" do
739
- compile do |g|
740
- g.push 1
741
- g.push 2
742
- g.push 3
743
-
744
- g.make_array 3
745
- g.set_local 0
746
- g.dup
747
-
748
- g.pop
749
- end
750
- end
751
-
752
- relates "*a = b" do
753
- compile do |g|
754
- g.push :self
755
- g.send :b, 0, true
756
-
757
- array = g.new_label
758
- g.cast_multi_value
759
- g.cast_array
760
- g.dup
761
- g.dup
762
- g.push_cpath_top
763
- g.find_const :Array
764
- g.swap
765
- g.kind_of
766
- g.git array
767
-
768
- g.make_array 1
769
-
770
- array.set!
771
- g.set_local 0
772
-
773
- g.pop
774
- end
775
- end
776
-
777
- relates "*a = *b" do
778
- compile do |g|
779
- g.push :self
780
- g.send :b, 0, true
781
- g.cast_array
782
- g.dup
783
- g.set_local 0
784
- g.pop
785
- end
786
- end
787
-
788
- relates "a, (b, c) = [1, [2, 3]]" do
789
- compile do |g|
790
- g.push 1
791
- g.push 2
792
- g.push 3
793
- g.make_array 2
794
- g.make_array 2
795
- g.cast_multi_value
796
- g.dup
797
-
798
- g.shift_array
799
- g.set_local 0
800
- g.pop
801
-
802
- g.shift_array
803
- g.cast_array
804
- g.shift_array
805
- g.set_local 1
806
- g.pop
807
-
808
- g.shift_array
809
- g.set_local 2
810
- g.pop
811
-
812
- g.pop
813
- g.pop
814
- end
815
- end
816
-
817
- relates "a, = *[[[1]]]" do
818
- compile do |g|
819
- g.push 1
820
- g.make_array 1
821
- g.make_array 1
822
- g.make_array 1
823
- g.dup
824
- g.shift_array
825
- g.set_local 0
826
- g.pop
827
- g.pop
828
- end
829
- end
830
-
831
- relates "a, b, * = c" do
832
- compile do |g|
833
- g.push :self
834
- g.send :c, 0, true
835
- g.cast_multi_value
836
- g.dup
837
-
838
- g.shift_array
839
- g.set_local 0
840
- g.pop
841
-
842
- g.shift_array
843
- g.set_local 1
844
- g.pop
845
-
846
- g.pop
847
- end
848
- end
849
-
850
- relates "a, b, = c" do
851
- compile do |g|
852
- g.push :self
853
- g.send :c, 0, true
854
- g.cast_multi_value
855
- g.dup
856
-
857
- g.shift_array
858
- g.set_local 0
859
- g.pop
860
-
861
- g.shift_array
862
- g.set_local 1
863
- g.pop
864
-
865
- g.pop
866
- end
867
- end
868
-
869
- relates "a, b, c = m d" do
870
- compile do |g|
871
- g.push :self
872
- g.push :self
873
- g.send :d, 0, true
874
- g.send :m, 1, true
875
- g.cast_multi_value
876
- g.dup
877
- g.shift_array
878
- g.set_local 0
879
- g.pop
880
- g.shift_array
881
- g.set_local 1
882
- g.pop
883
- g.shift_array
884
- g.set_local 2
885
- g.pop
886
- g.pop
887
- end
888
- end
889
-
890
- relates "a, b, *c = d, e, f, g" do
891
- compile do |g|
892
- g.push :self
893
- g.send :d, 0, true
894
- g.push :self
895
- g.send :e, 0, true
896
- g.push :self
897
- g.send :f, 0, true
898
- g.push :self
899
- g.send :g, 0, true
900
-
901
- g.dup_many 4
902
- g.make_array 4
903
- g.move_down 4
904
-
905
- g.make_array 2
906
-
907
- g.rotate 3
908
-
909
- g.set_local 0
910
- g.pop
911
-
912
- g.set_local 1
913
- g.pop
914
-
915
- g.cast_array
916
- g.set_local 2
917
- g.pop
918
- end
919
- end
920
-
921
- relates "a, b, *c = d.e(\"f\")" do
922
- compile do |g|
923
- g.push :self
924
- g.send :d, 0, true
925
- g.push_literal "f"
926
- g.string_dup
927
- g.send :e, 1, false
928
-
929
- g.cast_multi_value
930
- g.dup
931
-
932
- g.shift_array
933
- g.set_local 0
934
- g.pop
935
-
936
- g.shift_array
937
- g.set_local 1
938
- g.pop
939
-
940
- g.cast_array
941
- g.set_local 2
942
- g.pop
943
- end
944
- end
945
-
946
- relates "a, b, *c = d" do
947
- compile do |g|
948
- g.push :self
949
- g.send :d, 0, true
950
-
951
- g.cast_multi_value
952
- g.dup
953
-
954
- g.shift_array
955
- g.set_local 0
956
- g.pop
957
-
958
- g.shift_array
959
- g.set_local 1
960
- g.pop
961
-
962
- g.cast_array
963
- g.set_local 2
964
- g.pop
965
- end
966
- end
967
-
968
- relates "a, b = c" do
969
- compile do |g|
970
- g.push :self
971
- g.send :c, 0, true
972
- g.cast_multi_value
973
- g.dup
974
-
975
- g.shift_array
976
- g.set_local 0
977
- g.pop
978
-
979
- g.shift_array
980
- g.set_local 1
981
- g.pop
982
-
983
- g.pop
984
- end
985
- end
986
-
987
- relates <<-ruby do
988
- m do
989
- a, b = 1, 2
990
- next
991
- end
992
- ruby
993
-
994
- compile do |g|
995
- g.push :self
996
- g.in_block_send :m, :none do |d|
997
- d.push 1
998
- d.push 2
999
- d.dup_many 2
1000
- d.make_array 2
1001
- d.move_down 2
1002
- d.rotate 2
1003
- d.set_local 0
1004
- d.pop
1005
- d.set_local 1
1006
- d.pop
1007
- d.pop
1008
- d.push :nil
1009
- d.ret
1010
- end
1011
- end
1012
- end
1013
-
1014
- relates "a, (b, c) = 1" do
1015
- compile do |g|
1016
- g.push 1
1017
- g.cast_multi_value
1018
- g.dup
1019
-
1020
- g.shift_array
1021
- g.set_local 0
1022
- g.pop
1023
-
1024
- g.shift_array
1025
- g.cast_array
1026
-
1027
- g.shift_array
1028
- g.set_local 1
1029
- g.pop
1030
-
1031
- g.shift_array
1032
- g.set_local 2
1033
- g.pop
1034
-
1035
- g.pop
1036
- g.pop
1037
- end
1038
- end
1039
-
1040
- relates "a, (b, c) = *1" do
1041
- compile do |g|
1042
- g.push 1
1043
- g.cast_array
1044
- g.dup
1045
-
1046
- g.shift_array
1047
- g.set_local 0
1048
- g.pop
1049
-
1050
- g.shift_array
1051
- g.cast_array
1052
-
1053
- g.shift_array
1054
- g.set_local 1
1055
- g.pop
1056
-
1057
- g.shift_array
1058
- g.set_local 2
1059
- g.pop
1060
-
1061
- g.pop
1062
- g.pop
1063
- end
1064
- end
1065
-
1066
- relates "a, (b, c) = 1, 2, 3" do
1067
- compile do |g|
1068
- g.push 1
1069
- g.push 2
1070
- g.push 3
1071
-
1072
- g.dup_many 3
1073
- g.make_array 3
1074
- g.move_down 3
1075
-
1076
- g.rotate 3
1077
-
1078
- g.set_local 0
1079
- g.pop
1080
-
1081
- g.cast_array
1082
-
1083
- g.shift_array
1084
- g.set_local 1
1085
- g.pop
1086
-
1087
- g.shift_array
1088
- g.set_local 2
1089
- g.pop
1090
-
1091
- g.pop
1092
- g.pop
1093
- end
1094
- end
1095
-
1096
- relates "a, (b, *c), d = 1, 2, 3, 4" do
1097
- compile do |g|
1098
- g.push 1
1099
- g.push 2
1100
- g.push 3
1101
- g.push 4
1102
-
1103
- g.dup_many 4
1104
- g.make_array 4
1105
- g.move_down 4
1106
-
1107
- g.rotate 4
1108
-
1109
- g.set_local 0
1110
- g.pop
1111
-
1112
- g.cast_array
1113
-
1114
- g.shift_array
1115
- g.set_local 1
1116
- g.pop
1117
-
1118
- ary = g.new_label
1119
- assign = g.new_label
1120
-
1121
- g.dup
1122
- g.push_cpath_top
1123
- g.find_const :Array
1124
- g.swap
1125
- g.kind_of
1126
- g.git assign
1127
- g.make_array 1
1128
-
1129
- assign.set!
1130
- g.set_local 2
1131
- g.pop
1132
-
1133
- g.set_local 3
1134
- g.pop
1135
-
1136
- g.pop
1137
- end
1138
- end
1139
-
1140
- relates "a, (b, c) = 1, *2" do
1141
- compile do |g|
1142
- g.push 1
1143
- g.make_array 1
1144
- g.push 2
1145
- g.cast_array
1146
- g.send :+, 1
1147
- g.cast_array
1148
- g.dup
1149
-
1150
- g.shift_array
1151
- g.set_local 0
1152
- g.pop
1153
-
1154
- g.shift_array
1155
- g.cast_array
1156
-
1157
- g.shift_array
1158
- g.set_local 1
1159
- g.pop
1160
-
1161
- g.shift_array
1162
- g.set_local 2
1163
- g.pop
1164
-
1165
- g.pop
1166
- g.pop
1167
- end
1168
- end
1169
-
1170
- relates "a, (b, *c) = 1" do
1171
- compile do |g|
1172
- g.push 1
1173
- g.cast_multi_value
1174
- g.dup
1175
-
1176
- g.shift_array
1177
- g.set_local 0
1178
- g.pop
1179
-
1180
- g.shift_array
1181
- g.cast_array
1182
-
1183
- g.shift_array
1184
- g.set_local 1
1185
- g.pop
1186
-
1187
- assign = g.new_label
1188
-
1189
- g.dup
1190
- g.push_cpath_top
1191
- g.find_const :Array
1192
- g.swap
1193
- g.kind_of
1194
- g.git assign
1195
- g.make_array 1
1196
-
1197
- assign.set!
1198
- g.set_local 2
1199
-
1200
- g.pop
1201
- g.pop
1202
- end
1203
- end
1204
-
1205
- relates "a, (b, *c) = 1, 2" do
1206
- compile do |g|
1207
- g.push 1
1208
- g.push 2
1209
-
1210
- g.dup_many 2
1211
- g.make_array 2
1212
- g.move_down 2
1213
-
1214
- g.rotate 2
1215
-
1216
- g.set_local 0
1217
- g.pop
1218
-
1219
- g.cast_array
1220
-
1221
- g.shift_array
1222
- g.set_local 1
1223
- g.pop
1224
-
1225
- assign = g.new_label
1226
-
1227
- g.dup
1228
- g.push_cpath_top
1229
- g.find_const :Array
1230
- g.swap
1231
- g.kind_of
1232
- g.git assign
1233
- g.make_array 1
1234
-
1235
- assign.set!
1236
- g.set_local 2
1237
-
1238
- g.pop
1239
- end
1240
- end
1241
-
1242
- relates "a, (b, *c) = *1" do
1243
- compile do |g|
1244
- g.push 1
1245
- g.cast_array
1246
- g.dup
1247
-
1248
- g.shift_array
1249
- g.set_local 0
1250
- g.pop
1251
-
1252
- g.shift_array
1253
- g.cast_array
1254
-
1255
- g.shift_array
1256
- g.set_local 1
1257
- g.pop
1258
-
1259
- assign = g.new_label
1260
-
1261
- g.dup
1262
- g.push_cpath_top
1263
- g.find_const :Array
1264
- g.swap
1265
- g.kind_of
1266
- g.git assign
1267
- g.make_array 1
1268
-
1269
- assign.set!
1270
- g.set_local 2
1271
- g.pop
1272
-
1273
- g.pop
1274
- end
1275
- end
1276
-
1277
- relates "a, (b, *c) = 1, *2" do
1278
- compile do |g|
1279
- g.push 1
1280
- g.make_array 1
1281
- g.push 2
1282
- g.cast_array
1283
- g.send :+, 1
1284
-
1285
- g.cast_array
1286
- g.dup
1287
-
1288
- g.shift_array
1289
- g.set_local 0
1290
- g.pop
1291
-
1292
- g.shift_array
1293
- g.cast_array
1294
-
1295
- g.shift_array
1296
- g.set_local 1
1297
- g.pop
1298
-
1299
- assign = g.new_label
1300
-
1301
- g.dup
1302
- g.push_cpath_top
1303
- g.find_const :Array
1304
- g.swap
1305
- g.kind_of
1306
- g.git assign
1307
- g.make_array 1
1308
-
1309
- assign.set!
1310
- g.set_local 2
1311
- g.pop
1312
-
1313
- g.pop
1314
- end
1315
- end
1316
-
1317
- relates "a, (*b) = 1" do
1318
- compile do |g|
1319
- g.push 1
1320
- g.cast_multi_value
1321
- g.dup
1322
-
1323
- g.shift_array
1324
- g.set_local 0
1325
- g.pop
1326
-
1327
- assign = g.new_label
1328
-
1329
- g.shift_array
1330
- g.dup
1331
- g.push_cpath_top
1332
- g.find_const :Array
1333
- g.swap
1334
- g.kind_of
1335
- g.git assign
1336
- g.make_array 1
1337
-
1338
- assign.set!
1339
- g.set_local 1
1340
- g.pop
1341
-
1342
- g.pop
1343
- end
1344
- end
1345
-
1346
- relates "a, (*b) = 1, 2" do
1347
- compile do |g|
1348
- g.push 1
1349
- g.push 2
1350
-
1351
- g.dup_many 2
1352
- g.make_array 2
1353
- g.move_down 2
1354
-
1355
- g.rotate 2
1356
-
1357
- g.set_local 0
1358
- g.pop
1359
-
1360
- assign = g.new_label
1361
-
1362
- g.dup
1363
- g.push_cpath_top
1364
- g.find_const :Array
1365
- g.swap
1366
- g.kind_of
1367
- g.git assign
1368
- g.make_array 1
1369
-
1370
- assign.set!
1371
- g.set_local 1
1372
- g.pop
1373
- end
1374
- end
1375
-
1376
- relates "a, (*b) = *1" do
1377
- compile do |g|
1378
- g.push 1
1379
- g.cast_array
1380
- g.dup
1381
-
1382
- g.shift_array
1383
- g.set_local 0
1384
- g.pop
1385
-
1386
- assign = g.new_label
1387
-
1388
- g.shift_array
1389
- g.dup
1390
- g.push_cpath_top
1391
- g.find_const :Array
1392
- g.swap
1393
- g.kind_of
1394
- g.git assign
1395
- g.make_array 1
1396
-
1397
- assign.set!
1398
- g.set_local 1
1399
- g.pop
1400
-
1401
- g.pop
1402
- end
1403
- end
1404
-
1405
- relates "a, (*b) = 1, *2" do
1406
- compile do |g|
1407
- g.push 1
1408
- g.make_array 1
1409
- g.push 2
1410
- g.cast_array
1411
- g.send :+, 1
1412
- g.cast_array
1413
- g.dup
1414
-
1415
- g.shift_array
1416
- g.set_local 0
1417
- g.pop
1418
-
1419
- g.shift_array
1420
-
1421
- assign = g.new_label
1422
-
1423
- g.dup
1424
- g.push_cpath_top
1425
- g.find_const :Array
1426
- g.swap
1427
- g.kind_of
1428
- g.git assign
1429
- g.make_array 1
1430
-
1431
- assign.set!
1432
- g.set_local 1
1433
- g.pop
1434
-
1435
- g.pop
1436
- end
1437
- end
1438
-
1439
- relates "a, b = nil, lambda { a = 7 }" do
1440
- compile do |g|
1441
- g.push :nil
1442
-
1443
- g.push :self
1444
- g.in_block_send :lambda, :none do |d|
1445
- d.push 7
1446
- d.set_local_depth 1, 0
1447
- end
1448
-
1449
- g.dup_many 2
1450
- g.make_array 2
1451
- g.move_down 2
1452
-
1453
- g.rotate 2
1454
-
1455
- g.set_local 0
1456
- g.pop
1457
-
1458
- g.set_local 1
1459
- g.pop
1460
- end
1461
- end
1462
-
1463
- relates "a, *b = lambda { b = 8 }, nil" do
1464
- compile do |g|
1465
- g.push :self
1466
- g.in_block_send :lambda, :none do |d|
1467
- d.push 8
1468
- d.set_local_depth 1, 1
1469
- end
1470
-
1471
- g.push :nil
1472
-
1473
- g.dup_many 2
1474
- g.make_array 2
1475
- g.move_down 2
1476
-
1477
- g.make_array 1
1478
- g.rotate 2
1479
-
1480
- g.set_local 0
1481
- g.pop
1482
-
1483
- g.cast_array
1484
- g.set_local 1
1485
- g.pop
1486
- end
1487
- end
1488
-
1489
- relates "*a = lambda { a = 8 }" do
1490
- compile do |g|
1491
- g.push :self
1492
- g.in_block_send :lambda, :none do |d|
1493
- d.push 8
1494
- d.set_local_depth 1, 0
1495
- end
1496
-
1497
- array = g.new_label
1498
- g.cast_multi_value
1499
- g.cast_array
1500
- g.dup
1501
- g.dup
1502
- g.push_cpath_top
1503
- g.find_const :Array
1504
- g.swap
1505
- g.kind_of
1506
- g.git array
1507
-
1508
- g.make_array 1
1509
-
1510
- array.set!
1511
- g.set_local 0
1512
-
1513
- g.pop
1514
- end
1515
- end
1516
-
1517
- relates "a, (b, *c), d = lambda { b = d }, [], nil" do
1518
- compile do |g|
1519
- g.push :self
1520
- g.in_block_send :lambda, :none do |d|
1521
- d.push_local_depth 1, 3
1522
- d.set_local_depth 1, 1
1523
- end
1524
-
1525
- g.make_array 0
1526
- g.push :nil
1527
-
1528
- g.dup_many 3
1529
- g.make_array 3
1530
- g.move_down 3
1531
-
1532
- g.rotate 3
1533
-
1534
- g.set_local 0
1535
- g.pop
1536
-
1537
- g.cast_array
1538
- g.shift_array
1539
- g.set_local 1
1540
- g.pop
1541
- g.dup
1542
- g.push_cpath_top
1543
- g.find_const :Array
1544
- g.swap
1545
- g.kind_of
1546
-
1547
- is_array = g.new_label
1548
- g.git is_array
1549
- g.make_array 1
1550
- is_array.set!
1551
-
1552
- g.set_local 2
1553
- g.pop
1554
- g.set_local 3
1555
- g.pop
1556
- end
1557
- end
1558
- end