diff options
author | Tom Willemse | 2021-01-31 17:11:47 -0800 |
---|---|---|
committer | Tom Willemse | 2021-01-31 17:11:47 -0800 |
commit | 4a71c219b5fa8e9e28af43925284f429092ba68e (patch) | |
tree | cd41f4e59c5c5d27dfcf139acf5ed2febfab5d5a /src/com/craftinginterpreters/lox/LoxFunction.java | |
parent | 922a8f68637f24fc447a8d687b75a676d3b310bb (diff) | |
download | crafting-interpreters-4a71c219b5fa8e9e28af43925284f429092ba68e.tar.gz crafting-interpreters-4a71c219b5fa8e9e28af43925284f429092ba68e.zip |
Add function calls
Diffstat (limited to 'src/com/craftinginterpreters/lox/LoxFunction.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/LoxFunction.java | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/com/craftinginterpreters/lox/LoxFunction.java b/src/com/craftinginterpreters/lox/LoxFunction.java new file mode 100644 index 0000000..d2e367b --- /dev/null +++ b/src/com/craftinginterpreters/lox/LoxFunction.java @@ -0,0 +1,33 @@ +package com.craftinginterpreters.lox; + +import java.util.List; + +class LoxFunction implements LoxCallable { + private final Stmt.Function declaration; + + LoxFunction(Stmt.Function declaration) { + this.declaration = declaration; + } + + @Override + public int arity() { + return declaration.params.size(); + } + + @Override + public Object call(Interpreter interpreter, List<Object> arguments) { + Environment environment = new Environment(interpreter.globals); + + for (int i = 0; i < declaration.params.size(); i++) { + environment.define(declaration.params.get(i).lexeme, arguments.get(i)); + } + + interpreter.executeBlock(declaration.body, environment); + return null; + } + + @Override + public String toString() { + return "<fn " + declaration.name.lexeme + ">"; + } +} |