Class: SyntaxTree::YARV::OptNewArraySend
Overview
Summary
opt_newarray_send is a specialization that occurs when a dynamic array
literal is created and immediately sent the min, max, or hash
methods. It pops the values of the array off the stack and pushes on the
result of the method call.
Usage
[a, b, c].max
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Instruction
#branch_targets, #canonical, #falls_through?, #leaves?, #side_effects?
Constructor Details
Returns a new instance of OptNewArraySend.
3888
3889
3890
3891
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3888
def initialize(number, method)
@number = number
@method = method
end
|
Instance Attribute Details
#method ⇒ Object
Returns the value of attribute method.
3886
3887
3888
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3886
def method
@method
end
|
#number ⇒ Object
Returns the value of attribute number.
3886
3887
3888
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3886
def number
@number
end
|
Instance Method Details
#==(other) ⇒ Object
3908
3909
3910
3911
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3908
def ==(other)
other.is_a?(OptNewArraySend) && other.number == number &&
other.method == method
end
|
#call(vm) ⇒ Object
3925
3926
3927
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3925
def call(vm)
vm.push(vm.pop(number).__send__(method))
end
|
#deconstruct_keys(_keys) ⇒ Object
3904
3905
3906
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3904
def deconstruct_keys(_keys)
{ number: number, method: method }
end
|
#disasm(fmt) ⇒ Object
3893
3894
3895
3896
3897
3898
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3893
def disasm(fmt)
fmt.instruction(
"opt_newarray_send",
[fmt.object(number), fmt.object(method)]
)
end
|
#length ⇒ Object
3913
3914
3915
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3913
def length
3
end
|
#pops ⇒ Object
3917
3918
3919
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3917
def pops
number
end
|
#pushes ⇒ Object
3921
3922
3923
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3921
def pushes
1
end
|
#to_a(_iseq) ⇒ Object
3900
3901
3902
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3900
def to_a(_iseq)
[:opt_newarray_send, number, method]
end
|