class SyntaxTree::YARV::BranchUnless

### Summary

‘branchunless` has one argument: the jump index. It pops one value off the stack: the jump condition.

If the value popped off the stack is false or nil, ‘branchunless` jumps to the jump index and continues executing there.

### Usage

~~~ruby if 2 + 3

puts "foo"

end ~~~

Attributes

label[R]

Public Class Methods

new(label) click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 299
def initialize(label)
  @label = label
end

Public Instance Methods

==(other) click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 315
def ==(other)
  other.is_a?(BranchUnless) && other.label == label
end
branch_targets() click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 331
def branch_targets
  [label]
end
call(vm) click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 327
def call(vm)
  vm.jump(label) unless vm.pop
end
deconstruct_keys(_keys) click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 311
def deconstruct_keys(_keys)
  { label: label }
end
disasm(fmt) click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 303
def disasm(fmt)
  fmt.instruction("branchunless", [fmt.label(label)])
end
falls_through?() click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 335
def falls_through?
  true
end
length() click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 319
def length
  2
end
pops() click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 323
def pops
  1
end
to_a(_iseq) click to toggle source
# File lib/syntax_tree/yarv/instructions.rb, line 307
def to_a(_iseq)
  [:branchunless, label.name]
end