public object visitFunctionStmt(Stmt.Function stmt) { LoxFunction function = new LoxFunction(stmt, env, false); env.define(stmt.Name.Lexeme, function); return(null); }
public LoxFunction(Stmt.Function declaration, Envir closure, bool isInitializer) { IsInitializer = isInitializer; Closure = closure; Declaration = declaration; }
public object visitFunctionStmt(Stmt.Function stmt) { declare(stmt.Name); define(stmt.Name); resolveFunction(stmt, FunctionType.FUNCTION); return(null); }
private void resolveFunction(Stmt.Function function, FunctionType type) { FunctionType enclosingFunction = currentFunction; currentFunction = type; beginScope(); foreach (Token param in function.Parameters) { declare(param); define(param); } resolve(function.Body); endScope(); currentFunction = enclosingFunction; }