class Gobstones::Lang::Definition

Attributes

arguments[R]
body[R]
name[R]
return_statement[R]

Public Class Methods

new(name, arguments, body, return_statement) click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 12
def initialize(name, arguments, body, return_statement)
  @name = name
  @arguments = arguments
  @body = body
  @return_statement = return_statement
end

Public Instance Methods

create_context_based_on(_outer_context) click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 36
def create_context_based_on(_outer_context)
  subclass_responsibility
end
definition_type() click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 40
def definition_type
  subclass_responsibility
end
equality_attributes() click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 19
def equality_attributes
  %i[name arguments body return_statement]
end
evaluate(context, calling_arguments = []) click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 27
def evaluate(context, calling_arguments = [])
  check_number_of_arguments calling_arguments
  in_definition_context_based_on(context) do |definition_context|
    set_arguments calling_arguments, definition_context
    body.evaluate definition_context
    return return_statement.evaluate(definition_context)
  end
end
named?(a_name) click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 23
def named?(a_name)
  name == a_name
end

Private Instance Methods

check_number_of_arguments(calling_arguments) click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 46
def check_number_of_arguments(calling_arguments)
  raise Runner::WrongArgumentsError, wrong_number_of_arguments_message(calling_arguments) if
      arguments.length != calling_arguments.length
end
in_definition_context_based_on(outer_context) { |create_context_based_on(outer_context)| ... } click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 56
def in_definition_context_based_on(outer_context)
  yield(create_context_based_on(outer_context))
end
set_arguments(calling_arguments, procedure_context) click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 60
def set_arguments(calling_arguments, procedure_context)
  arguments.length.times do |index|
    procedure_context.set arguments.variable_at(index), calling_arguments[index]
  end
end
wrong_number_of_arguments_message(calling_arguments) click to toggle source
# File lib/gobstones/lang/definitions/definition.rb, line 51
def wrong_number_of_arguments_message(calling_arguments)
  "Wrong number of arguments in #{definition_type} '#{name}':" \
    " expected #{arguments.length}, got #{calling_arguments.length}"
end