Example #1
0
        public object VisitFunctionStmt(Stmt.Function stmt)
        {
            Declare(stmt.Name);
            Define(stmt.Name);

            ResolveFunction(stmt, FunctionType.FUNCTION);
            return(null);
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }
Example #4
0
 public LoxFunction(Stmt.Function declaration, Environment closure, bool isInitializer)
 {
     _declaration   = declaration;
     _closure       = closure;
     _isInitializer = isInitializer;
 }