[project @ 2005-03-10 14:03:28 by simonmar]
[ghc-hetmet.git] / ghc / compiler / stranal / SaAbsInt.lhs
index 14bb2df..3cd9ba4 100644 (file)
@@ -4,8 +4,8 @@
 \section[SaAbsInt]{Abstract interpreter for strictness analysis}
 
 \begin{code}
-#ifndef DEBUG
--- If DEBUG is off, omit all exports 
+#ifndef OLD_STRICTNESS
+-- If OLD_STRICTNESS is off, omit all exports 
 module SaAbsInt () where
 
 #else
@@ -17,13 +17,15 @@ module SaAbsInt (
        fixpoint,
        isBot
     ) where
-#endif /* DEBUG */
+
 #include "HsVersions.h"
 
 import CmdLineOpts     ( opt_AllStrict, opt_NumbersStrict )
 import CoreSyn
 import CoreUnfold      ( maybeUnfoldingTemplate )
-import Id              ( Id, idType, idStrictness, idUnfolding, isDataConId_maybe )
+import Id              ( Id, idType, idUnfolding, isDataConWorkId_maybe,
+                         idStrictness,
+                       )
 import DataCon         ( dataConTyCon, splitProductType_maybe, dataConRepArgTys )
 import IdInfo          ( StrictnessInfo(..) )
 import Demand          ( Demand(..), wwPrim, wwStrict, wwUnpack, wwLazy,
@@ -35,7 +37,7 @@ import Type           ( splitTyConApp_maybe,
                          isUnLiftedType, Type )
 import TyCon           ( tyConUnique )
 import PrelInfo                ( numericTyKeys )
-import Util            ( isIn, nOfThem, zipWithEqual )
+import Util            ( isIn, nOfThem, zipWithEqual, equalLength )
 import Outputable      
 \end{code}
 
@@ -294,7 +296,7 @@ evalStrictness (WwUnpack _ demand_info) val
       AbsTop      -> False
       AbsBot      -> True
       AbsProd vals
-          | length vals /= length demand_info -> pprTrace "TELL SIMON: evalStrictness" (ppr demand_info $$ ppr val)
+          | not (equalLength vals demand_info) -> pprTrace "TELL SIMON: evalStrictness" (ppr demand_info $$ ppr val)
                                                  False
           | otherwise -> or (zipWithEqual "evalStrictness" evalStrictness demand_info vals)
 
@@ -323,7 +325,7 @@ evalAbsence (WwUnpack _ demand_info) val
        AbsTop       -> False           -- No poison in here
        AbsBot       -> True            -- Pure poison
        AbsProd vals 
-          | length vals /= length demand_info -> pprTrace "TELL SIMON: evalAbsence" (ppr demand_info $$ ppr val)
+          | not (equalLength vals demand_info) -> pprTrace "TELL SIMON: evalAbsence" (ppr demand_info $$ ppr val)
                                                  True
           | otherwise -> or (zipWithEqual "evalAbsence" evalAbsence demand_info vals)
        _              -> pprTrace "TELL SIMON: evalAbsence" 
@@ -351,7 +353,7 @@ evalAbsence other val = anyBot val
 
 absId anal var env
   = case (lookupAbsValEnv env var, 
-         isDataConId_maybe var, 
+         isDataConWorkId_maybe var, 
          idStrictness var, 
          maybeUnfoldingTemplate (idUnfolding var)) of
 
@@ -464,7 +466,7 @@ absEval anal expr@(Case scrut case_bndr alts) env
                -- type; so the constructor in this alternative must be the right one
                -- so we can go ahead and bind the constructor args to the components
                -- of the product value.
-           ASSERT(length arg_vals == length val_bndrs)
+           ASSERT(equalLength arg_vals val_bndrs)
            absEval anal rhs rhs_env
          where
            val_bndrs = filter isId bndrs
@@ -917,3 +919,7 @@ used.  But who cares about missing that?
 
 NB: despite only having a two-point domain, we may still have many
 iterations, because there are several variables involved at once.
+
+\begin{code}
+#endif /* OLD_STRICTNESS */
+\end{code}