X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FhsSyn%2FHsLit.lhs;h=0d9009829b6314261ba3c6faa245a7b34c0f3185;hb=4e1c7e2de7f7a7983003f19a85363a1e1f0170cc;hp=39d737d9e96e45ebd80d30f99405cc07d37c850c;hpb=ab46fd8e68f10b6162e77cfc0b216510d9b1d933;p=ghc-hetmet.git diff --git a/ghc/compiler/hsSyn/HsLit.lhs b/ghc/compiler/hsSyn/HsLit.lhs index 39d737d..0d90098 100644 --- a/ghc/compiler/hsSyn/HsLit.lhs +++ b/ghc/compiler/hsSyn/HsLit.lhs @@ -9,8 +9,9 @@ module HsLit where #include "HsVersions.h" import Type ( Type ) -import HsTypes ( PostTcType ) +import HsTypes ( SyntaxName, PostTcType ) import Outputable +import FastString import Ratio ( Rational ) \end{code} @@ -26,16 +27,18 @@ import Ratio ( Rational ) data HsLit = HsChar Int -- Character | HsCharPrim Int -- Unboxed character - | HsString FAST_STRING -- String - | HsStringPrim FAST_STRING -- Packed string + | HsString FastString -- String + | HsStringPrim FastString -- Packed string | HsInt Integer -- Genuinely an Int; arises from TcGenDeriv, -- and from TRANSLATION | HsIntPrim Integer -- Unboxed Int | HsInteger Integer -- Genuinely an integer; arises only from TRANSLATION + -- (overloaded literals are done with HsOverLit) | HsRat Rational Type -- Genuinely a rational; arises only from TRANSLATION + -- (overloaded literals are done with HsOverLit) | HsFloatPrim Rational -- Unboxed Float | HsDoublePrim Rational -- Unboxed Double - | HsLitLit FAST_STRING PostTcType -- to pass ``literal literals'' through to C + | HsLitLit FastString PostTcType -- to pass ``literal literals'' through to C -- also: "overloaded" type; but -- must resolve to boxed-primitive! -- The Type in HsLitLit is needed when desuaring; @@ -55,19 +58,21 @@ instance Eq HsLit where (HsLitLit x1 _) == (HsLitLit x2 _) = x1==x2 lit1 == lit2 = False -data HsOverLit -- An overloaded literal - = HsIntegral Integer -- Integer-looking literals; - | HsFractional Rational -- Frac-looking literals +data HsOverLit -- An overloaded literal + = HsIntegral Integer SyntaxName -- Integer-looking literals; + -- The name is fromInteger + | HsFractional Rational SyntaxName -- Frac-looking literals + -- The name is fromRational instance Eq HsOverLit where - (HsIntegral i1) == (HsIntegral i2) = i1 == i2 - (HsFractional f1) == (HsFractional f2) = f1 == f2 + (HsIntegral i1 _) == (HsIntegral i2 _) = i1 == i2 + (HsFractional f1 _) == (HsFractional f2 _) = f1 == f2 instance Ord HsOverLit where - compare (HsIntegral i1) (HsIntegral i2) = i1 `compare` i2 - compare (HsIntegral _) (HsFractional _) = LT - compare (HsFractional f1) (HsFractional f2) = f1 `compare` f2 - compare (HsFractional f1) (HsIntegral _) = GT + compare (HsIntegral i1 _) (HsIntegral i2 _) = i1 `compare` i2 + compare (HsIntegral _ _) (HsFractional _ _) = LT + compare (HsFractional f1 _) (HsFractional f2 _) = f1 `compare` f2 + compare (HsFractional f1 _) (HsIntegral _ _) = GT \end{code} \begin{code} @@ -83,11 +88,11 @@ instance Outputable HsLit where ppr (HsFloatPrim f) = rational f <> char '#' ppr (HsDoublePrim d) = rational d <> text "##" ppr (HsIntPrim i) = integer i <> char '#' - ppr (HsLitLit s _) = hcat [text "``", ptext s, text "''"] + ppr (HsLitLit s _) = hcat [text "``", ftext s, text "''"] instance Outputable HsOverLit where - ppr (HsIntegral i) = integer i - ppr (HsFractional f) = rational f + ppr (HsIntegral i _) = integer i + ppr (HsFractional f _) = rational f \end{code}