[project @ 2000-04-14 12:49:39 by simonmar]
[ghc-hetmet.git] / ghc / compiler / basicTypes / Var.lhs
index d80eab6..30b4aff 100644 (file)
@@ -5,7 +5,7 @@ s%
 
 \begin{code}
 module Var (
-       Var, IdOrTyVar, VarDetails,             -- Abstract
+       Var, VarDetails,                -- Abstract
        varName, varUnique, varInfo, varType,
        setVarName, setVarUnique, setVarType, setVarOcc,
 
@@ -21,19 +21,19 @@ module Var (
         -- UVars
         UVar,
         isUVar,
-        mkUVar,
+        mkUVar, mkNamedUVar,
 
        -- Ids
        Id, DictId,
        idName, idType, idUnique, idInfo, modifyIdInfo, maybeModifyIdInfo,
-       setIdName, setIdUnique, setIdInfo, lazySetIdInfo,
+       setIdName, setIdUnique, setIdInfo, lazySetIdInfo, zapIdInfo,
        mkIdVar, isId, externallyVisibleId
     ) where
 
 #include "HsVersions.h"
 
-import {-# SOURCE #-}  Type( Type, Kind )
-import {-# SOURCE #-}  IdInfo( IdInfo, seqIdInfo )
+import {-# SOURCE #-}  TypeRep( Type, Kind )
+import {-# SOURCE #-}  IdInfo( IdInfo, seqIdInfo, vanillaIdInfo )
 
 import Unique          ( Unique, Uniquable(..), mkUniqueGrimily, getKey )
 import Name            ( Name, OccName, NamedThing(..),
@@ -61,8 +61,6 @@ strictness).  The essential info about different kinds of @Vars@ is
 in its @VarDetails@.
 
 \begin{code}
-type IdOrTyVar = Var
-
 data Var
   = Var {
        varName    :: Name,
@@ -232,6 +230,16 @@ mkUVar :: Unique -> UVar
 mkUVar unique = Var { varName    = mkSysLocalName unique SLIT("u"),
                      realUnique = getKey unique,
                      varDetails = UVar }
+
+mkNamedUVar :: Name -> UVar
+mkNamedUVar name = Var { varName    = name
+                      , realUnique = getKey (nameUnique name)
+                      , varDetails = UVar
+#ifdef DEBUG
+                      , varType = pprPanic "looking at Type of a uvar" (ppr name)
+                      , varInfo = pprPanic "looking at IdInfo of a uvar" (ppr name)
+#endif
+                      }
 \end{code}
 
 \begin{code}
@@ -274,6 +282,9 @@ setIdInfo :: Id -> IdInfo -> Id
 setIdInfo var info = seqIdInfo info `seq` var {varInfo = info}
        -- Try to avoid spack leaks by seq'ing
 
+zapIdInfo :: Id -> Id
+zapIdInfo var = var {varInfo = vanillaIdInfo}
+
 modifyIdInfo :: (IdInfo -> IdInfo) -> Id -> Id
 modifyIdInfo fn var@(Var {varInfo = info})
   = seqIdInfo new_info `seq` var {varInfo = new_info}