class Gobstones::Lang::Commands::MultipleAssignment

Attributes

expression[R]
var_tuple[R]

Public Class Methods

new(var_tuple, expression) click to toggle source
# File lib/gobstones/lang/commands/multiple_assignment.rb, line 11
def initialize(var_tuple, expression)
  @var_tuple = var_tuple
  @expression = expression
end

Public Instance Methods

equality_attributes() click to toggle source
# File lib/gobstones/lang/commands/multiple_assignment.rb, line 16
def equality_attributes
  %i[var_tuple expression]
end
evaluate(context) click to toggle source
# File lib/gobstones/lang/commands/multiple_assignment.rb, line 20
def evaluate(context)
  # TODO implement as many simple assignments?
  validate_expression_is_function_call
  function_call_result = expression.evaluate(context)
  check_number_of_arguments(function_call_result)
  function_call_result.length.times do |index|
    context.set(var_tuple.variable_at(index), function_call_result[index])
  end
end

Private Instance Methods

check_number_of_arguments(calling_arguments) click to toggle source
# File lib/gobstones/lang/commands/multiple_assignment.rb, line 37
def check_number_of_arguments(calling_arguments)
  raise Runner::WrongArgumentsError, wrong_number_of_arguments_message(calling_arguments) if
      var_tuple.length != calling_arguments.length
end
validate_expression_is_function_call() click to toggle source
# File lib/gobstones/lang/commands/multiple_assignment.rb, line 32
def validate_expression_is_function_call
  raise Runner::GobstonesTypeError, 'expected a function call in multiple assignment' unless
      expression.is_function_call?
end
wrong_number_of_arguments_message(calling_arguments) click to toggle source
# File lib/gobstones/lang/commands/multiple_assignment.rb, line 42
def wrong_number_of_arguments_message(calling_arguments)
  "Wrong number of arguments in assignment: expected #{var_tuple.length}, got #{calling_arguments.length}"
end