diff src/reduce.sml @ 1289:3b22c3c67f35

Reduce: Inline let-bound variables whose types involve functions
author Adam Chlipala <adam@chlipala.net>
date Sun, 22 Aug 2010 13:43:46 -0400
parents 56bd4a4f6e66
children b4480a56cab7
line wrap: on
line diff
--- a/src/reduce.sml	Sat Aug 21 10:58:13 2010 -0400
+++ b/src/reduce.sml	Sun Aug 22 13:43:46 2010 -0400
@@ -652,7 +652,14 @@
                           | 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