[project @ 2000-09-07 16:25:32 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / Var.lhs
index 489e42a..793cfc9 100644 (file)
@@ -1,15 +1,14 @@
-s%
+%
 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
 %
 \section{@Vars@: Variables}
 
 \begin{code}
 module Var (
-       Var, IdOrTyVar, VarDetails,             -- Abstract
+       Var, VarDetails,                -- Abstract
        varName, varUnique, varInfo, varType,
        setVarName, setVarUnique, setVarType, setVarOcc,
 
-
        -- TyVars
        TyVar,
        tyVarName, tyVarKind,
@@ -61,8 +60,6 @@ strictness).  The essential info about different kinds of @Vars@ is
 in its @VarDetails@.
 
 \begin{code}
-type IdOrTyVar = Var
-
 data Var
   = Var {
        varName    :: Name,
@@ -159,9 +156,7 @@ mkTyVar name kind = Var { varName    = name
                        , realUnique = getKey (nameUnique name)
                        , varType    = kind
                        , varDetails = TyVar
-#ifdef DEBUG
-                       , varInfo = pprPanic "looking at IdInfo of a tyvar" (ppr name)
-#endif
+                       , varInfo    = pprPanic "mkTyVar" (ppr name)
                        }
 
 mkSysTyVar :: Unique -> Kind -> TyVar
@@ -169,28 +164,25 @@ mkSysTyVar uniq kind = Var { varName    = name
                           , realUnique = getKey uniq
                           , varType    = kind
                           , varDetails = TyVar
-#ifdef DEBUG
-                          , varInfo = pprPanic "mkSysTyVar" (ppr name)
-#endif
+                          , varInfo    = pprPanic "mkSysTyVar" (ppr name)
                           }
                     where
                       name = mkSysLocalName uniq SLIT("t")
 
 newMutTyVar :: Name -> Kind -> IO TyVar
-newMutTyVar name kind = 
-  do loc <- newIORef Nothing
-     return (Var { varName = name, 
-                  realUnique = getKey (nameUnique name),
-                  varType = kind, 
-                  varDetails = MutTyVar loc False})
+newMutTyVar name kind = newTyVar name kind False
 
 newSigTyVar :: Name -> Kind -> IO TyVar
-newSigTyVar name kind = 
-  do loc <- newIORef Nothing
-     return (Var { varName = name, 
-                  realUnique = getKey (nameUnique name),
-                  varType = kind, 
-                  varDetails = MutTyVar loc True})
+newSigTyVar name kind = newTyVar name kind True
+
+newTyVar name kind is_sig
+ = do loc <- newIORef Nothing
+      return (Var { varName    = name
+                 , realUnique = getKey (nameUnique name)
+                 , varType    = kind
+                 , varDetails = MutTyVar loc is_sig
+                 , varInfo    = pprPanic "newMutTyVar" (ppr name)
+                 })
 
 readMutTyVar :: TyVar -> IO (Maybe Type)
 readMutTyVar (Var {varDetails = MutTyVar loc _}) = readIORef loc
@@ -229,18 +221,20 @@ type UVar = Var
 
 \begin{code}
 mkUVar :: Unique -> UVar
-mkUVar unique = Var { varName    = mkSysLocalName unique SLIT("u"),
-                     realUnique = getKey unique,
-                     varDetails = UVar }
+mkUVar unique = Var { varName    = name
+                   , realUnique = getKey unique
+                   , varDetails = UVar
+                   , varType    = pprPanic "mkUVar (varType)" (ppr name)
+                   , varInfo    = pprPanic "mkUVar (varInfo)" (ppr name)
+                   }
+             where name = mkSysLocalName unique SLIT("u")
 
 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
+                      , varType    = pprPanic "mkNamedUVar (varType)" (ppr name)
+                      , varInfo    = pprPanic "mkNamedUVar (varInfo)" (ppr name)
                       }
 \end{code}