-- The OccName type
OccName(..),
- pprOccName, pprSymOcc, pprNonSymOcc, occNameString, occNameFlavour, isTvOcc,
+ pprOccName, pprSymOcc, pprNonSymOcc, occNameString, occNameFlavour,
+ isTvOcc, isTCOcc, isVarOcc, prefixOccName,
quoteInText, parenInCode,
-- The Name type
-- Sets of Names
NameSet(..),
emptyNameSet, unitNameSet, mkNameSet, unionNameSets, unionManyNameSets,
- minusNameSet, elemNameSet, nameSetToList, addListToNameSet,
+ minusNameSet, elemNameSet, nameSetToList, addListToNameSet, isEmptyNameSet,
-- Misc
DefnInfo(..),
import Lex ( isLexSym, isLexConId )
import SrcLoc ( noSrcLoc, SrcLoc )
import Unique ( pprUnique, showUnique, Unique )
-import UniqSet ( UniqSet(..), emptyUniqSet, unitUniqSet, unionUniqSets, uniqSetToList,
+import UniqSet ( UniqSet(..), emptyUniqSet, unitUniqSet, unionUniqSets, uniqSetToList, isEmptyUniqSet,
unionManyUniqSets, minusUniqSet, mkUniqSet, elementOfUniqSet, addListToUniqSet )
import UniqFM ( UniqFM )
import Util ( cmpPString, panic, assertPanic {-, pprTrace ToDo:rm-} )
occNameString (TvOcc s) = s
occNameString (TCOcc s) = s
+prefixOccName :: FAST_STRING -> OccName -> OccName
+prefixOccName prefix (VarOcc s) = VarOcc (prefix _APPEND_ s)
+prefixOccName prefix (TvOcc s) = TvOcc (prefix _APPEND_ s)
+prefixOccName prefix (TCOcc s) = TCOcc (prefix _APPEND_ s)
+
-- occNameFlavour is used only to generate good error messages, so it doesn't matter
-- that the VarOcc case isn't mega-efficient. We could have different Occ constructors for
-- data constructors and values, but that makes everything else a bit more complicated.
occNameFlavour (TvOcc s) = "type variable"
occNameFlavour (TCOcc s) = "type constructor or class"
-isTvOcc :: OccName -> Bool
+isVarOcc, isTCOcc, isTvOcc :: OccName -> Bool
+isVarOcc (VarOcc s) = True
+isVarOcc other = False
+
isTvOcc (TvOcc s) = True
isTvOcc other = False
+isTCOcc (TCOcc s) = True
+isTCOcc other = False
+
+
instance Eq OccName where
a == b = case (a `cmp` b) of { EQ_ -> True; _ -> False }
a /= b = case (a `cmp` b) of { EQ_ -> False; _ -> True }
setNameVisibility mod name = name
all_toplev_ids_visible = not opt_OmitInterfacePragmas || -- Pragmas can make them visible
- opt_EnsureSplittableC -- Splitting requires visiblilty
+ opt_EnsureSplittableC -- Splitting requires visiblilty
+
\end{code}
%************************************************************************
ppr sty name@(Global u m n _ _) = ppBesides [pp_name, pp_debug sty name]
where
pp_name | codeStyle sty = identToC qual_name
- | otherwise = ppPStr qual_name
- qual_name = m _APPEND_ SLIT(".") _APPEND_ occNameString n
+ | otherwise = ppBesides[ ppPStr m, ppChar '.', ppPStr pk_n]
+ pk_n = occNameString n
+ qual_name = m _APPEND_ SLIT(".") _APPEND_ pk_n
-pp_debug PprDebug (Global uniq m n _ prov) = ppBesides [ppStr "{-", pprUnique uniq, ppStr ",",
+pp_debug PprDebug (Global uniq m n _ prov) = ppBesides [ppStr "{-", pprUnique uniq, ppChar ',',
pp_prov prov, ppStr "-}"]
where
- pp_prov (LocalDef _ _) = ppChar 'l'
+ pp_prov (LocalDef Exported _) = ppChar 'x'
+ pp_prov (LocalDef NotExported _) = ppChar 'l'
pp_prov (Imported _ _) = ppChar 'i'
pp_prov Implicit = ppChar 'p'
pp_debug other name = ppNil
pprProvenance :: PprStyle -> Provenance -> Pretty
pprProvenance sty (Imported mod loc)
- = ppSep [ppStr "Imported from", pprModule sty mod, ppStr "at", ppr sty loc]
+ = ppSep [ppPStr SLIT("Imported from"), pprModule sty mod, ppPStr SLIT("at"), ppr sty loc]
pprProvenance sty (LocalDef _ loc)
- = ppSep [ppStr "Defined at", ppr sty loc]
+ = ppSep [ppPStr SLIT("Defined at"), ppr sty loc]
pprProvenance sty Implicit
= panic "pprNameProvenance: Implicit"
\end{code}
minusNameSet :: NameSet -> NameSet -> NameSet
elemNameSet :: Name -> NameSet -> Bool
nameSetToList :: NameSet -> [Name]
+isEmptyNameSet :: NameSet -> Bool
+isEmptyNameSet = isEmptyUniqSet
emptyNameSet = emptyUniqSet
unitNameSet = unitUniqSet
mkNameSet = mkUniqSet