diff options
author | Andreas Klebinger <klebinger.andreas@gmx.at> | 2021-01-20 16:24:14 +0100 |
---|---|---|
committer | Andreas Klebinger <klebinger.andreas@gmx.at> | 2021-02-25 07:38:50 -0500 |
commit | acae6ab352901857c27e4b3747f3f3ea9d8e6b3f (patch) | |
tree | 2ffe9014ab8c5130b3efdb9e727f80682804b298 /compiler/GHC/ThToHs.hs | |
parent | 10e115d39d6062151cc95256fee052b197a46186 (diff) | |
download | haskell-wip/T15646.tar.gz |
Fix typechecking time bug for large rationals (#15646)wip/T15646
When desugaring large overloaded literals we now avoid
computing the `Rational` value. Instead prefering to
store the significant and exponent as given where
reasonable and possible.
See Note [FractionalLit representation] for details.
Diffstat (limited to 'compiler/GHC/ThToHs.hs')
-rw-r--r-- | compiler/GHC/ThToHs.hs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/GHC/ThToHs.hs b/compiler/GHC/ThToHs.hs index 2a6442cab7..e78dac205d 100644 --- a/compiler/GHC/ThToHs.hs +++ b/compiler/GHC/ThToHs.hs @@ -1211,7 +1211,7 @@ cvtOverLit :: Lit -> CvtM (HsOverLit GhcPs) cvtOverLit (IntegerL i) = do { force i; return $ mkHsIntegral (mkIntegralLit i) } cvtOverLit (RationalL r) - = do { force r; return $ mkHsFractional (mkFractionalLit r) } + = do { force r; return $ mkHsFractional (mkTHFractionalLit r) } cvtOverLit (StringL s) = do { let { s' = mkFastString s } ; force s' @@ -1246,9 +1246,9 @@ cvtLit :: Lit -> CvtM (HsLit GhcPs) cvtLit (IntPrimL i) = do { force i; return $ HsIntPrim NoSourceText i } cvtLit (WordPrimL w) = do { force w; return $ HsWordPrim NoSourceText w } cvtLit (FloatPrimL f) - = do { force f; return $ HsFloatPrim noExtField (mkFractionalLit f) } + = do { force f; return $ HsFloatPrim noExtField (mkTHFractionalLit f) } cvtLit (DoublePrimL f) - = do { force f; return $ HsDoublePrim noExtField (mkFractionalLit f) } + = do { force f; return $ HsDoublePrim noExtField (mkTHFractionalLit f) } cvtLit (CharL c) = do { force c; return $ HsChar NoSourceText c } cvtLit (CharPrimL c) = do { force c; return $ HsCharPrim NoSourceText c } cvtLit (StringL s) = do { let { s' = mkFastString s } |