module Pione::Lang::Callable

Public Instance Methods

call_pione_method(env, name, args) click to toggle source

Call the pione method.

# 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