\begin{code}
module Var (
Var,
- varName, varUnique,
+ varName, varUnique, varType,
setVarName, setVarUnique,
-- TyVars
realUnique :: FastInt, -- Key for fast comparison
-- Identical to the Unique in the name,
-- cached here for speed
- tyVarKind :: Kind,
+ varType :: Kind,
isCoercionVar :: Bool
}
-- inference, as well
varName :: !Name,
realUnique :: FastInt,
- tyVarKind :: Kind,
+ varType :: Kind,
tcTyVarDetails :: TcTyVarDetails }
| GlobalId { -- Used for imported Ids, dict selectors etc
-- See Note [GlobalId/LocalId] below
varName :: !Name, -- Always an External or WiredIn Name
realUnique :: FastInt,
- idType :: Type,
- idInfo :: IdInfo,
+ varType :: Type,
+ idInfo_ :: IdInfo,
gblDetails :: GlobalIdDetails }
| LocalId { -- Used for locally-defined Ids
-- See Note [GlobalId/LocalId] below
varName :: !Name,
realUnique :: FastInt,
- idType :: Type,
- idInfo :: IdInfo,
+ varType :: Type,
+ idInfo_ :: IdInfo,
lclDetails :: LocalIdDetails }
data LocalIdDetails
type TyVar = Var
tyVarName = varName
+tyVarKind = varType
setTyVarUnique = setVarUnique
setTyVarName = setVarName
setTyVarKind :: TyVar -> Kind -> TyVar
-setTyVarKind tv k = tv {tyVarKind = k}
+setTyVarKind tv k = tv {varType = k}
\end{code}
\begin{code}
mkTyVar name kind = ASSERT( not (isCoercionKind kind ) )
TyVar { varName = name
, realUnique = getKey# (nameUnique name)
- , tyVarKind = kind
+ , varType = kind
, isCoercionVar = False
}
= ASSERT( not (isCoercionKind kind) )
TcTyVar { varName = name,
realUnique = getKey# (nameUnique name),
- tyVarKind = kind,
+ varType = kind,
tcTyVarDetails = details
}
\end{code}
mkCoVar name kind = ASSERT( isCoercionKind kind )
TyVar { varName = name
, realUnique = getKey# (nameUnique name)
- , tyVarKind = kind
+ , varType = kind
, isCoercionVar = True
}
= ASSERT( isCoercionKind kind )
TyVar { varName = mkSysTvName wild_uniq FSLIT("co_wild"),
realUnique = _ILIT(1),
- tyVarKind = kind,
+ varType = kind,
isCoercionVar = True }
where
wild_uniq = mkBuiltinUnique 1
\begin{code}
idName = varName
idUnique = varUnique
+idType = varType
setIdUnique :: Id -> Unique -> Id
setIdUnique = setVarUnique
setIdName = setVarName
setIdType :: Id -> Type -> Id
-setIdType id ty = id {idType = ty}
+setIdType id ty = id {varType = ty}
setIdExported :: Id -> Id
-- Can be called on GlobalIds, such as data cons and class ops,
-- If it's a local, make it global
globaliseId details id = GlobalId { varName = varName id,
realUnique = realUnique id,
- idType = idType id,
- idInfo = idInfo id,
+ varType = varType id,
+ idInfo_ = idInfo id,
gblDetails = details }
+idInfo :: Id -> IdInfo
+idInfo (GlobalId {idInfo_ = info}) = info
+idInfo (LocalId {idInfo_ = info}) = info
+idInfo other_var = pprPanic "idInfo" (ppr other_var)
+
lazySetIdInfo :: Id -> IdInfo -> Id
-lazySetIdInfo id info = id {idInfo = info}
+lazySetIdInfo id info = id {idInfo_ = info}
setIdInfo :: Id -> IdInfo -> Id
-setIdInfo id info = seqIdInfo info `seq` id {idInfo = info}
+setIdInfo id info = seqIdInfo info `seq` id {idInfo_ = info}
-- Try to avoid spack leaks by seq'ing
modifyIdInfo :: (IdInfo -> IdInfo) -> Id -> Id
modifyIdInfo fn id
- = seqIdInfo new_info `seq` id {idInfo = new_info}
+ = seqIdInfo new_info `seq` id {idInfo_ = new_info}
where
new_info = fn (idInfo id)
-- maybeModifyIdInfo tries to avoid unnecesary thrashing
maybeModifyIdInfo :: Maybe IdInfo -> Id -> Id
-maybeModifyIdInfo (Just new_info) id = id {idInfo = new_info}
+maybeModifyIdInfo (Just new_info) id = id {idInfo_ = new_info}
maybeModifyIdInfo Nothing id = id
\end{code}
mkGlobalId details name ty info
= GlobalId { varName = name,
realUnique = getKey# (nameUnique name), -- Cache the unique
- idType = ty,
+ varType = ty,
gblDetails = details,
- idInfo = info }
+ idInfo_ = info }
mk_local_id :: Name -> Type -> LocalIdDetails -> IdInfo -> Id
mk_local_id name ty details info
= LocalId { varName = name,
realUnique = getKey# (nameUnique name), -- Cache the unique
- idType = ty,
+ varType = ty,
lclDetails = details,
- idInfo = info }
+ idInfo_ = info }
mkLocalId :: Name -> Type -> IdInfo -> Id
mkLocalId name ty info = mk_local_id name ty NotExported info