Class: SyntaxTree::YARV::OptNewArraySend

Inherits:
Instruction show all
Defined in:
lib/syntax_tree/yarv/instructions.rb

Overview

### Summary

opt_newarray_send is a specialization that occurs when a dynamic array literal is created and immediately sent the min, max, or hash methods. It pops the values of the array off the stack and pushes on the result of the method call.

### Usage

~~~ruby [a, b, c].max ~~~

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Instruction

#branch_targets, #canonical, #falls_through?, #leaves?, #side_effects?

Constructor Details

#initialize(number, method) ⇒ OptNewArraySend

Returns a new instance of OptNewArraySend.



3835
3836
3837
3838
# File 'lib/syntax_tree/yarv/instructions.rb', line 3835

def initialize(number, method)
  @number = number
  @method = method
end

Instance Attribute Details

#methodObject (readonly)

Returns the value of attribute method.



3833
3834
3835
# File 'lib/syntax_tree/yarv/instructions.rb', line 3833

def method
  @method
end

#numberObject (readonly)

Returns the value of attribute number.



3833
3834
3835
# File 'lib/syntax_tree/yarv/instructions.rb', line 3833

def number
  @number
end

Instance Method Details

#==(other) ⇒ Object



3855
3856
3857
3858
# File 'lib/syntax_tree/yarv/instructions.rb', line 3855

def ==(other)
  other.is_a?(OptNewArraySend) && other.number == number &&
    other.method == method
end

#call(vm) ⇒ Object



3872
3873
3874
# File 'lib/syntax_tree/yarv/instructions.rb', line 3872

def call(vm)
  vm.push(vm.pop(number).__send__(method))
end

#deconstruct_keys(_keys) ⇒ Object



3851
3852
3853
# File 'lib/syntax_tree/yarv/instructions.rb', line 3851

def deconstruct_keys(_keys)
  { number: number, method: method }
end

#disasm(fmt) ⇒ Object



3840
3841
3842
3843
3844
3845
# File 'lib/syntax_tree/yarv/instructions.rb', line 3840

def disasm(fmt)
  fmt.instruction(
    "opt_newarray_send",
    [fmt.object(number), fmt.object(method)]
  )
end

#lengthObject



3860
3861
3862
# File 'lib/syntax_tree/yarv/instructions.rb', line 3860

def length
  3
end

#popsObject



3864
3865
3866
# File 'lib/syntax_tree/yarv/instructions.rb', line 3864

def pops
  number
end

#pushesObject



3868
3869
3870
# File 'lib/syntax_tree/yarv/instructions.rb', line 3868

def pushes
  1
end

#to_a(_iseq) ⇒ Object



3847
3848
3849
# File 'lib/syntax_tree/yarv/instructions.rb', line 3847

def to_a(_iseq)
  [:opt_newarray_send, number, method]
end