Class: SorobanRustBackend::Instruction::Jump

Inherits:
Handler
  • Object
show all
Defined in:
lib/instruction/jump.rb

Overview

This class handles the jump instruction.

Instance Method Summary collapse

Methods inherited from Handler

#format_assign, handle, #initialize

Constructor Details

This class inherits a constructor from SorobanRustBackend::Instruction::Handler

Instance Method Details

#handleObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/instruction/jump.rb', line 5

def handle
  last_instruction_is_else_if = @instruction.inputs[@instruction.inputs.size - 1] == 'ELSE_IF_BRANCH'
  last_instruction_is_while_loop = @instruction.inputs[@instruction.inputs.size - 1] == 'WHILE_LOOP'

  if @instruction.inputs.size == 1
    handle_unconditional_jump
  elsif @instruction.inputs.size == 2
    last_instruction_is_else_if ? handle_unconditional_jump : handle_conditional_jump
  elsif @instruction.inputs.size == 3 && last_instruction_is_else_if
    handle_conditional_else_if_jump
  elsif @instruction.inputs.size == 4 && last_instruction_is_while_loop
    handle_while_loop
  else
    raise "Invalid jump instruction. Received too many inputs: #{@instruction.inputs.size}"
  end
end