public object VisitFunctionStmt(Stmt.Function stmt) { Declare(stmt.Name); Define(stmt.Name); ResolveFunction(stmt, FunctionType.FUNCTION); return(null); }
public object VisitFunctionStmt(Stmt.Function stmt) { LoxFunction function = new LoxFunction(stmt, _environment, false); if (stmt.Name != null) { _environment.Define(stmt.Name.Lexeme, function); } return(null); }
private void ResolveFunction(Stmt.Function function, FunctionType type) { FunctionType enclosingFunction = _currentFunction; _currentFunction = type; BeginScope(); foreach (Token parameter in function.Parameters) { Declare(parameter); Define(parameter); } Resolve(function.Body); EndScope(); _currentFunction = enclosingFunction; }
public LoxFunction(Stmt.Function declaration, Environment closure, bool isInitializer) { _declaration = declaration; _closure = closure; _isInitializer = isInitializer; }