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.
3200
3201
3202
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3200
def initialize(calldata)
@calldata = calldata
end
|
Instance Attribute Details
#calldata ⇒ Object
Returns the value of attribute calldata.
3198
3199
3200
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3198
def calldata
@calldata
end
|
Instance Method Details
#==(other) ⇒ Object
3216
3217
3218
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3216
def ==(other)
other.is_a?(OptEq) && other.calldata == calldata
end
|
#call(vm) ⇒ Object
3236
3237
3238
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3236
def call(vm)
canonical.call(vm)
end
|
#canonical ⇒ Object
3232
3233
3234
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3232
def canonical
Send.new(calldata, nil)
end
|
#deconstruct_keys(_keys) ⇒ Object
3212
3213
3214
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3212
def deconstruct_keys(_keys)
{ calldata: calldata }
end
|
#disasm(fmt) ⇒ Object
3204
3205
3206
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3204
def disasm(fmt)
fmt.instruction("opt_eq", [fmt.calldata(calldata)])
end
|
#length ⇒ Object
3220
3221
3222
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3220
def length
2
end
|
#pops ⇒ Object
3224
3225
3226
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3224
def pops
2
end
|
#pushes ⇒ Object
3228
3229
3230
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3228
def pushes
1
end
|
#to_a(_iseq) ⇒ Object
3208
3209
3210
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 3208
def to_a(_iseq)
[:opt_eq, calldata.to_h]
end
|