Class: SyntaxTree::YARV::OptEq
Overview
### Summary
opt_eq is a specialization of the opt_send_without_block instruction that occurs when the == operator is used. Fast paths exist when both operands are integers, floats, symbols or strings. It pops both the receiver and the argument off the stack and pushes on the result.
### Usage
~~~ruby 2 == 2 ~~~
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Instruction
#branch_targets, #falls_through?, #leaves?, #side_effects?
Constructor Details
#initialize(calldata) ⇒ OptEq
Returns a new instance of OptEq.
3089
3090
3091
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3089
def initialize(calldata)
@calldata = calldata
end
|
Instance Attribute Details
#calldata ⇒ Object
Returns the value of attribute calldata.
3087
3088
3089
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3087
def calldata
@calldata
end
|
Instance Method Details
#==(other) ⇒ Object
3105
3106
3107
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3105
def ==(other)
other.is_a?(OptEq) && other.calldata == calldata
end
|
#call(vm) ⇒ Object
3125
3126
3127
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3125
def call(vm)
canonical.call(vm)
end
|
#canonical ⇒ Object
3121
3122
3123
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3121
def canonical
Send.new(calldata, nil)
end
|
#deconstruct_keys(_keys) ⇒ Object
3101
3102
3103
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3101
def deconstruct_keys(_keys)
{ calldata: calldata }
end
|
#disasm(fmt) ⇒ Object
3093
3094
3095
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3093
def disasm(fmt)
fmt.instruction("opt_eq", [fmt.calldata(calldata)])
end
|
#length ⇒ Object
3109
3110
3111
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3109
def length
2
end
|
#pops ⇒ Object
3113
3114
3115
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3113
def pops
2
end
|
#pushes ⇒ Object
3117
3118
3119
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3117
def pushes
1
end
|
#to_a(_iseq) ⇒ Object
3097
3098
3099
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3097
def to_a(_iseq)
[:opt_eq, calldata.to_h]
end
|