X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FbasicTypes%2FLiteral.lhs;h=774ab042ce72df27c72a00b4e5e6fdf69d163bc2;hb=e4417dcd4679da9c6b18c02ff667199c572bed89;hp=f05d1bf3b9661a86719042d0044a54bd64d4f3ad;hpb=49c98d143c382a1341e1046f5ca00819a25691ba;p=ghc-hetmet.git diff --git a/compiler/basicTypes/Literal.lhs b/compiler/basicTypes/Literal.lhs index f05d1bf..774ab04 100644 --- a/compiler/basicTypes/Literal.lhs +++ b/compiler/basicTypes/Literal.lhs @@ -5,6 +5,13 @@ \section[Literal]{@Literal@: Machine literals (unboxed, of course)} \begin{code} +{-# OPTIONS -fno-warn-incomplete-patterns #-} +-- 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 @@ -16,6 +23,7 @@ module Literal , inIntRange, inWordRange, tARGET_MAX_INT, inCharRange , isZeroLit + , litFitsInChar , word2IntLit, int2WordLit , narrow8IntLit, narrow16IntLit, narrow32IntLit @@ -34,7 +42,6 @@ import FastTypes import FastString import Binary import Ratio -import FastString import Data.Int import Data.Word @@ -55,7 +62,7 @@ respectively (which will be wrong on a 64-bit machine). \begin{code} tARGET_MIN_INT, tARGET_MAX_INT, tARGET_MAX_WORD :: Integer -#if __GLASGOW_HASKELL__ +#ifdef __GLASGOW_HASKELL__ tARGET_MIN_INT = toInteger (minBound :: Int) tARGET_MAX_INT = toInteger (maxBound :: Int) #else @@ -223,7 +230,7 @@ isZeroLit (MachWord 0) = True isZeroLit (MachWord64 0) = True isZeroLit (MachFloat 0) = True isZeroLit (MachDouble 0) = True -isZeroLit other = False +isZeroLit _ = False \end{code} Coercions @@ -276,14 +283,20 @@ litIsTrivial :: Literal -> Bool -- c.f. CoreUtils.exprIsTrivial -- False principally of strings litIsTrivial (MachStr _) = False -litIsTrivial other = True +litIsTrivial _ = True litIsDupable :: Literal -> Bool -- True if code space does not go bad if we duplicate this literal -- c.f. CoreUtils.exprIsDupable -- Currently we treat it just like litIsTrivial litIsDupable (MachStr _) = False -litIsDupable other = True +litIsDupable _ = True + +litFitsInChar :: Literal -> Bool +litFitsInChar (MachInt i) + = fromInteger i <= ord minBound + && fromInteger i >= ord maxBound +litFitsInChar _ = False litSize :: Literal -> Int -- Used by CoreUnfold.sizeExpr @@ -316,6 +329,7 @@ literalType (MachLabel _ _) = addrPrimTy Comparison ~~~~~~~~~~ \begin{code} +cmpLit :: Literal -> Literal -> Ordering cmpLit (MachChar a) (MachChar b) = a `compare` b cmpLit (MachStr a) (MachStr b) = a `compare` b cmpLit (MachNullAddr) (MachNullAddr) = EQ @@ -329,6 +343,7 @@ cmpLit (MachLabel a _) (MachLabel b _) = a `compare` b cmpLit lit1 lit2 | litTag lit1 <# litTag lit2 = LT | otherwise = GT +litTag :: Literal -> FastInt litTag (MachChar _) = _ILIT(1) litTag (MachStr _) = _ILIT(2) litTag (MachNullAddr) = _ILIT(3) @@ -347,6 +362,7 @@ litTag (MachLabel _ _) = _ILIT(10) exceptions: MachFloat gets an initial keyword prefix. \begin{code} +pprLit :: Literal -> SDoc pprLit (MachChar ch) = pprHsChar ch pprLit (MachStr s) = pprHsString s pprLit (MachInt i) = pprIntVal i