Class: Baba::Function
Direct Known Subclasses
Instance Method Summary collapse
- #arity ⇒ Object
- #bind(instance) ⇒ Object
- #call(interpreter, arguments) ⇒ Object
-
#initialize(declaration, closure) ⇒ Function
constructor
A new instance of Function.
- #to_s ⇒ Object
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
#arity ⇒ Object
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_s ⇒ Object
38 39 40 |
# File 'lib/baba/function.rb', line 38 def to_s "<fn: #{@declaration.name.lexeme}>" end |