Sha256: 4cb45483f954f0b7ce4097065a55451b652ab98ed625573be1df422e4ef15c50
Contents?: true
Size: 1.2 KB
Versions: 1
Compression:
Stored size: 1.2 KB
Contents
require 'gobstones/lang/definitions/definition' require 'gobstones/lang/definitions/no_return_statement' require 'gobstones/runner/execution_context' require 'gobstones/runner/errors/wrong_arguments_error' module Gobstones module Lang class Procedure < Definition # TODO rename args to a better name, args_tuple? def initialize(name, args, body) super(name, args, body, NoReturnStatement.new) end def evaluate(context, arguments=[]) check_number_of_arguments arguments procedure_context = Gobstones::Runner::ProcedureExecutionContext.based_on context set_arguments arguments, procedure_context body.evaluate procedure_context end private def check_number_of_arguments(arguments) if args.length != arguments.length message = "Wrong number of arguments in procedure '#{name}': expected #{args.length}, got #{arguments.length}" raise Gobstones::Runner::WrongArgumentsError, message end end def set_arguments(arguments, procedure_context) args.length.times do |index| procedure_context.set args.variables[index], arguments[index] end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
gobstones-0.0.1.1 | lib/gobstones/lang/definitions/procedure.rb |