public override Tuple<ABT.Env, ABT.Stmt> GetStmt(ABT.Env env) {
ABT.Expr cond = this.Cond.GetExpr(env);
if (!cond.Type.IsScalar) {
throw new InvalidOperationException("Error: expected scalar Type");
}
Tuple<ABT.Env, ABT.Stmt> r_true_stmt = this.TrueStmt.GetStmt(env);
env = r_true_stmt.Item1;
ABT.Stmt true_stmt = r_true_stmt.Item2;
Tuple<ABT.Env, ABT.Stmt> r_false_stmt = this.FalseStmt.GetStmt(env);
env = r_false_stmt.Item1;
ABT.Stmt false_stmt = r_false_stmt.Item2;
return new Tuple<ABT.Env, ABT.Stmt>(env, new ABT.IfElseStmt(cond, true_stmt, false_stmt));
}
}