Functions 10

This commit is contained in:
nazrin 2025-06-02 01:27:19 +00:00
parent 7f4946f1e9
commit e9e3c992cb
4 changed files with 20 additions and 2 deletions

View file

@ -106,7 +106,7 @@ class Interpreter : Stmt.Visitor!void, Expr.Visitor!TValue {
evaluate(stmt.expression);
}
void visit(Stmt.Function stmt){
LoxFunction func = new LoxFunction(stmt);
LoxFunction func = new LoxFunction(stmt, environment);
environment.define(stmt.name.lexeme, TValue.cal(func));
}
void visit(Stmt.If stmt){

View file

@ -10,11 +10,15 @@ import jlox.util;
class LoxFunction : LoxCallable{
private Stmt.Function declaration;
private Environment closure;
mixin defaultCtor;
invariant{
assert(declaration && closure);
}
int arity() => declaration.params.length.to!int;
TValue call(Interpreter interpreter, TValue[] arguments){
Environment environment = new Environment(interpreter.globals);
Environment environment = new Environment(closure);
foreach(i; 0 .. declaration.params.length)
environment.define(declaration.params[i].lexeme, arguments[i]);
try{