Class: SyntaxTree::YARV::InvokeBlock
Overview
### Summary
invokeblock invokes the block given to the current method. It pops the arguments for the block off the stack and pushes the result of running the block onto the stack.
### Usage
~~~ruby def foo
yield
end ~~~
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Instruction
#branch_targets, #canonical, #falls_through?, #leaves?, #side_effects?
Constructor Details
#initialize(calldata) ⇒ InvokeBlock
2089
2090
2091
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2089
def initialize(calldata)
@calldata = calldata
end
|
Instance Attribute Details
#calldata ⇒ Object
Returns the value of attribute calldata.
2087
2088
2089
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2087
def calldata
@calldata
end
|
Instance Method Details
#==(other) ⇒ Object
2105
2106
2107
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2105
def ==(other)
other.is_a?(InvokeBlock) && other.calldata == calldata
end
|
#call(vm) ⇒ Object
2121
2122
2123
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2121
def call(vm)
vm.push(vm.frame_yield.block.call(*vm.pop(calldata.argc)))
end
|
#deconstruct_keys(_keys) ⇒ Object
2101
2102
2103
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2101
def deconstruct_keys(_keys)
{ calldata: calldata }
end
|
#disasm(fmt) ⇒ Object
2093
2094
2095
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2093
def disasm(fmt)
fmt.instruction("invokeblock", [fmt.calldata(calldata)])
end
|
#length ⇒ Object
2109
2110
2111
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2109
def length
2
end
|
#pops ⇒ Object
2113
2114
2115
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2113
def pops
calldata.argc
end
|
#pushes ⇒ Object
2117
2118
2119
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2117
def pushes
1
end
|
#to_a(_iseq) ⇒ Object
2097
2098
2099
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 2097
def to_a(_iseq)
[:invokeblock, calldata.to_h]
end
|