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

Inherits:
Instruction
  • 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

Methods inherited from Instruction

#canonical, #leaves?, #pops, #side_effects?

Constructor Details

#initialize(label, cache) ⇒ OptGetInlineCache

Returns a new instance of OptGetInlineCache.



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

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

Instance Attribute Details

#cacheObject (readonly)

Returns the value of attribute cache.



79
80
81
# File 'lib/syntax_tree/yarv/legacy.rb', line 79

def cache
  @cache
end

#labelObject (readonly)

Returns the value of attribute label.



79
80
81
# File 'lib/syntax_tree/yarv/legacy.rb', line 79

def label
  @label
end

Instance Method Details

#==(other) ⇒ Object



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

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

#branch_targetsObject



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

def branch_targets
  [label]
end

#call(vm) ⇒ Object



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

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

#deconstruct_keys(_keys) ⇒ Object



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

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

#disasm(fmt) ⇒ Object



86
87
88
89
90
91
# File 'lib/syntax_tree/yarv/legacy.rb', line 86

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

#falls_through?Boolean

Returns:

  • (Boolean)


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

def falls_through?
  true
end

#lengthObject



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

def length
  3
end

#pushesObject



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

def pushes
  1
end

#to_a(_iseq) ⇒ Object



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

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