Class: Kalc::Ast::FunctionDefinition
- Inherits:
-
Object
- Object
- Kalc::Ast::FunctionDefinition
- Defined in:
- lib/kalc/ast.rb
Instance Method Summary collapse
- #eval(context) ⇒ Object
-
#initialize(name, argument_list, body) ⇒ FunctionDefinition
constructor
A new instance of FunctionDefinition.
Constructor Details
#initialize(name, argument_list, body) ⇒ FunctionDefinition
Returns a new instance of FunctionDefinition.
258 259 260 261 262 |
# File 'lib/kalc/ast.rb', line 258 def initialize(name, argument_list, body) @name = name @argument_list = argument_list @body = body end |
Instance Method Details
#eval(context) ⇒ Object
264 265 266 267 268 269 270 271 272 273 274 |
# File 'lib/kalc/ast.rb', line 264 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 |