1 ///////////////////////////////////////////////////////////////////////////////
3 // This file implements some basic AST manipulation routines
5 ///////////////////////////////////////////////////////////////////////////////
10 ///////////////////////////////////////////////////////////////////////////////
12 // Select the ith component from an expression list
14 ///////////////////////////////////////////////////////////////////////////////
15 Exp component_exp(Exps exps, int n)
19 { #[h ... _] | i == 1: { return h; }
20 | #[_ ... t]: { es = t; i--; }
22 error("%Lexpression %e does not have component %i\n",
27 ///////////////////////////////////////////////////////////////////////////////
29 // Select the ith component from an expression list
31 ///////////////////////////////////////////////////////////////////////////////
32 Exp component_exp(Exps exps, Id n)
33 { return component_exp(exps,atol(n+1)); }
35 ///////////////////////////////////////////////////////////////////////////////
37 // Select the ith component from a labeled expression list
39 ///////////////////////////////////////////////////////////////////////////////
40 Exp component_exp(LabExps labeled_exps, Id n)
41 { LabExps les = labeled_exps;
43 { #[ {label, exp} ... _] | label == n: { return exp; }
44 | #[ _ ... t]: { les = t; }
46 error("%Lexpression %e does not have component %s\n",
47 RECORDexp(labeled_exps), n);