Class: Baba::Function

Inherits:
Callable show all
Defined in:
lib/baba/function.rb

Direct Known Subclasses

RubyFunction

Instance Method Summary collapse

Constructor Details

#initialize(declaration, closure) ⇒ Function

Returns a new instance of Function.



9
10
11
12
# File 'lib/baba/function.rb', line 9

def initialize(declaration, closure)
  @declaration = declaration
  @closure = closure
end

Instance Method Details

#arityObject



34
35
36
# File 'lib/baba/function.rb', line 34

def arity
  @declaration.params.size
end

#bind(instance) ⇒ Object



14
15
16
17
18
# File 'lib/baba/function.rb', line 14

def bind(instance)
  environment = Environment.new(@closure)
  environment.define("self", instance)
  Function.new(@declaration, environment)
end

#call(interpreter, arguments) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/baba/function.rb', line 20

def call(interpreter, arguments)
  environment = Environment.new(@closure)
  @declaration.params.each_with_index do |p, i|
    environment.define(p.lexeme, arguments[i])
  end

  begin
    interpreter.execute_block(@declaration.body, environment)
  rescue Return => value
    return value.value
  end
  nil
end

#to_sObject



38
39
40
# File 'lib/baba/function.rb', line 38

def to_s
  "<fn: #{@declaration.name.lexeme}>"
end