AST.ForStmt.GetStmt C# (CSharp) Метод

GetStmt() публичный Метод

public GetStmt ( ABT env ) : ABT.Stmt>.Tuple
env ABT
Результат ABT.Stmt>.Tuple
        public override Tuple<ABT.Env, ABT.Stmt> GetStmt(ABT.Env env) {
            Option<ABT.Expr> init = this.Init.Map(_ => _.GetExpr(env));
            if (init.IsSome) {
                env = init.Value.Env;
            }

            Option<ABT.Expr> cond = this.Cond.Map(_ => _.GetExpr(env));
            if (cond.IsSome) {
                env = cond.Value.Env;
            }

            if (cond.IsSome && !cond.Value.Type.IsScalar) {
                throw new InvalidOperationException("Error: conditional expression in while Loop must be scalar.");
            }

            Option<ABT.Expr> loop = this.Loop.Map(_ => _.GetExpr(env));
            if (loop.IsSome) {
                env = loop.Value.Env;
            }

            Tuple<ABT.Env, ABT.Stmt> r_body = this.Body.GetStmt(env);
            env = r_body.Item1;
            ABT.Stmt body = r_body.Item2;

            return new Tuple<ABT.Env, ABT.Stmt>(env, new ABT.ForStmt(init, cond, loop, body));
        }