Commit d113ae78 authored by simonmar's avatar simonmar
Browse files

[project @ 2002-02-13 15:07:59 by simonmar]

Don't translate out negative (boxed) literals too early.
parent f405fb59
......@@ -198,6 +198,14 @@ checkPat e [] = case e of
in
returnP (SigPatIn e t')
-- translate out NegApps of literals in patterns.
-- NB. negative primitive literals are already handled by
-- RdrHsSyn.mkHsNegApp
NegApp (HsOverLit (HsIntegral i n)) _
-> returnP (NPatIn (HsIntegral (-i) n))
NegApp (HsOverLit (HsFractional f n)) _
-> returnP (NPatIn (HsFractional (-f) n))
OpApp (HsVar n) (HsVar plus) _ (HsOverLit lit@(HsIntegral _ _))
| plus == plus_RDR
-> returnP (mkNPlusKPat n lit)
......
......@@ -237,21 +237,11 @@ mkHsNegApp :: RdrNameHsExpr -> RdrNameHsExpr
-- If the type checker sees (negate 3#) it will barf, because negate
-- can't take an unboxed arg. But that is exactly what it will see when
-- we write "-3#". So we have to do the negation right now!
--
-- We also do the same service for boxed literals, because this function
-- is also used for patterns (which, remember, are parsed as expressions)
-- and pattern don't have negation in them.
--
-- Finally, it's important to represent minBound as minBound, and not
-- as (negate (-minBound)), becuase the latter is out of range.
mkHsNegApp (HsLit (HsIntPrim i)) = HsLit (HsIntPrim (-i))
mkHsNegApp (HsLit (HsFloatPrim i)) = HsLit (HsFloatPrim (-i))
mkHsNegApp (HsLit (HsDoublePrim i)) = HsLit (HsDoublePrim (-i))
mkHsNegApp (HsOverLit (HsIntegral i n)) = HsOverLit (HsIntegral (-i) n)
mkHsNegApp (HsOverLit (HsFractional f n)) = HsOverLit (HsFractional (-f) n)
mkHsNegApp expr = NegApp expr negateName
mkHsNegApp expr = NegApp expr negateName
\end{code}
A useful function for building @OpApps@. The operator is always a
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment