aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-08-14 09:49:31 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-08-14 09:49:31 +0000
commit5cde23f8698e7cdde220f30504b339b7237fd5f2 (patch)
treecfb1ee84b0353f0204cb153c2e64d1d998a6bc35 /src
parent0a2de7f543ac23b8576a232c0ecf6a5f49c1884a (diff)
* Function() takes a list of formals.
Diffstat (limited to 'src')
-rw-r--r--src/fix.cc18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/fix.cc b/src/fix.cc
index dd02d7538..5405190f3 100644
--- a/src/fix.cc
+++ b/src/fix.cc
@@ -53,10 +53,18 @@ static Expr substExpr(string x, Expr rep, Expr e)
else
return e;
- if (ATmatch(e, "Function(<str>, <term>)", &s, &e2))
- if (x == s)
- return e;
- /* !!! unfair substitutions */
+ ATermList formals;
+ if (ATmatch(e, "Function([<list>], <term>)", &formals, &e2)) {
+ while (!ATisEmpty(formals)) {
+ if (!ATmatch(ATgetFirst(formals), "<str>", &s))
+ throw badTerm("not a list of formals", (ATerm) formals);
+ if (x == (string) s)
+ return e;
+ formals = ATgetNext(formals);
+ }
+ }
+
+ /* ??? unfair substitutions? */
/* Generically substitute in subterms. */
@@ -332,6 +340,8 @@ static Expr evalExpr2(EvalState & state, Expr e)
static Expr evalExpr(EvalState & state, Expr e)
{
+ Nest nest(lvlVomit, format("evaluating expression: %1%") % printTerm(e));
+
/* Consult the memo table to quickly get the normal form of
previously evaluated expressions. */
NormalForms::iterator i = state.normalForms.find(e);