[project @ 2000-11-14 10:46:39 by simonpj]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
index 4b10236..d339e5d 100644 (file)
@@ -37,8 +37,8 @@ module PrelNames (
 #include "HsVersions.h"
 
 import Module    ( ModuleName, mkPrelModule, mkModuleName )
-import OccName   ( NameSpace, UserFS, varName, dataName, tcName, clsName )
-import RdrName   ( RdrName, mkOrig )
+import OccName   ( NameSpace, UserFS, varName, dataName, tcName, clsName, mkKindOccFS )
+import RdrName   ( RdrName, mkOrig, mkUnqual )
 import UniqFM
 import Unique    ( Unique, Uniquable(..), hasKey,
                    mkPreludeMiscIdUnique, mkPreludeDataConUnique,
@@ -48,7 +48,7 @@ import BasicTypes ( Boxity(..), Arity )
 import UniqFM    ( UniqFM, listToUFM )
 import Name      ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
 import RdrName    ( rdrNameOcc )
-import SrcLoc     ( noSrcLoc )
+import SrcLoc     ( builtinSrcLoc )
 import Util      ( nOfThem )
 import Panic     ( panic )
 \end{code}
@@ -123,7 +123,7 @@ knownKeyNames
        fromRationalName,
     
        deRefStablePtrName,
-       makeStablePtrName,
+       newStablePtrName,
        bindIOName,
        returnIOName,
 
@@ -241,6 +241,21 @@ mkTupConRdrName space boxity arity   = case mkTupNameStr boxity arity of
 
 %************************************************************************
 %*                                                                     *
+\subsection{Unqualified RdrNames}
+%*                                                                     *
+%************************************************************************
+
+\begin{code}
+main_RDR_Unqual :: RdrName
+main_RDR_Unqual = mkUnqual varName SLIT("main")
+-- Don't get a RdrName from PrelNames.mainName, because nameRdrName
+-- gets an Orig RdrName, and we want a Qual or Unqual one.  An Unqual
+-- one will do fine.
+\end{code}
+
+
+%************************************************************************
+%*                                                                     *
 \subsection{Commonly-used RdrNames}
 %*                                                                     *
 %************************************************************************
@@ -253,9 +268,41 @@ and it's convenient to write them all down in one place.
 mainName = varQual mAIN_Name SLIT("main") mainKey
 
 -- Stuff from PrelGHC
-funTyConName        = tcQual  pREL_GHC_Name SLIT("(->)")  funTyConKey
-cCallableClassName   = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
-cReturnableClassName = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
+usOnceTyConName  = kindQual SLIT(".") usOnceTyConKey
+usManyTyConName  = kindQual SLIT("!") usManyTyConKey
+superKindName    = kindQual SLIT("KX") kindConKey
+superBoxityName  = kindQual SLIT("BX") boxityConKey
+boxedConName     = kindQual SLIT("*") boxedConKey
+unboxedConName   = kindQual SLIT("#") unboxedConKey
+openKindConName  = kindQual SLIT("?") anyBoxConKey
+usageKindConName = kindQual SLIT("$") usageConKey
+typeConName     = kindQual SLIT("Type") typeConKey
+
+funTyConName                 = tcQual  pREL_GHC_Name SLIT("(->)")  funTyConKey
+charPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Char#") charPrimTyConKey 
+intPrimTyConName             = tcQual  pREL_GHC_Name SLIT("Int#") intPrimTyConKey 
+int64PrimTyConName           = tcQual  pREL_GHC_Name SLIT("Int64#") int64PrimTyConKey 
+wordPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Word#") wordPrimTyConKey 
+word64PrimTyConName          = tcQual  pREL_GHC_Name SLIT("Word64#") word64PrimTyConKey 
+addrPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Addr#") addrPrimTyConKey 
+floatPrimTyConName           = tcQual  pREL_GHC_Name SLIT("Float#") floatPrimTyConKey 
+doublePrimTyConName          = tcQual  pREL_GHC_Name SLIT("Double#") doublePrimTyConKey 
+statePrimTyConName           = tcQual  pREL_GHC_Name SLIT("State#") statePrimTyConKey 
+realWorldTyConName           = tcQual  pREL_GHC_Name SLIT("RealWorld") realWorldTyConKey 
+arrayPrimTyConName           = tcQual  pREL_GHC_Name SLIT("Array#") arrayPrimTyConKey 
+byteArrayPrimTyConName       = tcQual  pREL_GHC_Name SLIT("ByteArray#") byteArrayPrimTyConKey 
+mutableArrayPrimTyConName     = tcQual  pREL_GHC_Name SLIT("MutableArray#") mutableArrayPrimTyConKey 
+mutableByteArrayPrimTyConName = tcQual  pREL_GHC_Name SLIT("MutableByteArray#") mutableByteArrayPrimTyConKey 
+mutVarPrimTyConName          = tcQual  pREL_GHC_Name SLIT("MutVar#") mutVarPrimTyConKey 
+mVarPrimTyConName            = tcQual  pREL_GHC_Name SLIT("MVar#") mVarPrimTyConKey 
+stablePtrPrimTyConName        = tcQual  pREL_GHC_Name SLIT("StablePtr#") stablePtrPrimTyConKey 
+stableNamePrimTyConName       = tcQual  pREL_GHC_Name SLIT("StableName#") stableNamePrimTyConKey 
+foreignObjPrimTyConName       = tcQual  pREL_GHC_Name SLIT("ForeignObj#") foreignObjPrimTyConKey 
+bcoPrimTyConName             = tcQual  pREL_GHC_Name SLIT("BCO#") bcoPrimTyConKey 
+weakPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Weak#") weakPrimTyConKey 
+threadIdPrimTyConName                = tcQual  pREL_GHC_Name SLIT("ThreadId#") threadIdPrimTyConKey 
+cCallableClassName           = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
+cReturnableClassName         = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
 
 -- PrelBase data types and constructors
 charTyConName    = tcQual   pREL_BASE_Name SLIT("Char") charTyConKey
@@ -395,11 +442,10 @@ mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  SLIT("MutableByteArray") m
 -- Forign objects and weak pointers
 foreignObjTyConName   = tcQual   pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjTyConKey
 foreignObjDataConName = dataQual pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjDataConKey
-bcoPrimTyConName      = tcQual   pREL_BASE_Name SLIT("BCO#") bcoPrimTyConKey
 stablePtrTyConName    = tcQual   pREL_STABLE_Name SLIT("StablePtr") stablePtrTyConKey
 stablePtrDataConName  = dataQual pREL_STABLE_Name SLIT("StablePtr") stablePtrDataConKey
 deRefStablePtrName    = varQual  pREL_STABLE_Name SLIT("deRefStablePtr") deRefStablePtrIdKey
-makeStablePtrName     = varQual  pREL_STABLE_Name SLIT("makeStablePtr") makeStablePtrIdKey
+newStablePtrName      = varQual  pREL_STABLE_Name SLIT("newStablePtr") newStablePtrIdKey
 
 errorName         = varQual pREL_ERR_Name SLIT("error") errorIdKey
 assertName         = varQual pREL_GHC_Name SLIT("assert") assertIdKey
@@ -514,10 +560,9 @@ unpackCString_RDR          = nameRdrName unpackCStringName
 unpackCStringFoldr_RDR         = nameRdrName unpackCStringFoldrName
 unpackCStringUtf8_RDR          = nameRdrName unpackCStringUtf8Name
 deRefStablePtr_RDR     = nameRdrName deRefStablePtrName
-makeStablePtr_RDR      = nameRdrName makeStablePtrName
+newStablePtr_RDR       = nameRdrName newStablePtrName
 bindIO_RDR             = nameRdrName bindIOName
 returnIO_RDR           = nameRdrName returnIOName
-main_RDR               = nameRdrName mainName
 fromInteger_RDR                = nameRdrName fromIntegerName
 fromRational_RDR       = nameRdrName fromRationalName
 minus_RDR              = nameRdrName minusName
@@ -537,6 +582,11 @@ dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
 tcQual   mod str uq = mkKnownKeyGlobal (tcQual_RDR   mod str) uq
 clsQual  mod str uq = mkKnownKeyGlobal (clsQual_RDR  mod str) uq
 
+kindQual str uq = mkLocalName uq (mkKindOccFS tcName str) builtinSrcLoc
+       -- Kinds are not z-encoded in interface file, hence mkKindOccFS
+       -- And they don't come from any particular module; indeed we always
+       -- want to print them unqualified.  Hence the LocalName
+
 varQual_RDR  mod str = mkOrig varName  mod str
 tcQual_RDR   mod str = mkOrig tcName   mod str
 clsQual_RDR  mod str = mkOrig clsName  mod str
@@ -636,10 +686,15 @@ typeConKey                                = mkPreludeTyConUnique 69
 threadIdPrimTyConKey                   = mkPreludeTyConUnique 70
 bcoPrimTyConKey                                = mkPreludeTyConUnique 71
 
+-- Usage type constructors
+usageConKey                            = mkPreludeTyConUnique 72
+usOnceTyConKey                         = mkPreludeTyConUnique 73
+usManyTyConKey                         = mkPreludeTyConUnique 74
+
 -- Generic Type Constructors
-crossTyConKey                          = mkPreludeTyConUnique 72
-plusTyConKey                           = mkPreludeTyConUnique 73
-genUnitTyConKey                                = mkPreludeTyConUnique 74
+crossTyConKey                          = mkPreludeTyConUnique 75
+plusTyConKey                           = mkPreludeTyConUnique 76
+genUnitTyConKey                                = mkPreludeTyConUnique 77
 \end{code}
 
 %************************************************************************
@@ -717,7 +772,7 @@ zipIdKey                  = mkPreludeMiscIdUnique 35
 bindIOIdKey                  = mkPreludeMiscIdUnique 36
 returnIOIdKey                = mkPreludeMiscIdUnique 37
 deRefStablePtrIdKey          = mkPreludeMiscIdUnique 38
-makeStablePtrIdKey           = mkPreludeMiscIdUnique 39
+newStablePtrIdKey            = mkPreludeMiscIdUnique 39
 getTagIdKey                  = mkPreludeMiscIdUnique 40
 plusIntegerIdKey             = mkPreludeMiscIdUnique 41
 timesIntegerIdKey            = mkPreludeMiscIdUnique 42
@@ -905,7 +960,7 @@ noDictClassKeys     -- These classes are used only for type annotations;
 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
 -- during compiler debugging.
 mkUnboundName :: RdrName -> Name
-mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
+mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc
 
 isUnboundName :: Name -> Bool
 isUnboundName name = name `hasKey` unboundKey