projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
More vectorisation-related OccNames
[ghc-hetmet.git]
/
compiler
/
basicTypes
/
OccName.lhs
diff --git
a/compiler/basicTypes/OccName.lhs
b/compiler/basicTypes/OccName.lhs
index
48137c6
..
644b59d
100644
(file)
--- a/
compiler/basicTypes/OccName.lhs
+++ b/
compiler/basicTypes/OccName.lhs
@@
-1,10
+1,8
@@
-{-% DrIFT (Automatic class derivations for Haskell) v1.1 %-}
%
%
+% (c) The University of Glasgow 2006
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
-\section[OccName]{@OccName@}
-
\begin{code}
module OccName (
-- * The NameSpace type; abstact
\begin{code}
module OccName (
-- * The NameSpace type; abstact
@@
-27,12
+25,15
@@
module OccName (
setOccNameSpace,
-- ** Derived OccNames
setOccNameSpace,
-- ** Derived OccNames
- mkDataConWrapperOcc, mkWorkerOcc, mkDefaultMethodOcc, mkDerivedTyConOcc,
- mkNewTyCoOcc,
+ mkDataConWrapperOcc, mkWorkerOcc, mkDefaultMethodOcc,
+ mkDerivedTyConOcc, mkNewTyCoOcc,
mkClassTyConOcc, mkClassDataConOcc, mkDictOcc, mkIPOcc,
mkSpecOcc, mkForeignExportOcc, mkGenOcc1, mkGenOcc2,
mkDataTOcc, mkDataCOcc, mkDataConWorkerOcc,
mkClassTyConOcc, mkClassDataConOcc, mkDictOcc, mkIPOcc,
mkSpecOcc, mkForeignExportOcc, mkGenOcc1, mkGenOcc2,
mkDataTOcc, mkDataCOcc, mkDataConWorkerOcc,
- mkSuperDictSelOcc, mkLocalOcc, mkMethodOcc,
+ mkSuperDictSelOcc, mkLocalOcc, mkMethodOcc, mkInstTyTcOcc,
+ mkInstTyCoOcc, mkEqPredCoOcc,
+ mkVectOcc, mkVectTyConOcc, mkVectDataConOcc, mkVectIsoOcc,
+ mkPArrayTyConOcc, mkPArrayDataConOcc,
-- ** Deconstruction
occNameFS, occNameString, occNameSpace,
-- ** Deconstruction
occNameFS, occNameString, occNameSpace,
@@
-44,7
+45,7
@@
module OccName (
-- The OccEnv type
OccEnv, emptyOccEnv, unitOccEnv, extendOccEnv, mapOccEnv,
-- The OccEnv type
OccEnv, emptyOccEnv, unitOccEnv, extendOccEnv, mapOccEnv,
- lookupOccEnv, mkOccEnv, extendOccEnvList, elemOccEnv,
+ lookupOccEnv, mkOccEnv, mkOccEnv_C, extendOccEnvList, elemOccEnv,
occEnvElts, foldOccEnv, plusOccEnv, plusOccEnv_C, extendOccEnv_C,
-- The OccSet type
occEnvElts, foldOccEnv, plusOccEnv, plusOccEnv_C, extendOccEnv_C,
-- The OccSet type
@@
-64,23
+65,21
@@
module OccName (
#include "HsVersions.h"
#include "HsVersions.h"
-import Util ( thenCmp )
-import Unique ( Unique, mkUnique, Uniquable(..) )
-import BasicTypes ( Boxity(..), Arity )
-import StaticFlags ( opt_PprStyle_Debug )
+import Util
+import Unique
+import BasicTypes
+import StaticFlags
import UniqFM
import UniqSet
import FastString
import Outputable
import Binary
import UniqFM
import UniqSet
import FastString
import Outputable
import Binary
-import GLAEXTS
-
-import Data.Char ( isUpper, isLower, ord )
+import GHC.Exts
+import Data.Char
-- Unicode TODO: put isSymbol in libcompat
#if __GLASGOW_HASKELL__ > 604
-- Unicode TODO: put isSymbol in libcompat
#if __GLASGOW_HASKELL__ > 604
-import Data.Char ( isSymbol )
#else
isSymbol = const False
#endif
#else
isSymbol = const False
#endif
@@
-94,8
+93,8
@@
isSymbol = const False
%************************************************************************
\begin{code}
%************************************************************************
\begin{code}
-data NameSpace = VarName -- Variables, including "source" data constructors
- | DataName -- "Real" data constructors
+data NameSpace = VarName -- Variables, including "real" data constructors
+ | DataName -- "Source" data constructors
| TvName -- Type variables
| TcClsName -- Type constructors and classes; Haskell has them
-- in the same name space for now.
| TvName -- Type variables
| TcClsName -- Type constructors and classes; Haskell has them
-- in the same name space for now.
@@
-178,8
+177,9
@@
instance Eq OccName where
(OccName sp1 s1) == (OccName sp2 s2) = s1 == s2 && sp1 == sp2
instance Ord OccName where
(OccName sp1 s1) == (OccName sp2 s2) = s1 == s2 && sp1 == sp2
instance Ord OccName where
- compare (OccName sp1 s1) (OccName sp2 s2) = (s1 `compare` s2) `thenCmp`
- (sp1 `compare` sp2)
+ -- Compares lexicographically, *not* by Unique of the string
+ compare (OccName sp1 s1) (OccName sp2 s2)
+ = (s1 `compare` s2) `thenCmp` (sp1 `compare` sp2)
\end{code}
\end{code}
@@
-261,6
+261,7
@@
extendOccEnv :: OccEnv a -> OccName -> a -> OccEnv a
extendOccEnvList :: OccEnv a -> [(OccName, a)] -> OccEnv a
lookupOccEnv :: OccEnv a -> OccName -> Maybe a
mkOccEnv :: [(OccName,a)] -> OccEnv a
extendOccEnvList :: OccEnv a -> [(OccName, a)] -> OccEnv a
lookupOccEnv :: OccEnv a -> OccName -> Maybe a
mkOccEnv :: [(OccName,a)] -> OccEnv a
+mkOccEnv_C :: (a -> a -> a) -> [(OccName,a)] -> OccEnv a
elemOccEnv :: OccName -> OccEnv a -> Bool
foldOccEnv :: (a -> b -> b) -> b -> OccEnv a -> b
occEnvElts :: OccEnv a -> [a]
elemOccEnv :: OccName -> OccEnv a -> Bool
foldOccEnv :: (a -> b -> b) -> b -> OccEnv a -> b
occEnvElts :: OccEnv a -> [a]
@@
-283,6
+284,8
@@
plusOccEnv_C = plusUFM_C
extendOccEnv_C = addToUFM_C
mapOccEnv = mapUFM
extendOccEnv_C = addToUFM_C
mapOccEnv = mapUFM
+mkOccEnv_C comb l = addListToUFM_C comb emptyOccEnv l
+
type OccSet = UniqFM OccName
emptyOccSet :: OccSet
type OccSet = UniqFM OccName
emptyOccSet :: OccSet
@@
-400,6
+403,7
@@
Here's our convention for splitting up the interface file name space:
$w... workers
:T... compiler-generated tycons for dictionaries
:D... ...ditto data cons
$w... workers
:T... compiler-generated tycons for dictionaries
:D... ...ditto data cons
+ :Co... ...ditto coercions
$sf.. specialised version of f
in encoded form these appear as Zdfxxx etc
$sf.. specialised version of f
in encoded form these appear as Zdfxxx etc
@@
-441,7
+445,9
@@
mkDictOcc = mk_simple_deriv varName "$d"
mkIPOcc = mk_simple_deriv varName "$i"
mkSpecOcc = mk_simple_deriv varName "$s"
mkForeignExportOcc = mk_simple_deriv varName "$f"
mkIPOcc = mk_simple_deriv varName "$i"
mkSpecOcc = mk_simple_deriv varName "$s"
mkForeignExportOcc = mk_simple_deriv varName "$f"
-mkNewTyCoOcc = mk_simple_deriv tcName "Co"
+mkNewTyCoOcc = mk_simple_deriv tcName ":Co"
+mkInstTyCoOcc = mk_simple_deriv tcName ":CoF" -- derived from rep ty
+mkEqPredCoOcc = mk_simple_deriv tcName "$co"
-- Generic derivable classes
mkGenOcc1 = mk_simple_deriv varName "$gfrom"
-- Generic derivable classes
mkGenOcc1 = mk_simple_deriv varName "$gfrom"
@@
-453,6
+459,14
@@
mkGenOcc2 = mk_simple_deriv varName "$gto"
mkDataTOcc = mk_simple_deriv varName "$t"
mkDataCOcc = mk_simple_deriv varName "$c"
mkDataTOcc = mk_simple_deriv varName "$t"
mkDataCOcc = mk_simple_deriv varName "$c"
+-- Vectorisation
+mkVectOcc = mk_simple_deriv varName "$v_"
+mkVectTyConOcc = mk_simple_deriv tcName ":V_"
+mkVectDataConOcc = mk_simple_deriv dataName ":VD_"
+mkVectIsoOcc = mk_simple_deriv varName "$VI_"
+mkPArrayTyConOcc = mk_simple_deriv tcName ":VP_"
+mkPArrayDataConOcc = mk_simple_deriv dataName ":VPD_"
+
mk_simple_deriv sp px occ = mk_deriv sp px (occNameString occ)
-- Data constructor workers are made by setting the name space
mk_simple_deriv sp px occ = mk_deriv sp px (occNameString occ)
-- Data constructor workers are made by setting the name space
@@
-477,6
+491,16
@@
mkLocalOcc uniq occ
-- that need encoding (e.g. 'z'!)
\end{code}
-- that need encoding (e.g. 'z'!)
\end{code}
+Derive a name for the representation type constructor of a data/newtype
+instance.
+
+\begin{code}
+mkInstTyTcOcc :: Int -- Index
+ -> OccName -- Family name (e.g. "Map")
+ -> OccName -- Nice unique version (":R23Map")
+mkInstTyTcOcc index occ
+ = mk_deriv tcName (":R" ++ show index) (occNameString occ)
+\end{code}
\begin{code}
mkDFunOcc :: String -- Typically the class and type glommed together e.g. "OrdMaybe"
\begin{code}
mkDFunOcc :: String -- Typically the class and type glommed together e.g. "OrdMaybe"