rubinius-compiler 3.1 → 3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rubinius/code/compiler/generator.rb +63 -150
- data/lib/rubinius/code/compiler/generator_methods.rb +152 -237
- data/lib/rubinius/code/compiler/opcodes.rb +54 -72
- data/lib/rubinius/code/compiler/version.rb +1 -1
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8f0185b47866838d791ca5875d2c2c86a92c5e9
|
4
|
+
data.tar.gz: cc1d20dc50c05e28554a5efd60ac10f34d2c2a65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cc1d06ee268a446f6eba05e33f59a98e44659bf8e63c31b8b00d7dd05c171cf7940b193de3333e647a7c2ea88a29df5bb7c903c5e31b38f06c170d9ed419d0d
|
7
|
+
data.tar.gz: 51a91af6651953519056ec02b9b8ca708907d26c10124e72cfbbebe41c97767dffa01a6abb20fd91ba212653049d78057d5a68b69956285612382563fbffd521
|
@@ -7,13 +7,13 @@ module CodeTools
|
|
7
7
|
##
|
8
8
|
# Jump label for the branch instructions. The use scenarios for labels:
|
9
9
|
# 1. Used and then set
|
10
|
-
# g.
|
10
|
+
# g.goto_if_false label
|
11
11
|
# ...
|
12
12
|
# label.set!
|
13
13
|
# 2. Set and then used
|
14
14
|
# label.set!
|
15
15
|
# ...
|
16
|
-
# g.
|
16
|
+
# g.goto_if_true label
|
17
17
|
# 3. 1, 2
|
18
18
|
#
|
19
19
|
# Many labels are only used once. This class employs two small
|
@@ -119,63 +119,61 @@ module CodeTools
|
|
119
119
|
SEPARATOR_SIZE = 40
|
120
120
|
|
121
121
|
def invalid(message)
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
printf "%d " % arg
|
151
|
-
end
|
122
|
+
puts message
|
123
|
+
name = @generator.name.inspect
|
124
|
+
size = (SEPARATOR_SIZE - name.size - 2) / 2
|
125
|
+
size = 1 if size <= 0
|
126
|
+
puts "\n#{"=" * size} #{name} #{"=" * (size + name.size % 2)}"
|
127
|
+
|
128
|
+
literals = @generator.literals
|
129
|
+
names = @generator.local_names
|
130
|
+
stream = @generator.stream
|
131
|
+
i = 0
|
132
|
+
n = stream.size
|
133
|
+
stack = 0
|
134
|
+
|
135
|
+
while i < n
|
136
|
+
insn = Rubinius::InstructionSet[stream[i]]
|
137
|
+
printf "[%3d] %04d %-28s" % [stack, i, insn.opcode.inspect]
|
138
|
+
|
139
|
+
args = stream[i+1, insn.size-1]
|
140
|
+
if insn.size > 1
|
141
|
+
insn.args.each_with_index do |kind, index|
|
142
|
+
arg = args[index]
|
143
|
+
case kind
|
144
|
+
when :literal
|
145
|
+
printf "%s " % literals[arg].inspect
|
146
|
+
when :local
|
147
|
+
printf "%s " % (names ? names[arg] : arg)
|
148
|
+
else
|
149
|
+
printf "%d " % arg
|
152
150
|
end
|
153
151
|
end
|
152
|
+
end
|
154
153
|
|
155
|
-
|
154
|
+
puts
|
156
155
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
pro = insn.stack_produced
|
164
|
-
if pro.kind_of? Array
|
165
|
-
pro = (args[pro[1] - 1] * pro[2]) + pro[0]
|
166
|
-
end
|
156
|
+
if insn.variable_stack?
|
157
|
+
use = insn.stack_consumed
|
158
|
+
if use.kind_of? Array
|
159
|
+
use = args[use[1] - 1] + use[0]
|
160
|
+
end
|
167
161
|
|
168
|
-
|
169
|
-
|
170
|
-
|
162
|
+
pro = insn.stack_produced
|
163
|
+
if pro.kind_of? Array
|
164
|
+
pro = (args[pro[1] - 1] * pro[2]) + pro[0]
|
171
165
|
end
|
172
166
|
|
173
|
-
|
167
|
+
stack += pro - use
|
168
|
+
else
|
169
|
+
stack += insn.stack_difference
|
174
170
|
end
|
175
171
|
|
176
|
-
|
172
|
+
i += insn.size
|
177
173
|
end
|
178
174
|
|
175
|
+
puts "-" * SEPARATOR_SIZE
|
176
|
+
|
179
177
|
raise CompileError, message
|
180
178
|
end
|
181
179
|
|
@@ -447,19 +445,6 @@ module CodeTools
|
|
447
445
|
Label.new(self)
|
448
446
|
end
|
449
447
|
|
450
|
-
# Aliases
|
451
|
-
|
452
|
-
alias_method :dup, :dup_top
|
453
|
-
alias_method :git, :goto_if_true
|
454
|
-
alias_method :gif, :goto_if_false
|
455
|
-
alias_method :gin, :goto_if_nil
|
456
|
-
alias_method :ginn, :goto_if_not_nil
|
457
|
-
alias_method :giu, :goto_if_undefined
|
458
|
-
alias_method :ginu, :goto_if_not_undefined
|
459
|
-
alias_method :gie, :goto_if_equal
|
460
|
-
alias_method :gine, :goto_if_not_equal
|
461
|
-
alias_method :swap, :swap_stack
|
462
|
-
|
463
448
|
# Helpers
|
464
449
|
|
465
450
|
def new_basic_block
|
@@ -482,82 +467,27 @@ module CodeTools
|
|
482
467
|
return idx
|
483
468
|
end
|
484
469
|
|
485
|
-
def
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
push_false
|
491
|
-
when :self
|
492
|
-
push_self
|
493
|
-
when :nil
|
494
|
-
push_nil
|
495
|
-
when Integer
|
496
|
-
push_int what
|
497
|
-
else
|
498
|
-
raise CompileError, "Unknown push argument '#{what.inspect}'"
|
499
|
-
end
|
470
|
+
def push_generator(generator)
|
471
|
+
index = @literals.size
|
472
|
+
push_literal generator
|
473
|
+
@generators << index
|
474
|
+
index
|
500
475
|
end
|
501
476
|
|
502
|
-
def
|
503
|
-
index =
|
477
|
+
def add_generator(generator)
|
478
|
+
index = add_literal generator
|
504
479
|
@generators << index
|
505
480
|
index
|
506
481
|
end
|
507
482
|
|
508
|
-
# Find the index for the specified literal, or create a new slot if the
|
509
|
-
# literal has not been encountered previously.
|
510
483
|
def find_literal(literal)
|
511
484
|
@literals_map[literal]
|
512
485
|
end
|
513
486
|
|
514
|
-
# Add literal exists to allow RegexLiteral's to create a new regex literal
|
515
|
-
# object at run-time. All other literals should be added via find_literal,
|
516
|
-
# which re-use an existing matching literal if one exists.
|
517
487
|
def add_literal(literal)
|
518
488
|
index = @literals.size
|
519
489
|
@literals << literal
|
520
|
-
|
521
|
-
end
|
522
|
-
|
523
|
-
# Pushes the specified literal value into the literal's tuple
|
524
|
-
def push_literal(literal)
|
525
|
-
index = find_literal literal
|
526
|
-
emit_push_literal index
|
527
|
-
return index
|
528
|
-
end
|
529
|
-
|
530
|
-
# Puts +what+ is the literals tuple without trying to see if
|
531
|
-
# something that is like +what+ is already there.
|
532
|
-
def push_unique_literal(literal)
|
533
|
-
index = add_literal literal
|
534
|
-
emit_push_literal index
|
535
|
-
return index
|
536
|
-
end
|
537
|
-
|
538
|
-
# Pushes the literal value on the stack into the specified position in the
|
539
|
-
# literals tuple. Most timees, push_literal should be used instead; this
|
540
|
-
# method exists to support RegexLiteral, where the compiled literal value
|
541
|
-
# (a Regex object) does not exist until runtime.
|
542
|
-
def push_literal_at(index)
|
543
|
-
emit_push_literal index
|
544
|
-
return index
|
545
|
-
end
|
546
|
-
|
547
|
-
# The push_const instruction itself is unused right now. The instruction
|
548
|
-
# parser does not emit a GeneratorMethods#push_const. This method/opcode
|
549
|
-
# was used in the compiler before the push_const_fast instruction. Rather
|
550
|
-
# than changing the compiler code, this helper was used.
|
551
|
-
def push_const(name)
|
552
|
-
push_const_fast find_literal(name)
|
553
|
-
end
|
554
|
-
|
555
|
-
# The find_const instruction itself is unused right now. The instruction
|
556
|
-
# parser does not emit a GeneratorMethods#find_const. This method/opcode
|
557
|
-
# was used in the compiler before the find_const_fast instruction. Rather
|
558
|
-
# than changing the compiler code, this helper was used.
|
559
|
-
def find_const(name)
|
560
|
-
find_const_fast find_literal(name)
|
490
|
+
index
|
561
491
|
end
|
562
492
|
|
563
493
|
def push_local(idx)
|
@@ -601,18 +531,11 @@ module CodeTools
|
|
601
531
|
raise CompileError, "count must be a number"
|
602
532
|
end
|
603
533
|
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
end
|
610
|
-
|
611
|
-
# Do a private send to self with no arguments specified, ie, a vcall
|
612
|
-
# style send.
|
613
|
-
def send_vcall(meth)
|
614
|
-
idx = find_literal(meth)
|
615
|
-
send_method idx
|
534
|
+
if count == 0
|
535
|
+
send_method meth
|
536
|
+
else
|
537
|
+
send_stack meth, count
|
538
|
+
end
|
616
539
|
end
|
617
540
|
|
618
541
|
def send_with_block(meth, count, priv=false)
|
@@ -622,9 +545,7 @@ module CodeTools
|
|
622
545
|
raise CompileError, "count must be a number"
|
623
546
|
end
|
624
547
|
|
625
|
-
|
626
|
-
|
627
|
-
send_stack_with_block idx, count
|
548
|
+
send_stack_with_block meth, count
|
628
549
|
end
|
629
550
|
|
630
551
|
def send_with_splat(meth, args, priv=false, concat=false)
|
@@ -634,23 +555,15 @@ module CodeTools
|
|
634
555
|
|
635
556
|
allow_private if priv
|
636
557
|
|
637
|
-
|
638
|
-
send_stack_with_splat idx, args
|
558
|
+
send_stack_with_splat meth, args
|
639
559
|
end
|
640
560
|
|
641
561
|
def send_super(meth, args, splat=false)
|
642
|
-
idx = find_literal(meth)
|
643
|
-
|
644
562
|
if splat
|
645
|
-
send_super_stack_with_splat
|
563
|
+
send_super_stack_with_splat meth, args
|
646
564
|
else
|
647
|
-
send_super_stack_with_block
|
565
|
+
send_super_stack_with_block meth, args
|
648
566
|
end
|
649
567
|
end
|
650
|
-
|
651
|
-
def meta_to_s(name=:to_s, priv=true)
|
652
|
-
allow_private if priv
|
653
|
-
super find_literal(name)
|
654
|
-
end
|
655
568
|
end
|
656
569
|
end
|
@@ -31,25 +31,10 @@ module CodeTools
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def push_int(arg1)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
@instruction = 4
|
39
|
-
else
|
40
|
-
case arg1
|
41
|
-
when -1
|
42
|
-
meta_push_neg_1
|
43
|
-
when 0
|
44
|
-
meta_push_0
|
45
|
-
when 1
|
46
|
-
meta_push_1
|
47
|
-
when 2
|
48
|
-
meta_push_2
|
49
|
-
else
|
50
|
-
push_literal arg1
|
51
|
-
end
|
52
|
-
end
|
34
|
+
@stream << 4 << arg1
|
35
|
+
@ip += 2
|
36
|
+
@current_block.add_stack(0, 1)
|
37
|
+
@instruction = 4
|
53
38
|
end
|
54
39
|
|
55
40
|
def push_self
|
@@ -59,14 +44,16 @@ module CodeTools
|
|
59
44
|
@instruction = 5
|
60
45
|
end
|
61
46
|
|
62
|
-
def
|
47
|
+
def push_memo(arg1)
|
48
|
+
arg1 = find_literal(arg1)
|
63
49
|
@stream << 6 << arg1
|
64
50
|
@ip += 2
|
65
51
|
@current_block.add_stack(1, 1)
|
66
52
|
@instruction = 6
|
67
53
|
end
|
68
54
|
|
69
|
-
def
|
55
|
+
def push_literal(arg1)
|
56
|
+
arg1 = find_literal(arg1)
|
70
57
|
@stream << 7 << arg1
|
71
58
|
@ip += 2
|
72
59
|
@current_block.add_stack(0, 1)
|
@@ -206,14 +193,14 @@ module CodeTools
|
|
206
193
|
@instruction = 17
|
207
194
|
end
|
208
195
|
|
209
|
-
def
|
196
|
+
def swap
|
210
197
|
@stream << 18
|
211
198
|
@ip += 1
|
212
199
|
@current_block.add_stack(2, 2)
|
213
200
|
@instruction = 18
|
214
201
|
end
|
215
202
|
|
216
|
-
def
|
203
|
+
def dup
|
217
204
|
@stream << 19
|
218
205
|
@ip += 1
|
219
206
|
@current_block.add_stack(1, 2)
|
@@ -221,6 +208,7 @@ module CodeTools
|
|
221
208
|
end
|
222
209
|
|
223
210
|
def dup_many(arg1)
|
211
|
+
arg1 = Integer(arg1)
|
224
212
|
@stream << 20 << arg1
|
225
213
|
@ip += 2
|
226
214
|
@current_block.add_stack(arg1, (arg1 * 2))
|
@@ -235,6 +223,7 @@ module CodeTools
|
|
235
223
|
end
|
236
224
|
|
237
225
|
def pop_many(arg1)
|
226
|
+
arg1 = Integer(arg1)
|
238
227
|
@stream << 22 << arg1
|
239
228
|
@ip += 2
|
240
229
|
@current_block.add_stack(arg1, 0)
|
@@ -242,6 +231,7 @@ module CodeTools
|
|
242
231
|
end
|
243
232
|
|
244
233
|
def rotate(arg1)
|
234
|
+
arg1 = Integer(arg1)
|
245
235
|
@stream << 23 << arg1
|
246
236
|
@ip += 2
|
247
237
|
@current_block.add_stack(arg1, (arg1 * 1))
|
@@ -385,6 +375,7 @@ module CodeTools
|
|
385
375
|
end
|
386
376
|
|
387
377
|
def make_array(arg1)
|
378
|
+
arg1 = Integer(arg1)
|
388
379
|
@stream << 41 << arg1
|
389
380
|
@ip += 2
|
390
381
|
@current_block.add_stack(arg1, 1)
|
@@ -407,7 +398,7 @@ module CodeTools
|
|
407
398
|
end
|
408
399
|
|
409
400
|
def set_ivar(arg1)
|
410
|
-
arg1 = find_literal
|
401
|
+
arg1 = find_literal(arg1)
|
411
402
|
@stream << 44 << arg1
|
412
403
|
@ip += 2
|
413
404
|
@current_block.add_stack(1, 1)
|
@@ -415,7 +406,7 @@ module CodeTools
|
|
415
406
|
end
|
416
407
|
|
417
408
|
def push_ivar(arg1)
|
418
|
-
arg1 = find_literal
|
409
|
+
arg1 = find_literal(arg1)
|
419
410
|
@stream << 45 << arg1
|
420
411
|
@ip += 2
|
421
412
|
@current_block.add_stack(0, 1)
|
@@ -423,463 +414,387 @@ module CodeTools
|
|
423
414
|
end
|
424
415
|
|
425
416
|
def set_const(arg1)
|
426
|
-
|
417
|
+
arg1 = find_literal(arg1)
|
418
|
+
@stream << 46 << arg1
|
427
419
|
@ip += 2
|
428
420
|
@current_block.add_stack(1, 1)
|
429
|
-
@instruction =
|
421
|
+
@instruction = 46
|
430
422
|
end
|
431
423
|
|
432
424
|
def set_const_at(arg1)
|
433
|
-
|
425
|
+
arg1 = find_literal(arg1)
|
426
|
+
@stream << 47 << arg1
|
434
427
|
@ip += 2
|
435
428
|
@current_block.add_stack(2, 1)
|
436
|
-
@instruction =
|
437
|
-
end
|
438
|
-
|
439
|
-
def find_const(arg1)
|
440
|
-
arg1 = find_literal arg1
|
441
|
-
@stream << 49 << arg1
|
442
|
-
@ip += 2
|
443
|
-
@current_block.add_stack(1, 1)
|
444
|
-
@instruction = 49
|
429
|
+
@instruction = 47
|
445
430
|
end
|
446
431
|
|
447
432
|
def push_cpath_top
|
448
|
-
@stream <<
|
433
|
+
@stream << 48
|
449
434
|
@ip += 1
|
450
435
|
@current_block.add_stack(0, 1)
|
451
|
-
@instruction =
|
436
|
+
@instruction = 48
|
452
437
|
end
|
453
438
|
|
454
|
-
def
|
455
|
-
|
439
|
+
def push_const(arg1)
|
440
|
+
arg1 = find_literal(arg1)
|
441
|
+
@stream << 49 << arg1
|
456
442
|
@ip += 2
|
457
443
|
@current_block.add_stack(0, 1)
|
458
|
-
@instruction =
|
444
|
+
@instruction = 49
|
459
445
|
end
|
460
446
|
|
461
|
-
def
|
462
|
-
|
447
|
+
def find_const(arg1)
|
448
|
+
arg1 = find_literal(arg1)
|
449
|
+
@stream << 50 << arg1
|
463
450
|
@ip += 2
|
464
451
|
@current_block.add_stack(1, 1)
|
465
|
-
@instruction =
|
452
|
+
@instruction = 50
|
466
453
|
end
|
467
454
|
|
468
455
|
def set_call_flags(arg1)
|
469
|
-
@stream <<
|
456
|
+
@stream << 51 << arg1
|
470
457
|
@ip += 2
|
471
458
|
@current_block.add_stack(0, 0)
|
472
|
-
@instruction =
|
459
|
+
@instruction = 51
|
473
460
|
end
|
474
461
|
|
475
462
|
def allow_private
|
476
|
-
@stream <<
|
463
|
+
@stream << 52
|
477
464
|
@ip += 1
|
478
465
|
@current_block.add_stack(0, 0)
|
479
|
-
@instruction =
|
466
|
+
@instruction = 52
|
467
|
+
end
|
468
|
+
|
469
|
+
def send_vcall(arg1)
|
470
|
+
arg1 = find_literal(arg1)
|
471
|
+
@stream << 53 << arg1
|
472
|
+
@ip += 2
|
473
|
+
@current_block.add_stack(0, 1)
|
474
|
+
@instruction = 53
|
480
475
|
end
|
481
476
|
|
482
477
|
def send_method(arg1)
|
483
|
-
|
478
|
+
arg1 = find_literal(arg1)
|
479
|
+
@stream << 54 << arg1
|
484
480
|
@ip += 2
|
485
481
|
@current_block.add_stack(1, 1)
|
486
|
-
@instruction =
|
482
|
+
@instruction = 54
|
487
483
|
end
|
488
484
|
|
489
485
|
def send_stack(arg1, arg2)
|
490
|
-
|
486
|
+
arg1 = find_literal(arg1)
|
487
|
+
arg2 = Integer(arg2)
|
488
|
+
@stream << 55 << arg1 << arg2
|
491
489
|
@ip += 3
|
492
490
|
@current_block.add_stack(arg2+1, 1)
|
493
|
-
@instruction =
|
491
|
+
@instruction = 55
|
494
492
|
end
|
495
493
|
|
496
494
|
def send_stack_with_block(arg1, arg2)
|
497
|
-
|
495
|
+
arg1 = find_literal(arg1)
|
496
|
+
arg2 = Integer(arg2)
|
497
|
+
@stream << 56 << arg1 << arg2
|
498
498
|
@ip += 3
|
499
499
|
@current_block.add_stack(arg2+2, 1)
|
500
|
-
@instruction =
|
500
|
+
@instruction = 56
|
501
501
|
end
|
502
502
|
|
503
503
|
def send_stack_with_splat(arg1, arg2)
|
504
|
-
|
504
|
+
arg1 = find_literal(arg1)
|
505
|
+
arg2 = Integer(arg2)
|
506
|
+
@stream << 57 << arg1 << arg2
|
505
507
|
@ip += 3
|
506
508
|
@current_block.add_stack(arg2+3, 1)
|
507
|
-
@instruction =
|
509
|
+
@instruction = 57
|
508
510
|
end
|
509
511
|
|
510
512
|
def send_super_stack_with_block(arg1, arg2)
|
511
|
-
|
513
|
+
arg1 = find_literal(arg1)
|
514
|
+
arg2 = Integer(arg2)
|
515
|
+
@stream << 58 << arg1 << arg2
|
512
516
|
@ip += 3
|
513
517
|
@current_block.add_stack(arg2+1, 1)
|
514
|
-
@instruction =
|
518
|
+
@instruction = 58
|
515
519
|
end
|
516
520
|
|
517
521
|
def send_super_stack_with_splat(arg1, arg2)
|
518
|
-
|
522
|
+
arg1 = find_literal(arg1)
|
523
|
+
arg2 = Integer(arg2)
|
524
|
+
@stream << 59 << arg1 << arg2
|
519
525
|
@ip += 3
|
520
526
|
@current_block.add_stack(arg2+2, 1)
|
521
|
-
@instruction =
|
527
|
+
@instruction = 59
|
522
528
|
end
|
523
529
|
|
524
530
|
def push_block
|
525
|
-
@stream <<
|
531
|
+
@stream << 60
|
526
532
|
@ip += 1
|
527
533
|
@current_block.add_stack(0, 1)
|
528
|
-
@instruction =
|
534
|
+
@instruction = 60
|
529
535
|
end
|
530
536
|
|
531
537
|
def passed_blockarg(arg1)
|
532
|
-
|
538
|
+
arg1 = Integer(arg1)
|
539
|
+
@stream << 61 << arg1
|
533
540
|
@ip += 2
|
534
541
|
@current_block.add_stack(0, 1)
|
535
|
-
@instruction =
|
542
|
+
@instruction = 61
|
536
543
|
end
|
537
544
|
|
538
545
|
def create_block(arg1)
|
539
|
-
arg1 =
|
540
|
-
@
|
541
|
-
@stream << 63 << arg1
|
546
|
+
arg1 = add_generator(arg1)
|
547
|
+
@stream << 62 << arg1
|
542
548
|
@ip += 2
|
543
549
|
@current_block.add_stack(0, 1)
|
544
|
-
@instruction =
|
550
|
+
@instruction = 62
|
545
551
|
end
|
546
552
|
|
547
553
|
def cast_for_single_block_arg
|
548
|
-
@stream <<
|
554
|
+
@stream << 63
|
549
555
|
@ip += 1
|
550
556
|
@current_block.add_stack(0, 1)
|
551
|
-
@instruction =
|
557
|
+
@instruction = 63
|
552
558
|
end
|
553
559
|
|
554
560
|
def cast_for_multi_block_arg
|
555
|
-
@stream <<
|
561
|
+
@stream << 64
|
556
562
|
@ip += 1
|
557
563
|
@current_block.add_stack(0, 1)
|
558
|
-
@instruction =
|
564
|
+
@instruction = 64
|
559
565
|
end
|
560
566
|
|
561
567
|
def cast_for_splat_block_arg
|
562
|
-
@stream <<
|
568
|
+
@stream << 65
|
563
569
|
@ip += 1
|
564
570
|
@current_block.add_stack(0, 1)
|
565
|
-
@instruction =
|
571
|
+
@instruction = 65
|
566
572
|
end
|
567
573
|
|
568
574
|
def yield_stack(arg1)
|
569
|
-
|
575
|
+
arg1 = Integer(arg1)
|
576
|
+
@stream << 66 << arg1
|
570
577
|
@ip += 2
|
571
578
|
@current_block.add_stack(arg1, 1)
|
572
|
-
@instruction =
|
579
|
+
@instruction = 66
|
573
580
|
end
|
574
581
|
|
575
582
|
def yield_splat(arg1)
|
576
|
-
|
583
|
+
arg1 = Integer(arg1)
|
584
|
+
@stream << 67 << arg1
|
577
585
|
@ip += 2
|
578
586
|
@current_block.add_stack(arg1+1, 1)
|
579
|
-
@instruction =
|
587
|
+
@instruction = 67
|
580
588
|
end
|
581
589
|
|
582
590
|
def string_append
|
583
|
-
@stream <<
|
591
|
+
@stream << 68
|
584
592
|
@ip += 1
|
585
593
|
@current_block.add_stack(2, 1)
|
586
|
-
@instruction =
|
594
|
+
@instruction = 68
|
587
595
|
end
|
588
596
|
|
589
597
|
def string_build(arg1)
|
590
|
-
|
598
|
+
arg1 = Integer(arg1)
|
599
|
+
@stream << 69 << arg1
|
591
600
|
@ip += 2
|
592
601
|
@current_block.add_stack(arg1, 1)
|
593
|
-
@instruction =
|
602
|
+
@instruction = 69
|
594
603
|
end
|
595
604
|
|
596
605
|
def string_dup
|
597
|
-
@stream <<
|
606
|
+
@stream << 70
|
598
607
|
@ip += 1
|
599
608
|
@current_block.add_stack(1, 1)
|
600
|
-
@instruction =
|
609
|
+
@instruction = 70
|
601
610
|
end
|
602
611
|
|
603
612
|
def push_scope
|
604
|
-
@stream <<
|
613
|
+
@stream << 71
|
605
614
|
@ip += 1
|
606
615
|
@current_block.add_stack(0, 1)
|
607
|
-
@instruction =
|
616
|
+
@instruction = 71
|
608
617
|
end
|
609
618
|
|
610
619
|
def add_scope
|
611
|
-
@stream <<
|
620
|
+
@stream << 72
|
612
621
|
@ip += 1
|
613
622
|
@current_block.add_stack(1, 0)
|
614
|
-
@instruction =
|
623
|
+
@instruction = 72
|
615
624
|
end
|
616
625
|
|
617
626
|
def push_variables
|
618
|
-
@stream <<
|
627
|
+
@stream << 73
|
619
628
|
@ip += 1
|
620
629
|
@current_block.add_stack(0, 1)
|
621
|
-
@instruction =
|
630
|
+
@instruction = 73
|
622
631
|
end
|
623
632
|
|
624
633
|
def check_interrupts
|
625
|
-
@stream <<
|
634
|
+
@stream << 74
|
626
635
|
@ip += 1
|
627
636
|
@current_block.add_stack(0, 0)
|
628
|
-
@instruction =
|
637
|
+
@instruction = 74
|
629
638
|
end
|
630
639
|
|
631
640
|
def yield_debugger
|
632
|
-
@stream <<
|
641
|
+
@stream << 75
|
633
642
|
@ip += 1
|
634
643
|
@current_block.add_stack(0, 0)
|
635
|
-
@instruction =
|
636
|
-
end
|
637
|
-
|
638
|
-
def is_nil
|
639
|
-
@stream << 77
|
640
|
-
@ip += 1
|
641
|
-
@current_block.add_stack(1, 1)
|
642
|
-
@instruction = 77
|
644
|
+
@instruction = 75
|
643
645
|
end
|
644
646
|
|
645
647
|
def check_serial(arg1, arg2)
|
646
|
-
arg1 = find_literal
|
647
|
-
|
648
|
-
@stream << 78 << arg1 << arg2
|
648
|
+
arg1 = find_literal(arg1)
|
649
|
+
@stream << 76 << arg1 << arg2
|
649
650
|
@ip += 3
|
650
651
|
@current_block.add_stack(1, 1)
|
651
|
-
@instruction =
|
652
|
+
@instruction = 76
|
652
653
|
end
|
653
654
|
|
654
655
|
def check_serial_private(arg1, arg2)
|
655
|
-
arg1 = find_literal
|
656
|
-
|
657
|
-
@stream << 79 << arg1 << arg2
|
656
|
+
arg1 = find_literal(arg1)
|
657
|
+
@stream << 77 << arg1 << arg2
|
658
658
|
@ip += 3
|
659
659
|
@current_block.add_stack(1, 1)
|
660
|
-
@instruction =
|
660
|
+
@instruction = 77
|
661
661
|
end
|
662
662
|
|
663
663
|
def push_my_field(arg1)
|
664
|
-
@stream <<
|
664
|
+
@stream << 78 << arg1
|
665
665
|
@ip += 2
|
666
666
|
@current_block.add_stack(0, 1)
|
667
|
-
@instruction =
|
667
|
+
@instruction = 78
|
668
668
|
end
|
669
669
|
|
670
670
|
def store_my_field(arg1)
|
671
|
-
@stream <<
|
671
|
+
@stream << 79 << arg1
|
672
672
|
@ip += 2
|
673
673
|
@current_block.add_stack(1, 1)
|
674
|
-
@instruction =
|
674
|
+
@instruction = 79
|
675
675
|
end
|
676
676
|
|
677
677
|
def kind_of
|
678
|
-
@stream <<
|
678
|
+
@stream << 80
|
679
679
|
@ip += 1
|
680
680
|
@current_block.add_stack(2, 1)
|
681
|
-
@instruction =
|
681
|
+
@instruction = 80
|
682
682
|
end
|
683
683
|
|
684
684
|
def instance_of
|
685
|
-
@stream <<
|
685
|
+
@stream << 81
|
686
686
|
@ip += 1
|
687
687
|
@current_block.add_stack(2, 1)
|
688
|
-
@instruction =
|
689
|
-
end
|
690
|
-
|
691
|
-
def meta_push_neg_1
|
692
|
-
@stream << 84
|
693
|
-
@ip += 1
|
694
|
-
@current_block.add_stack(0, 1)
|
695
|
-
@instruction = 84
|
696
|
-
end
|
697
|
-
|
698
|
-
def meta_push_0
|
699
|
-
@stream << 85
|
700
|
-
@ip += 1
|
701
|
-
@current_block.add_stack(0, 1)
|
702
|
-
@instruction = 85
|
703
|
-
end
|
704
|
-
|
705
|
-
def meta_push_1
|
706
|
-
@stream << 86
|
707
|
-
@ip += 1
|
708
|
-
@current_block.add_stack(0, 1)
|
709
|
-
@instruction = 86
|
710
|
-
end
|
711
|
-
|
712
|
-
def meta_push_2
|
713
|
-
@stream << 87
|
714
|
-
@ip += 1
|
715
|
-
@current_block.add_stack(0, 1)
|
716
|
-
@instruction = 87
|
717
|
-
end
|
718
|
-
|
719
|
-
def meta_send_op_plus(arg1)
|
720
|
-
@stream << 88 << arg1
|
721
|
-
@ip += 2
|
722
|
-
@current_block.add_stack(2, 1)
|
723
|
-
@instruction = 88
|
724
|
-
end
|
725
|
-
|
726
|
-
def meta_send_op_minus(arg1)
|
727
|
-
@stream << 89 << arg1
|
728
|
-
@ip += 2
|
729
|
-
@current_block.add_stack(2, 1)
|
730
|
-
@instruction = 89
|
731
|
-
end
|
732
|
-
|
733
|
-
def meta_send_op_equal(arg1)
|
734
|
-
@stream << 90 << arg1
|
735
|
-
@ip += 2
|
736
|
-
@current_block.add_stack(2, 1)
|
737
|
-
@instruction = 90
|
738
|
-
end
|
739
|
-
|
740
|
-
def meta_send_op_lt(arg1)
|
741
|
-
@stream << 91 << arg1
|
742
|
-
@ip += 2
|
743
|
-
@current_block.add_stack(2, 1)
|
744
|
-
@instruction = 91
|
745
|
-
end
|
746
|
-
|
747
|
-
def meta_send_op_gt(arg1)
|
748
|
-
@stream << 92 << arg1
|
749
|
-
@ip += 2
|
750
|
-
@current_block.add_stack(2, 1)
|
751
|
-
@instruction = 92
|
752
|
-
end
|
753
|
-
|
754
|
-
def meta_send_op_tequal(arg1)
|
755
|
-
@stream << 93 << arg1
|
756
|
-
@ip += 2
|
757
|
-
@current_block.add_stack(2, 1)
|
758
|
-
@instruction = 93
|
759
|
-
end
|
760
|
-
|
761
|
-
def meta_send_call(arg1, arg2)
|
762
|
-
@stream << 94 << arg1 << arg2
|
763
|
-
@ip += 3
|
764
|
-
@current_block.add_stack(arg2+1, 1)
|
765
|
-
@instruction = 94
|
688
|
+
@instruction = 81
|
766
689
|
end
|
767
690
|
|
768
691
|
def push_my_offset(arg1)
|
769
|
-
@stream <<
|
692
|
+
@stream << 82 << arg1
|
770
693
|
@ip += 2
|
771
694
|
@current_block.add_stack(0, 1)
|
772
|
-
@instruction =
|
695
|
+
@instruction = 82
|
773
696
|
end
|
774
697
|
|
775
698
|
def zsuper(arg1)
|
776
|
-
arg1 = find_literal
|
777
|
-
@stream <<
|
699
|
+
arg1 = find_literal(arg1)
|
700
|
+
@stream << 83 << arg1
|
778
701
|
@ip += 2
|
779
702
|
@current_block.add_stack(1, 1)
|
780
|
-
@instruction =
|
703
|
+
@instruction = 83
|
781
704
|
end
|
782
705
|
|
783
706
|
def push_block_arg
|
784
|
-
@stream <<
|
707
|
+
@stream << 84
|
785
708
|
@ip += 1
|
786
709
|
@current_block.add_stack(0, 1)
|
787
|
-
@instruction =
|
710
|
+
@instruction = 84
|
788
711
|
end
|
789
712
|
|
790
713
|
def push_undef
|
791
|
-
@stream <<
|
714
|
+
@stream << 85
|
792
715
|
@ip += 1
|
793
716
|
@current_block.add_stack(0, 1)
|
794
|
-
@instruction =
|
717
|
+
@instruction = 85
|
795
718
|
end
|
796
719
|
|
797
720
|
def push_stack_local(arg1)
|
798
|
-
@stream <<
|
721
|
+
@stream << 86 << arg1
|
799
722
|
@ip += 2
|
800
723
|
@current_block.add_stack(0, 1)
|
801
|
-
@instruction =
|
724
|
+
@instruction = 86
|
802
725
|
end
|
803
726
|
|
804
727
|
def set_stack_local(arg1)
|
805
|
-
@stream <<
|
728
|
+
@stream << 87 << arg1
|
806
729
|
@ip += 2
|
807
730
|
@current_block.add_stack(1, 1)
|
808
|
-
@instruction =
|
731
|
+
@instruction = 87
|
809
732
|
end
|
810
733
|
|
811
734
|
def push_has_block
|
812
|
-
@stream <<
|
735
|
+
@stream << 88
|
813
736
|
@ip += 1
|
814
737
|
@current_block.add_stack(0, 1)
|
815
|
-
@instruction =
|
738
|
+
@instruction = 88
|
816
739
|
end
|
817
740
|
|
818
741
|
def push_proc
|
819
|
-
@stream <<
|
742
|
+
@stream << 89
|
820
743
|
@ip += 1
|
821
744
|
@current_block.add_stack(0, 1)
|
822
|
-
@instruction =
|
745
|
+
@instruction = 89
|
823
746
|
end
|
824
747
|
|
825
748
|
def check_frozen
|
826
|
-
@stream <<
|
749
|
+
@stream << 90
|
827
750
|
@ip += 1
|
828
751
|
@current_block.add_stack(1, 1)
|
829
|
-
@instruction =
|
752
|
+
@instruction = 90
|
830
753
|
end
|
831
754
|
|
832
755
|
def cast_multi_value
|
833
|
-
@stream <<
|
756
|
+
@stream << 91
|
834
757
|
@ip += 1
|
835
758
|
@current_block.add_stack(1, 1)
|
836
|
-
@instruction =
|
759
|
+
@instruction = 91
|
837
760
|
end
|
838
761
|
|
839
762
|
def invoke_primitive(arg1, arg2)
|
840
|
-
arg1 = find_literal
|
763
|
+
arg1 = find_literal(arg1)
|
841
764
|
arg2 = Integer(arg2)
|
842
|
-
@stream <<
|
765
|
+
@stream << 92 << arg1 << arg2
|
843
766
|
@ip += 3
|
844
767
|
@current_block.add_stack(arg2, 1)
|
845
|
-
@instruction =
|
768
|
+
@instruction = 92
|
846
769
|
end
|
847
770
|
|
848
771
|
def push_rubinius
|
849
|
-
@stream <<
|
772
|
+
@stream << 93
|
850
773
|
@ip += 1
|
851
774
|
@current_block.add_stack(0, 1)
|
852
|
-
@instruction =
|
853
|
-
end
|
854
|
-
|
855
|
-
def call_custom(arg1, arg2)
|
856
|
-
arg1 = find_literal arg1
|
857
|
-
arg2 = Integer(arg2)
|
858
|
-
@stream << 107 << arg1 << arg2
|
859
|
-
@ip += 3
|
860
|
-
@current_block.add_stack(arg2+1, 1)
|
861
|
-
@instruction = 107
|
775
|
+
@instruction = 93
|
862
776
|
end
|
863
777
|
|
864
|
-
def
|
865
|
-
|
778
|
+
def object_to_s(arg1)
|
779
|
+
arg1 = find_literal(arg1)
|
780
|
+
@stream << 94 << arg1
|
866
781
|
@ip += 2
|
867
782
|
@current_block.add_stack(1, 1)
|
868
|
-
@instruction =
|
783
|
+
@instruction = 94
|
869
784
|
end
|
870
785
|
|
871
786
|
def push_type
|
872
|
-
@stream <<
|
787
|
+
@stream << 95
|
873
788
|
@ip += 1
|
874
789
|
@current_block.add_stack(0, 1)
|
875
|
-
@instruction =
|
790
|
+
@instruction = 95
|
876
791
|
end
|
877
792
|
|
878
793
|
def push_mirror
|
879
|
-
@stream <<
|
794
|
+
@stream << 96
|
880
795
|
@ip += 1
|
881
796
|
@current_block.add_stack(0, 1)
|
882
|
-
@instruction =
|
797
|
+
@instruction = 96
|
883
798
|
end
|
884
799
|
|
885
800
|
end
|
@@ -12,7 +12,7 @@ module Rubinius
|
|
12
12
|
opcode 5, :push_self, :stack => [0, 1], :args => [], :control_flow => :next
|
13
13
|
|
14
14
|
# Manipulate literals
|
15
|
-
opcode 6, :
|
15
|
+
opcode 6, :push_memo, :stack => [1, 1], :args => [:literal], :control_flow => :next
|
16
16
|
opcode 7, :push_literal, :stack => [0, 1], :args => [:literal], :control_flow => :next
|
17
17
|
|
18
18
|
# Flow control
|
@@ -28,8 +28,8 @@ module Rubinius
|
|
28
28
|
opcode 17, :ret, :stack => [1, 1], :args => [], :control_flow => :return
|
29
29
|
|
30
30
|
# Stack manipulations
|
31
|
-
opcode 18, :
|
32
|
-
opcode 19, :
|
31
|
+
opcode 18, :swap, :stack => [2, 2], :args => [], :control_flow => :next
|
32
|
+
opcode 19, :dup, :stack => [1, 2], :args => [], :control_flow => :next
|
33
33
|
opcode 20, :dup_many, :stack => [[0,1], [0, 1, 2]],:args => [:count], :control_flow => :next
|
34
34
|
opcode 21, :pop, :stack => [1, 0], :args => [], :control_flow => :next
|
35
35
|
opcode 22, :pop_many, :stack => [[0,1], 0], :args => [:count], :control_flow => :next
|
@@ -66,91 +66,73 @@ module Rubinius
|
|
66
66
|
opcode 45, :push_ivar, :stack => [0, 1], :args => [:literal], :control_flow => :next
|
67
67
|
|
68
68
|
# Manipulate constants
|
69
|
-
opcode 46, :
|
70
|
-
opcode 47, :
|
71
|
-
opcode 48, :
|
72
|
-
opcode 49, :
|
73
|
-
opcode 50, :
|
74
|
-
opcode 51, :push_const_fast, :stack => [0, 1], :args => [:literal], :control_flow => :next
|
75
|
-
opcode 52, :find_const_fast, :stack => [1, 1], :args => [:literal], :control_flow => :next
|
69
|
+
opcode 46, :set_const, :stack => [1, 1], :args => [:literal], :control_flow => :next
|
70
|
+
opcode 47, :set_const_at, :stack => [2, 1], :args => [:literal], :control_flow => :next
|
71
|
+
opcode 48, :push_cpath_top, :stack => [0, 1], :args => [], :control_flow => :next
|
72
|
+
opcode 49, :push_const, :stack => [0, 1], :args => [:literal], :control_flow => :next
|
73
|
+
opcode 50, :find_const, :stack => [1, 1], :args => [:literal], :control_flow => :next
|
76
74
|
|
77
75
|
# Send messages
|
78
|
-
opcode
|
79
|
-
opcode
|
80
|
-
opcode
|
81
|
-
opcode
|
82
|
-
opcode
|
76
|
+
opcode 51, :set_call_flags, :stack => [0, 0], :args => [:flags], :control_flow => :next
|
77
|
+
opcode 52, :allow_private, :stack => [0, 0], :args => [], :control_flow => :next
|
78
|
+
opcode 53, :send_vcall, :stack => [0, 1], :args => [:literal], :control_flow => :send
|
79
|
+
opcode 54, :send_method, :stack => [1, 1], :args => [:literal], :control_flow => :send
|
80
|
+
opcode 55, :send_stack, :stack => [[1,2], 1], :args => [:literal, :count], :control_flow => :send
|
81
|
+
opcode 56, :send_stack_with_block, :stack => [[2,2], 1], :args => [:literal, :count], :control_flow => :send
|
83
82
|
|
84
83
|
CALL_FLAG_CONCAT = 2
|
85
84
|
|
86
|
-
opcode
|
87
|
-
opcode
|
88
|
-
opcode
|
85
|
+
opcode 57, :send_stack_with_splat, :stack => [[3,2], 1], :args => [:literal, :count], :control_flow => :send
|
86
|
+
opcode 58, :send_super_stack_with_block, :stack => [[1,2], 1], :args => [:literal, :count], :control_flow => :send
|
87
|
+
opcode 59, :send_super_stack_with_splat, :stack => [[2,2], 1], :args => [:literal, :count], :control_flow => :send
|
89
88
|
|
90
89
|
# Manipulate blocks
|
91
|
-
opcode
|
92
|
-
opcode
|
93
|
-
opcode
|
94
|
-
opcode
|
95
|
-
opcode
|
96
|
-
opcode
|
97
|
-
opcode
|
98
|
-
opcode
|
90
|
+
opcode 60, :push_block, :stack => [0, 1], :args => [], :control_flow => :next
|
91
|
+
opcode 61, :passed_blockarg, :stack => [0, 1], :args => [:count], :control_flow => :next
|
92
|
+
opcode 62, :create_block, :stack => [0, 1], :args => [:literal], :control_flow => :next
|
93
|
+
opcode 63, :cast_for_single_block_arg, :stack => [0, 1], :args => [], :control_flow => :next
|
94
|
+
opcode 64, :cast_for_multi_block_arg, :stack => [0, 1], :args => [], :control_flow => :next
|
95
|
+
opcode 65, :cast_for_splat_block_arg, :stack => [0, 1], :args => [], :control_flow => :next
|
96
|
+
opcode 66, :yield_stack, :stack => [[0,1], 1], :args => [:count], :control_flow => :yield
|
97
|
+
opcode 67, :yield_splat, :stack => [[1,1], 1], :args => [:count], :control_flow => :yield
|
99
98
|
|
100
99
|
# Manipulate strings
|
101
|
-
opcode
|
102
|
-
opcode
|
103
|
-
opcode
|
100
|
+
opcode 68, :string_append, :stack => [2, 1], :args => [], :control_flow => :next
|
101
|
+
opcode 69, :string_build, :stack => [[0,1], 1], :args => [:count], :control_flow => :next
|
102
|
+
opcode 70, :string_dup, :stack => [1, 1], :args => [], :control_flow => :next
|
104
103
|
|
105
104
|
# Manipulate scope
|
106
|
-
opcode
|
107
|
-
opcode
|
108
|
-
opcode
|
105
|
+
opcode 71, :push_scope, :stack => [0, 1], :args => [], :control_flow => :next
|
106
|
+
opcode 72, :add_scope, :stack => [1, 0], :args => [], :control_flow => :next
|
107
|
+
opcode 73, :push_variables, :stack => [0, 1], :args => [], :control_flow => :next
|
109
108
|
|
110
109
|
# Miscellaneous. TODO: better categorize these
|
111
|
-
opcode
|
112
|
-
opcode
|
113
|
-
opcode
|
114
|
-
opcode
|
115
|
-
opcode 79, :check_serial_private, :stack => [1, 1], :args => [:literal, :serial], :control_flow => :next
|
110
|
+
opcode 74, :check_interrupts, :stack => [0, 0], :args => [], :control_flow => :next
|
111
|
+
opcode 75, :yield_debugger, :stack => [0, 0], :args => [], :control_flow => :next
|
112
|
+
opcode 76, :check_serial, :stack => [1, 1], :args => [:literal, :serial], :control_flow => :next
|
113
|
+
opcode 77, :check_serial_private, :stack => [1, 1], :args => [:literal, :serial], :control_flow => :next
|
116
114
|
|
117
115
|
# Access object fields
|
118
|
-
opcode
|
119
|
-
opcode
|
116
|
+
opcode 78, :push_my_field, :stack => [0, 1], :args => [:index], :control_flow => :next
|
117
|
+
opcode 79, :store_my_field, :stack => [1, 1], :args => [:index], :control_flow => :next
|
120
118
|
|
121
119
|
# Type checks
|
122
|
-
opcode
|
123
|
-
opcode
|
124
|
-
|
125
|
-
|
126
|
-
opcode 84, :
|
127
|
-
opcode 85, :
|
128
|
-
opcode 86, :
|
129
|
-
opcode 87, :
|
130
|
-
opcode 88, :
|
131
|
-
opcode 89, :
|
132
|
-
opcode 90, :
|
133
|
-
opcode 91, :
|
134
|
-
opcode 92, :
|
135
|
-
opcode 93, :
|
136
|
-
opcode 94, :
|
137
|
-
|
138
|
-
|
139
|
-
opcode 95, :push_my_offset, :stack => [0, 1], :args => [:index], :control_flow => :next
|
140
|
-
opcode 96, :zsuper, :stack => [1, 1], :args => [:literal], :control_flow => :next
|
141
|
-
opcode 97, :push_block_arg, :stack => [0, 1], :args => [], :control_flow => :next
|
142
|
-
opcode 98, :push_undef, :stack => [0, 1], :args => [], :control_flow => :next
|
143
|
-
opcode 99, :push_stack_local, :stack => [0, 1], :args => [:which], :control_flow => :next
|
144
|
-
opcode 100, :set_stack_local, :stack => [1, 1], :args => [:which], :control_flow => :next
|
145
|
-
opcode 101, :push_has_block, :stack => [0, 1], :args => [], :control_flow => :next
|
146
|
-
opcode 102, :push_proc, :stack => [0, 1], :args => [], :control_flow => :next
|
147
|
-
opcode 103, :check_frozen, :stack => [1, 1], :args => [], :control_flow => :next
|
148
|
-
opcode 104, :cast_multi_value, :stack => [1, 1], :args => [], :control_flow => :next
|
149
|
-
opcode 105, :invoke_primitive, :stack => [[0,2], 1], :args => [:literal, :count], :control_flow => :next
|
150
|
-
opcode 106, :push_rubinius, :stack => [0, 1], :args => [], :control_flow => :next
|
151
|
-
opcode 107, :call_custom, :stack => [[1,2], 1], :args => [:literal, :count], :control_flow => :send
|
152
|
-
opcode 108, :meta_to_s, :stack => [1, 1], :args => [:literal], :control_flow => :send
|
153
|
-
opcode 109, :push_type, :stack => [0, 1], :args => [], :control_flow => :next
|
154
|
-
opcode 110, :push_mirror, :stack => [0, 1], :args => [], :control_flow => :next
|
120
|
+
opcode 80, :kind_of, :stack => [2, 1], :args => [], :control_flow => :next
|
121
|
+
opcode 81, :instance_of, :stack => [2, 1], :args => [], :control_flow => :next
|
122
|
+
opcode 82, :push_my_offset, :stack => [0, 1], :args => [:index], :control_flow => :next
|
123
|
+
opcode 83, :zsuper, :stack => [1, 1], :args => [:literal], :control_flow => :next
|
124
|
+
opcode 84, :push_block_arg, :stack => [0, 1], :args => [], :control_flow => :next
|
125
|
+
opcode 85, :push_undef, :stack => [0, 1], :args => [], :control_flow => :next
|
126
|
+
opcode 86, :push_stack_local, :stack => [0, 1], :args => [:which], :control_flow => :next
|
127
|
+
opcode 87, :set_stack_local, :stack => [1, 1], :args => [:which], :control_flow => :next
|
128
|
+
opcode 88, :push_has_block, :stack => [0, 1], :args => [], :control_flow => :next
|
129
|
+
opcode 89, :push_proc, :stack => [0, 1], :args => [], :control_flow => :next
|
130
|
+
opcode 90, :check_frozen, :stack => [1, 1], :args => [], :control_flow => :next
|
131
|
+
opcode 91, :cast_multi_value, :stack => [1, 1], :args => [], :control_flow => :next
|
132
|
+
opcode 92, :invoke_primitive, :stack => [[0,2], 1], :args => [:literal, :count], :control_flow => :next
|
133
|
+
opcode 93, :push_rubinius, :stack => [0, 1], :args => [], :control_flow => :next
|
134
|
+
opcode 94, :object_to_s, :stack => [1, 1], :args => [:literal], :control_flow => :send
|
135
|
+
opcode 95, :push_type, :stack => [0, 1], :args => [], :control_flow => :next
|
136
|
+
opcode 96, :push_mirror, :stack => [0, 1], :args => [], :control_flow => :next
|
155
137
|
end
|
156
138
|
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubinius-compiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '3.
|
4
|
+
version: '3.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Shirai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
18
|
version: '1.3'
|
19
19
|
name: bundler
|
20
|
-
|
21
|
-
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
25
|
version: '1.3'
|
26
|
-
|
26
|
+
type: :development
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '10.0'
|
33
33
|
name: rake
|
34
|
-
|
35
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '10.0'
|
40
|
-
|
40
|
+
type: :development
|
41
41
|
description: A Bytecode compiler for the Rubinius language platform.
|
42
42
|
email:
|
43
43
|
- brixen@gmail.com
|
@@ -77,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
77
|
version: '0'
|
78
78
|
requirements: []
|
79
79
|
rubyforge_project:
|
80
|
-
rubygems_version: 2.
|
80
|
+
rubygems_version: 2.6.2
|
81
81
|
signing_key:
|
82
82
|
specification_version: 4
|
83
83
|
summary: A Bytecode compiler for the Rubinius language platform.
|