From 59e88c7ded898c0aac6b17901e3b3a4dd1382604 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Wed, 27 Jan 2010 22:35:59 +0900 Subject: [PATCH] fixing simplify bug, neither var can be mutated for a let id substitution (issue 30) --- opt/simplify.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/opt/simplify.c b/opt/simplify.c index d4ac576d..fb99f12f 100644 --- a/opt/simplify.c +++ b/opt/simplify.c @@ -54,7 +54,9 @@ static sexp simplify (sexp ctx, sexp ast, sexp init_substs, sexp lambda) { if (sexp_not(sexp_memq(ctx, sexp_car(p2), sv)) && (! sexp_pointerp(sexp_car(ls2)) || sexp_litp(sexp_car(ls2)) || (sexp_refp(sexp_car(ls2)) - && sexp_lambdap(sexp_ref_loc(sexp_car(ls2)))))) { + && sexp_lambdap(sexp_ref_loc(sexp_car(ls2))) + && sexp_not(sexp_memq(ctx, sexp_ref_name(sexp_car(ls2)), + sexp_lambda_sv(sexp_ref_loc(sexp_car(ls2)))))))) { tmp = sexp_cons(ctx, sexp_car(app), sexp_car(ls2)); tmp = sexp_cons(ctx, sexp_car(p2), tmp); sexp_push(ctx, substs, tmp);