public void VisitFunctionStmt(FunctionStmt stmt) { Declare(stmt.Name); Define(stmt.Name); ResolveFunction(stmt, FunctionType.Function); }
private void ResolveFunction(FunctionStmt function, FunctionType type) { var enclosingFunction = currentFunction; currentFunction = type; BeginScope(); foreach (var param in function.Parameters) { Declare(param); Define(param); } Resolve(function.Body); EndScope(); currentFunction = enclosingFunction; }
public LoxFunction(FunctionStmt declaration, Environment closure, bool isInitializer) { this.declaration = declaration; this.closure = closure; this.isInitializer = isInitializer; }
public void VisitFunctionStmt(FunctionStmt stmt) { var function = new LoxFunction(stmt, environment, false); environment.Define(stmt.Name.Lexeme, function); }