Mercurial > urweb
diff src/reduce.sml @ 1824:216e92b39fc1
Paranoid inlining prevention for FFI types at the Core level; less paranoid inlining promotion for passive values at the Mono level
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Wed, 19 Sep 2012 18:01:22 -0400 |
parents | 148203744882 |
children | e15234fbb163 |
line wrap: on
line diff
--- a/src/reduce.sml Wed Sep 19 14:36:12 2012 -0400 +++ b/src/reduce.sml Wed Sep 19 18:01:22 2012 -0400 @@ -247,6 +247,11 @@ | EField (e, _, _) => passive e | _ => false +fun notFfi (t : con) = + case #1 t of + CFfi _ => false + | _ => true + fun kindConAndExp (namedC, namedE) = let fun kind env (all as (k, loc)) = @@ -793,7 +798,7 @@ val t = con env t in - if passive e1' orelse count e2 <= 1 orelse ESpecialize.functionInside t then + if notFfi t andalso (passive e1' orelse count e2 <= 1 orelse ESpecialize.functionInside t) then exp (KnownE e1 :: env) e2 else (ELet (x, t, e1', exp (UnknownE :: env) e2), loc)