Module: Pione::Lang::Callable

Included in:
Sequence
Defined in:
lib/pione/lang/expr.rb

Instance Method Summary collapse

Instance Method Details

#call_pione_method(env, name, args) ⇒ Object

Call the pione method.

Raises:

  • (ArgumentError)


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/pione/lang/expr.rb', line 51

def call_pione_method(env, name, args)
  # check arguments
  raise ArgumentError.new(args) unless args.is_a?(Array)

  if pione_method = pione_type(env).find_method(env, name, self, args)
    # evaluate arguments if the method type is immediate
    if pione_method.method_type == :immediate
      args = args.map {|arg| arg.eval(env)}
    end
    # call it
    pione_method.call(env, self, args)
  else
    raise MethodNotFound.new(env, name, self, args)
  end
end