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.
3147
3148
3149
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3147
def initialize(calldata)
@calldata = calldata
end
|
Instance Attribute Details
#calldata ⇒ Object
Returns the value of attribute calldata.
3145
3146
3147
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3145
def calldata
@calldata
end
|
Instance Method Details
#==(other) ⇒ Object
3163
3164
3165
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3163
def ==(other)
other.is_a?(OptEq) && other.calldata == calldata
end
|
#call(vm) ⇒ Object
3183
3184
3185
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3183
def call(vm)
canonical.call(vm)
end
|
#canonical ⇒ Object
3179
3180
3181
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3179
def canonical
Send.new(calldata, nil)
end
|
#deconstruct_keys(_keys) ⇒ Object
3159
3160
3161
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3159
def deconstruct_keys(_keys)
{ calldata: calldata }
end
|
#disasm(fmt) ⇒ Object
3151
3152
3153
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3151
def disasm(fmt)
fmt.instruction("opt_eq", [fmt.calldata(calldata)])
end
|
#length ⇒ Object
3167
3168
3169
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3167
def length
2
end
|
#pops ⇒ Object
3171
3172
3173
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3171
def pops
2
end
|
#pushes ⇒ Object
3175
3176
3177
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3175
def pushes
1
end
|
#to_a(_iseq) ⇒ Object
3155
3156
3157
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3155
def to_a(_iseq)
[:opt_eq, calldata.to_h]
end
|