X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FbasicTypes%2FLiteral.lhs;h=c6782f0ad9430ab197cc933ab19f0290f79c3690;hp=e83ea9db74e006ea9b6e9305f8678d7c648074e9;hb=6a05ec5ef5373f61b7f9f5bdc344483417fa801b;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1 diff --git a/compiler/basicTypes/Literal.lhs b/compiler/basicTypes/Literal.lhs index e83ea9d..c6782f0 100644 --- a/compiler/basicTypes/Literal.lhs +++ b/compiler/basicTypes/Literal.lhs @@ -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)