public override Tuple<AST.Env, AST.Stmt> GetStmt(AST.Env env) { env = env.InScope(); List<Tuple<AST.Env, AST.Decln>> declns = new List<Tuple<AST.Env, AST.Decln>>(); List<Tuple<AST.Env, AST.Stmt>> stmts = new List<Tuple<AST.Env, AST.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); } foreach (Stmt stmt in this.stmts) { Tuple<AST.Env, AST.Stmt> r_stmt = stmt.GetStmt(env); env = r_stmt.Item1; stmts.Add(r_stmt); } env = env.OutScope(); return new Tuple<AST.Env, AST.Stmt>(env, new AST.CompoundStmt(declns, stmts)); }