Class: SyntaxTree::YARV::DefineMethod
- Inherits:
-
Object
- Object
- 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
- #canonical ⇒ Object
- #deconstruct_keys(_keys) ⇒ Object
- #disasm(fmt) ⇒ Object
-
#initialize(method_name, method_iseq) ⇒ DefineMethod
constructor
A new instance of DefineMethod.
- #length ⇒ Object
- #pops ⇒ Object
- #pushes ⇒ Object
- #to_a(_iseq) ⇒ Object
Constructor Details
#initialize(method_name, method_iseq) ⇒ DefineMethod
Returns a new instance of DefineMethod.
1075 1076 1077 1078 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1075 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.
1073 1074 1075 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1073 def method_iseq @method_iseq end |
#method_name ⇒ Object (readonly)
Returns the value of attribute method_name.
1073 1074 1075 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1073 def method_name @method_name end |
Instance Method Details
#==(other) ⇒ Object
1096 1097 1098 1099 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1096 def ==(other) other.is_a?(DefineMethod) && other.method_name == method_name && other.method_iseq == method_iseq end |
#call(vm) ⇒ Object
1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1117 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 |
#canonical ⇒ Object
1113 1114 1115 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1113 def canonical self end |
#deconstruct_keys(_keys) ⇒ Object
1092 1093 1094 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1092 def deconstruct_keys(_keys) { method_name: method_name, method_iseq: method_iseq } end |
#disasm(fmt) ⇒ Object
1080 1081 1082 1083 1084 1085 1086 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1080 def disasm(fmt) fmt.enqueue(method_iseq) fmt.instruction( "definemethod", [fmt.object(method_name), method_iseq.name] ) end |
#length ⇒ Object
1101 1102 1103 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1101 def length 3 end |
#pops ⇒ Object
1105 1106 1107 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1105 def pops 0 end |
#pushes ⇒ Object
1109 1110 1111 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1109 def pushes 0 end |
#to_a(_iseq) ⇒ Object
1088 1089 1090 |
# File 'lib/syntax_tree/yarv/instructions.rb', line 1088 def to_a(_iseq) [:definemethod, method_name, method_iseq.to_a] end |