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