X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FdeSugar%2FDsMeta.hs;h=554a9453eab8336d26c3437dddf7fdb9081cbba9;hp=ca4fae42197c54c08a8bd4e394e493a3f4ef682a;hb=66579ff945831c5fc9a17c58c722ff01f2268d76;hpb=6eb5c1509c2fd796c135ae18b650ddd658c48624 diff --git a/compiler/deSugar/DsMeta.hs b/compiler/deSugar/DsMeta.hs index ca4fae4..554a945 100644 --- a/compiler/deSugar/DsMeta.hs +++ b/compiler/deSugar/DsMeta.hs @@ -19,6 +19,7 @@ -- any warnings in the module. See -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings -- for details +-- The kludge is only needed in this module because of trac #2267. module DsMeta( dsBracket, templateHaskellNames, qTyConName, nameTyConName, @@ -27,6 +28,8 @@ module DsMeta( dsBracket, quoteExpName, quotePatName ) where +#include "HsVersions.h" + import {-# SOURCE #-} DsExpr ( dsExpr ) import MatchLit @@ -52,6 +55,7 @@ import TcType import TyCon import TysWiredIn import CoreSyn +import MkCore import CoreUtils import SrcLoc import Unique @@ -947,7 +951,7 @@ globalVar name ; MkC uni <- coreIntLit (getKey (getUnique name)) ; rep2 mkNameLName [occ,uni] } where - mod = nameModule name + mod = ASSERT( isExternalName name) nameModule name name_mod = moduleNameString (moduleName mod) name_pkg = packageIdString (modulePackageId mod) name_occ = nameOccName name @@ -1248,7 +1252,7 @@ repNamedTyCon (MkC s) = rep2 conTName [s] repTupleTyCon :: Int -> DsM (Core TH.TypeQ) -- Note: not Core Int; it's easier to be direct here -repTupleTyCon i = rep2 tupleTName [mkIntExpr (fromIntegral i)] +repTupleTyCon i = rep2 tupleTName [mkIntExprInt i] repArrowTyCon :: DsM (Core TH.TypeQ) repArrowTyCon = rep2 arrowTName [] @@ -1293,15 +1297,19 @@ mk_rational :: Rational -> DsM HsLit mk_rational r = do rat_ty <- lookupType rationalTyConName return $ HsRat r rat_ty mk_string :: FastString -> DsM HsLit -mk_string s = do return $ HsString s +mk_string s = return $ HsString s repOverloadedLiteral :: HsOverLit Name -> DsM (Core TH.Lit) -repOverloadedLiteral (HsIntegral i _ _) = do { lit <- mk_integer i; repLiteral lit } -repOverloadedLiteral (HsFractional f _ _) = do { lit <- mk_rational f; repLiteral lit } -repOverloadedLiteral (HsIsString s _ _) = do { lit <- mk_string s; repLiteral lit } +repOverloadedLiteral (OverLit { ol_val = val}) + = do { lit <- mk_lit val; repLiteral lit } -- The type Rational will be in the environment, becuase -- the smart constructor 'TH.Syntax.rationalL' uses it in its type, -- and rationalL is sucked in when any TH stuff is used + +mk_lit :: OverLitVal -> DsM HsLit +mk_lit (HsIntegral i) = mk_integer i +mk_lit (HsFractional f) = mk_rational f +mk_lit (HsIsString s) = mk_string s --------------- Miscellaneous ------------------- @@ -1339,7 +1347,7 @@ coreStringLit :: String -> DsM (Core String) coreStringLit s = do { z <- mkStringExpr s; return(MkC z) } coreIntLit :: Int -> DsM (Core Int) -coreIntLit i = return (MkC (mkIntExpr (fromIntegral i))) +coreIntLit i = return (MkC (mkIntExprInt i)) coreVar :: Id -> Core TH.Name -- The Id has type Name coreVar id = MkC (Var id)