Class: Kalc::Ast::FunctionDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/kalc/ast.rb

Instance Method Summary collapse

Constructor Details

#initialize(name, argument_list, body) ⇒ FunctionDefinition

Returns a new instance of FunctionDefinition.



252
253
254
255
256
# File 'lib/kalc/ast.rb', line 252

def initialize(name, argument_list, body)
  @name = name
  @argument_list = argument_list
  @body = body
end

Instance Method Details

#eval(context) ⇒ Object



258
259
260
261
262
263
264
265
266
267
268
# File 'lib/kalc/ast.rb', line 258

def eval(context)
  context.add_function(@name.to_sym, lambda { |parent_context, *args|
    dup_body = Marshal.load(Marshal.dump(@body))
    cxt = Environment.new(parent_context)
    args.each_with_index do |arg, idx|
      cxt.add_variable(@argument_list[idx].value, arg.eval(cxt))
    end
    dup_body.eval(cxt)
  })
  nil
end