X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FFloat.lhs;h=cac8c0af164770f98753ff95c794ef38a5f29151;hb=45b7a6b356f0cb85ea96c2ac5f77fd3eac1103cf;hp=c4003b4c6224d650cd0e6c795a0d2ea5f11daad7;hpb=d9a0d6f44a930da4ae49678908e37793d693467c;p=haskell-directory.git diff --git a/GHC/Float.lhs b/GHC/Float.lhs index c4003b4..cac8c0a 100644 --- a/GHC/Float.lhs +++ b/GHC/Float.lhs @@ -189,10 +189,13 @@ instance Num Float where | otherwise = negate 1 {-# INLINE fromInteger #-} - fromInteger n = encodeFloat n 0 - -- It's important that encodeFloat inlines here, and that - -- fromInteger in turn inlines, - -- so that if fromInteger is applied to an (S# i) the right thing happens + fromInteger (S# i#) = case (int2Float# i#) of { d# -> F# d# } + fromInteger (J# s# d#) = encodeFloat# s# d# 0 + -- previous code: fromInteger n = encodeFloat n 0 + -- doesn't work too well, because encodeFloat is defined in + -- terms of ccalls which can never be simplified away. We + -- want simple literals like (fromInteger 3 :: Float) to turn + -- into (F# 3.0), hence the special case for S# here. instance Real Float where toRational x = (m%1)*(b%1)^^n