Class: SyntaxTree::YARV::Legacy::OptGetInlineCache

Inherits:
Object
  • Object
show all
Defined in:
lib/syntax_tree/yarv/legacy.rb

Overview

### Summary

opt_getinlinecache is a wrapper around a series of putobject and getconstant instructions that allows skipping past them if the inline cache is currently set. It pushes the value of the cache onto the stack if it is set, otherwise it pushes nil.

This instruction is no longer used since in Ruby 3.2 it was replaced by the consolidated opt_getconstant_path instruction.

### Usage

~~~ruby Constant ~~~

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(label, cache) ⇒ OptGetInlineCache



85
86
87
88
# File 'lib/syntax_tree/yarv/legacy.rb', line 85

def initialize(label, cache)
  @label = label
  @cache = cache
end

Instance Attribute Details

#cacheObject (readonly)

Returns the value of attribute cache.



83
84
85
# File 'lib/syntax_tree/yarv/legacy.rb', line 83

def cache
  @cache
end

#labelObject (readonly)

Returns the value of attribute label.



83
84
85
# File 'lib/syntax_tree/yarv/legacy.rb', line 83

def label
  @label
end

Instance Method Details

#==(other) ⇒ Object



105
106
107
108
# File 'lib/syntax_tree/yarv/legacy.rb', line 105

def ==(other)
  other.is_a?(OptGetInlineCache) && other.label == label &&
    other.cache == cache
end

#call(vm) ⇒ Object



126
127
128
# File 'lib/syntax_tree/yarv/legacy.rb', line 126

def call(vm)
  vm.push(nil)
end

#canonicalObject



122
123
124
# File 'lib/syntax_tree/yarv/legacy.rb', line 122

def canonical
  self
end

#deconstruct_keys(_keys) ⇒ Object



101
102
103
# File 'lib/syntax_tree/yarv/legacy.rb', line 101

def deconstruct_keys(_keys)
  { label: label, cache: cache }
end

#disasm(fmt) ⇒ Object



90
91
92
93
94
95
# File 'lib/syntax_tree/yarv/legacy.rb', line 90

def disasm(fmt)
  fmt.instruction(
    "opt_getinlinecache",
    [fmt.label(label), fmt.inline_storage(cache)]
  )
end

#lengthObject



110
111
112
# File 'lib/syntax_tree/yarv/legacy.rb', line 110

def length
  3
end

#popsObject



114
115
116
# File 'lib/syntax_tree/yarv/legacy.rb', line 114

def pops
  0
end

#pushesObject



118
119
120
# File 'lib/syntax_tree/yarv/legacy.rb', line 118

def pushes
  1
end

#to_a(_iseq) ⇒ Object



97
98
99
# File 'lib/syntax_tree/yarv/legacy.rb', line 97

def to_a(_iseq)
  [:opt_getinlinecache, label.name, cache]
end