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)