FIX Trac 1888; duplicate INLINE pragmas
[ghc-hetmet.git] / compiler / basicTypes / BasicTypes.lhs
index c43280f..4b0d3d7 100644 (file)
@@ -1,4 +1,5 @@
 %
+% (c) The University of Glasgow 2006
 % (c) The GRASP/AQUA Project, Glasgow University, 1997-1998
 %
 \section[BasicTypes]{Miscellanous types}
@@ -13,6 +14,13 @@ types that
 \end{itemize}
 
 \begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 module BasicTypes(
        Version, bumpVersion, initialVersion,
 
@@ -235,7 +243,7 @@ isBoxed Unboxed = False
 %*                                                                     *
 %************************************************************************
 
-\begin{code} 
+\begin{code}
 data RecFlag = Recursive 
             | NonRecursive
             deriving( Eq )
@@ -377,10 +385,8 @@ data OccInfo
 
   | IAmALoopBreaker    -- Used by the occurrence analyser to mark loop-breakers
                        -- in a group of recursive definitions
-       !RulesOnly      -- True <=> This loop breaker mentions the other binders
-                       --          in its recursive group only in its RULES, not
-                       --          in its rhs
-                       --  See OccurAnal Note [RulesOnly]
+       !RulesOnly      -- True <=> This is a weak or rules-only loop breaker
+                       --  See OccurAnal Note [Weak loop breakers]
 
 type RulesOnly = Bool
 \end{code}
@@ -490,6 +496,10 @@ instance Outputable StrictnessMark where
 \begin{code}
 data SuccessFlag = Succeeded | Failed
 
+instance Outputable SuccessFlag where
+    ppr Succeeded = ptext SLIT("Succeeded")
+    ppr Failed    = ptext SLIT("Failed")
+
 successIf :: Bool -> SuccessFlag
 successIf True  = Succeeded
 successIf False = Failed
@@ -534,14 +544,21 @@ alwaysInlineSpec  = Inline AlwaysActive True      -- INLINE always
 neverInlineSpec   = Inline NeverActive  False  -- NOINLINE 
 
 instance Outputable Activation where
-   ppr AlwaysActive     = empty                -- The default
+   ppr NeverActive      = ptext SLIT("NEVER")
+   ppr AlwaysActive     = ptext SLIT("ALWAYS")
    ppr (ActiveBefore n) = brackets (char '~' <> int n)
    ppr (ActiveAfter n)  = brackets (int n)
-   ppr NeverActive      = ptext SLIT("NEVER")
     
 instance Outputable InlineSpec where
-   ppr (Inline act True)  = ptext SLIT("INLINE") <> ppr act
-   ppr (Inline act False) = ptext SLIT("NOINLINE") <> ppr act
+   ppr (Inline act is_inline)  
+       | is_inline = ptext SLIT("INLINE")
+                     <> case act of
+                          AlwaysActive -> empty
+                          other        -> ppr act
+       | otherwise = ptext SLIT("NOINLINE")
+                     <> case act of
+                           NeverActive -> empty
+                           other       -> ppr act
 
 isActive :: CompilerPhase -> Activation -> Bool
 isActive p NeverActive      = False