Mercurial > urweb
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