From 7765b90d25f98bd9eb0cf2998121e51d4551f733 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 22 Aug 2010 13:43:46 -0400 Subject: Reduce: Inline let-bound variables whose types involve functions --- src/reduce.sml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/reduce.sml') diff --git a/src/reduce.sml b/src/reduce.sml index 963863e8..36c9f44e 100644 --- a/src/reduce.sml +++ b/src/reduce.sml @@ -652,7 +652,14 @@ fun kindConAndExp (namedC, namedE) = | EClosure (n, es) => (EClosure (n, map (exp env) es), loc) | ELet (x, t, e1, e2) => - (ELet (x, con env t, exp env e1, exp (UnknownE :: env) e2), loc) + let + val t = con env t + in + if ESpecialize.functionInside t then + exp (KnownE e1 :: env) e2 + else + (ELet (x, con env t, exp env e1, exp (UnknownE :: env) e2), loc) + end | EServerCall (n, es, t) => (EServerCall (n, map (exp env) es, con env t), loc) in -- cgit v1.2.3