Class: SyntaxTree::YARV::DefineMethod
- Inherits:
-
Instruction
- Object
- Instruction
- SyntaxTree::YARV::DefineMethod
- Defined in:
- lib/syntax_tree/yarv/instructions.rb
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
~~~ruby def value = “value” ~~~
Instance Attribute Summary collapse
-
#method_iseq ⇒ Object
readonly
Returns the value of attribute method_iseq.
-
#method_name ⇒ Object
readonly
Returns the value of attribute method_name.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #call(vm) ⇒ Object
- #deconstruct_keys(_keys) ⇒ Object
- #disasm(fmt) ⇒ Object
-
#initialize(method_name, method_iseq) ⇒ DefineMethod
constructor
A new instance of DefineMethod.
- #length ⇒ Object
- #to_a(_iseq) ⇒ Object
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.
1071 1072 1073 1074 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1071 def initialize(method_name, method_iseq) @method_name = method_name @method_iseq = method_iseq end |
Instance Attribute Details
#method_iseq ⇒ Object (readonly)
Returns the value of attribute method_iseq.
1069 1070 1071 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1069 def method_iseq @method_iseq end |
#method_name ⇒ Object (readonly)
Returns the value of attribute method_name.
1069 1070 1071 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1069 def method_name @method_name end |
Instance Method Details
#==(other) ⇒ Object
1092 1093 1094 1095 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1092 def ==(other) other.is_a?(DefineMethod) && other.method_name == method_name && other.method_iseq == method_iseq end |
#call(vm) ⇒ Object
1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1101 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
1088 1089 1090 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1088 def deconstruct_keys(_keys) { method_name: method_name, method_iseq: method_iseq } end |
#disasm(fmt) ⇒ Object
1076 1077 1078 1079 1080 1081 1082 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1076 def disasm(fmt) fmt.enqueue(method_iseq) fmt.instruction( "definemethod", [fmt.object(method_name), method_iseq.name] ) end |
#length ⇒ Object
1097 1098 1099 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1097 def length 3 end |
#to_a(_iseq) ⇒ Object
1084 1085 1086 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1084 def to_a(_iseq) [:definemethod, method_name, method_iseq.to_a] end |