Class: SyntaxTree::YARV::DefineMethod
Overview
Summary
definemethod defines a method on the class of the current value of
self. It accepts two arguments. The first is the name of the method
being defined. The second is the instruction sequence representing the
body of the method.
Usage
def value = "value"
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Instruction
#branch_targets, #canonical, #falls_through?, #leaves?, #pops, #pushes, #side_effects?
Constructor Details
#initialize(method_name, method_iseq) ⇒ DefineMethod
Returns a new instance of DefineMethod.
1124
1125
1126
1127
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1124
def initialize(method_name, method_iseq)
@method_name = method_name
@method_iseq = method_iseq
end
|
Instance Attribute Details
#method_iseq ⇒ Object
Returns the value of attribute method_iseq.
1122
1123
1124
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1122
def method_iseq
@method_iseq
end
|
#method_name ⇒ Object
Returns the value of attribute method_name.
1122
1123
1124
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1122
def method_name
@method_name
end
|
Instance Method Details
#==(other) ⇒ Object
1145
1146
1147
1148
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1145
def ==(other)
other.is_a?(DefineMethod) && other.method_name == method_name &&
other.method_iseq == method_iseq
end
|
#call(vm) ⇒ Object
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1154
def call(vm)
name = method_name
nesting = vm.frame.nesting
iseq = method_iseq
vm
.frame
._self
.__send__(:define_method, name) do |*args, **kwargs, &block|
vm.run_method_frame(
name,
nesting,
iseq,
self,
*args,
**kwargs,
&block
)
end
end
|
#deconstruct_keys(_keys) ⇒ Object
1141
1142
1143
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1141
def deconstruct_keys(_keys)
{ method_name: method_name, method_iseq: method_iseq }
end
|
#disasm(fmt) ⇒ Object
1129
1130
1131
1132
1133
1134
1135
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1129
def disasm(fmt)
fmt.enqueue(method_iseq)
fmt.instruction(
"definemethod",
[fmt.object(method_name), method_iseq.name]
)
end
|
#length ⇒ Object
1150
1151
1152
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1150
def length
3
end
|
#to_a(_iseq) ⇒ Object
1137
1138
1139
|
# File 'lib/syntax_tree/yarv/instructions.rb', line 1137
def to_a(_iseq)
[:definemethod, method_name, method_iseq.to_a]
end
|