Add ASSERTs to all calls of nameModule
[ghc-hetmet.git] / compiler / deSugar / DsMeta.hs
index ca4fae4..554a945 100644 (file)
@@ -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)