X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FhsSyn%2FHsLit.lhs;h=98406478c903ce4a9ef5d24cb4d53d8021abfa00;hb=dfec17bf9c379ff1f899deb2cb39692d3cd5c418;hp=2675810465a228eb14fc6714c65c5eceff7cae07;hpb=b085ee40c7f265a5977ea6ec1c415e573be5ff8c;p=ghc-hetmet.git diff --git a/ghc/compiler/hsSyn/HsLit.lhs b/ghc/compiler/hsSyn/HsLit.lhs index 2675810..9840647 100644 --- a/ghc/compiler/hsSyn/HsLit.lhs +++ b/ghc/compiler/hsSyn/HsLit.lhs @@ -9,8 +9,7 @@ module HsLit where #include "HsVersions.h" import Type ( Type ) -import Name ( Name ) -import HsTypes ( PostTcType ) +import HsTypes ( SyntaxName ) import Outputable import FastString import Ratio ( Rational ) @@ -26,22 +25,19 @@ import Ratio ( Rational ) \begin{code} data HsLit - = HsChar Int -- Character - | HsCharPrim Int -- Unboxed character + = HsChar Char -- Character + | HsCharPrim Char -- Unboxed character | 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 + | HsInteger Integer Type -- 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 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; - -- before the typechecker it's just an error value instance Eq HsLit where (HsChar x1) == (HsChar x2) = x1==x2 @@ -50,22 +46,24 @@ instance Eq HsLit where (HsStringPrim x1) == (HsStringPrim x2) = x1==x2 (HsInt x1) == (HsInt x2) = x1==x2 (HsIntPrim x1) == (HsIntPrim x2) = x1==x2 - (HsInteger x1) == (HsInteger x2) = x1==x2 + (HsInteger x1 _) == (HsInteger x2 _) = x1==x2 (HsRat x1 _) == (HsRat x2 _) = x1==x2 (HsFloatPrim x1) == (HsFloatPrim x2) = x1==x2 (HsDoublePrim x1) == (HsDoublePrim x2) = x1==x2 - (HsLitLit x1 _) == (HsLitLit x2 _) = x1==x2 lit1 == lit2 = False data HsOverLit -- An overloaded literal - = HsIntegral Integer Name -- Integer-looking literals; + = HsIntegral Integer SyntaxName -- Integer-looking literals; -- The name is fromInteger - | HsFractional Rational Name -- Frac-looking literals + | HsFractional Rational SyntaxName -- Frac-looking literals -- The name is fromRational +-- Comparison operations are needed when grouping literals +-- for compiling pattern-matching (module MatchLit) instance Eq HsOverLit where (HsIntegral i1 _) == (HsIntegral i2 _) = i1 == i2 (HsFractional f1 _) == (HsFractional f2 _) = f1 == f2 + l1 == l2 = False instance Ord HsOverLit where compare (HsIntegral i1 _) (HsIntegral i2 _) = i1 `compare` i2 @@ -82,16 +80,13 @@ instance Outputable HsLit where ppr (HsString s) = pprHsString s ppr (HsStringPrim s) = pprHsString s <> char '#' ppr (HsInt i) = integer i - ppr (HsInteger i) = integer i + ppr (HsInteger i _) = integer i ppr (HsRat f _) = rational f ppr (HsFloatPrim f) = rational f <> char '#' ppr (HsDoublePrim d) = rational d <> text "##" ppr (HsIntPrim i) = integer i <> char '#' - ppr (HsLitLit s _) = hcat [text "``", ftext s, text "''"] instance Outputable HsOverLit where ppr (HsIntegral i _) = integer i ppr (HsFractional f _) = rational f \end{code} - -