Class: SyntaxTree::YARV::Legacy::SetClassVariable
- Inherits:
-
Instruction
- Object
- Instruction
- SyntaxTree::YARV::Legacy::SetClassVariable
- Defined in:
- lib/syntax_tree/yarv/legacy.rb
Overview
### Summary
setclassvariable looks for a class variable in the current class and sets its value to the value it pops off the top of the stack.
This version of the setclassvariable instruction is no longer used since in Ruby 3.0 it gained an inline cache.
### Usage
~~~ruby @@class_variable = 1 ~~~
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #call(vm) ⇒ Object
- #canonical ⇒ Object
- #deconstruct_keys(_keys) ⇒ Object
- #disasm(fmt) ⇒ Object
-
#initialize(name) ⇒ SetClassVariable
constructor
A new instance of SetClassVariable.
- #length ⇒ Object
- #pops ⇒ Object
- #to_a(_iseq) ⇒ Object
Methods inherited from Instruction
#branch_targets, #falls_through?, #leaves?, #pushes, #side_effects?
Constructor Details
#initialize(name) ⇒ SetClassVariable
Returns a new instance of SetClassVariable.
198 199 200 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 198 def initialize(name) @name = name end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
196 197 198 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 196 def name @name end |
Instance Method Details
#==(other) ⇒ Object
214 215 216 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 214 def ==(other) other.is_a?(SetClassVariable) && other.name == name end |
#call(vm) ⇒ Object
230 231 232 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 230 def call(vm) canonical.call(vm) end |
#canonical ⇒ Object
226 227 228 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 226 def canonical YARV::SetClassVariable.new(name, nil) end |
#deconstruct_keys(_keys) ⇒ Object
210 211 212 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 210 def deconstruct_keys(_keys) { name: name } end |
#disasm(fmt) ⇒ Object
202 203 204 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 202 def disasm(fmt) fmt.instruction("setclassvariable", [fmt.object(name)]) end |
#length ⇒ Object
218 219 220 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 218 def length 2 end |
#pops ⇒ Object
222 223 224 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 222 def pops 1 end |
#to_a(_iseq) ⇒ Object
206 207 208 |
# File 'lib/syntax_tree/yarv/legacy.rb', line 206 def to_a(_iseq) [:setclassvariable, name] end |