View patterns, record wildcards, and record puns
[ghc-hetmet.git] / compiler / basicTypes / Literal.lhs
index e83ea9d..c6782f0 100644 (file)
@@ -1,9 +1,17 @@
 %
+% (c) The University of Glasgow 2006
 % (c) The GRASP/AQUA Project, Glasgow University, 1998
 %
 \section[Literal]{@Literal@: Machine literals (unboxed, of course)}
 
 \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 Literal
        ( Literal(..)           -- Exported to ParseIface
        , mkMachInt, mkMachWord
@@ -15,6 +23,7 @@ module Literal
 
        , inIntRange, inWordRange, tARGET_MAX_INT, inCharRange
        , isZeroLit
+       , litFitsInChar
 
        , word2IntLit, int2WordLit
        , narrow8IntLit, narrow16IntLit, narrow32IntLit
@@ -26,24 +35,20 @@ module Literal
 
 #include "HsVersions.h"
 
-import TysPrim         ( charPrimTy, addrPrimTy, floatPrimTy, doublePrimTy,
-                         intPrimTy, wordPrimTy, int64PrimTy, word64PrimTy
-                       )
-import Type            ( Type )
+import TysPrim
+import Type
 import Outputable
 import FastTypes
 import FastString
 import Binary
+import Ratio
 
-import Ratio           ( numerator )
-import FastString      ( uniqueOfFS, lengthFS )
-import DATA_INT                ( Int8,  Int16,  Int32 )
-import DATA_WORD       ( Word8, Word16, Word32 )
-import Char            ( ord, chr )
+import Data.Int
+import Data.Word
+import Data.Char
 \end{code}
 
 
-
 %************************************************************************
 %*                                                                     *
 \subsection{Sizes}
@@ -287,6 +292,12 @@ litIsDupable :: Literal -> Bool
 litIsDupable (MachStr _) = False
 litIsDupable other      = True
 
+litFitsInChar :: Literal -> Bool
+litFitsInChar (MachInt i)
+                        = fromInteger i <= ord minBound 
+                        && fromInteger i >= ord maxBound 
+litFitsInChar _         = False
+
 litSize :: Literal -> Int
 -- Used by CoreUnfold.sizeExpr
 litSize (MachStr str) = 1 + ((lengthFS str + 3) `div` 4)