1234567891011121314151617181920212223242526272829303132333435363738394041 |
- module Chervil::AST
- class Function
- attr_reader :params
- attr_reader :body
-
- def initialize(params, body)
- @params = params
- @body = body
- end
-
- def ==(other)
- @params == other.params && @body == other.body
- end
-
- def evaluate(env)
- self
- end
-
- def call(args)
- unless @params.size == args.size
- raise "Expected #{params.size} arguments but received #{args.size}"
- end
-
- env = ::Chervil::Env.new
- @params.zip(args).each do |key, value|
- env.set(key.name, value)
- end
-
- current_expr = nil
- @body.each do |expr|
- current_expr = expr.evaluate(env)
- end
-
- current_expr
- end
-
- def to_s
- "<function>"
- end
- end
- end
|