public override Tuple<ABT.Env, ABT.Stmt> GetStmt(ABT.Env env) {
env = env.InScope();
List<Tuple<ABT.Env, ABT.Decln>> declns = new List<Tuple<ABT.Env, ABT.Decln>>();
List<Tuple<ABT.Env, ABT.Stmt>> stmts = new List<Tuple<ABT.Env, ABT.Stmt>>();
foreach (Decln decln in this.Declns) {
//Tuple<AST.Env, List<Tuple<AST.Env, AST.Decln>>> r_decln = decln.GetDeclns_(env);
//env = r_decln.Item1;
//declns.AddRange(r_decln.Item2);
var declns_ = Semant(decln.GetDeclns, ref env);
declns.AddRange(declns_);
}
foreach (Stmt stmt in this.Stmts) {
Tuple<ABT.Env, ABT.Stmt> r_stmt = stmt.GetStmt(env);
env = r_stmt.Item1;
stmts.Add(r_stmt);
}
env = env.OutScope();
return new Tuple<ABT.Env, ABT.Stmt>(env, new ABT.CompoundStmt(declns, stmts));
}
}