[project @ 1996-06-26 10:26:00 by partain]
[ghc-hetmet.git] / ghc / compiler / coreSyn / AnnCoreSyn.lhs
index 25ba46c..b5ce22a 100644 (file)
@@ -1,5 +1,5 @@
 %
-% (c) The GRASP/AQUA Project, Glasgow University, 1992-1994
+% (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
 %
 \section[AnnCoreSyntax]{Annotated core syntax}
 
@@ -11,175 +11,101 @@ really is} just like @CoreSyntax@.)
 #include "HsVersions.h"
 
 module AnnCoreSyn (
-       AnnCoreBinding(..), AnnCoreExpr(..),
+       AnnCoreBinding(..), SYN_IE(AnnCoreExpr),
        AnnCoreExpr'(..),       -- v sad that this must be exported
-       AnnCoreCaseAlternatives(..), AnnCoreCaseDefault(..),
-#ifdef DPH
-       AnnCoreParQuals(..),
-        AnnCoreParCommunicate(..),
-#endif {- Data Parallel Haskell -}
-
-       deAnnotate, -- we may eventually export some of the other deAnners
-
-       -- and to make the interface self-sufficient
-       BasicLit, Id, PrimOp, TyCon, TyVar, UniType, CostCentre
-       IF_ATTACK_PRAGMAS(COMMA cmpTyCon COMMA cmpTyVar)
-       IF_ATTACK_PRAGMAS(COMMA cmpUniType)
+       AnnCoreCaseAlts(..), AnnCoreCaseDefault(..),
+
+       deAnnotate -- we may eventually export some of the other deAnners
     ) where
 
-import AbsPrel         ( PrimOp(..), PrimKind
-                         IF_ATTACK_PRAGMAS(COMMA tagOf_PrimOp)
-                         IF_ATTACK_PRAGMAS(COMMA pprPrimOp)
-                       )
-import AbsUniType      ( Id, TyVar, TyCon, UniType
-                         IF_ATTACK_PRAGMAS(COMMA cmpTyCon COMMA cmpTyVar)
-                         IF_ATTACK_PRAGMAS(COMMA cmpUniType)
-                       )
-import BasicLit                ( BasicLit )
+IMP_Ubiq(){-uitous-}
+
 import CoreSyn
-import Outputable
-import CostCentre      ( CostCentre )
-#if USE_ATTACK_PRAGMAS
-import Util
-#endif
 \end{code}
 
 \begin{code}
-data AnnCoreBinding binder bindee annot
-  = AnnCoNonRec binder (AnnCoreExpr binder bindee annot)
-  | AnnCoRec   [(binder, AnnCoreExpr binder bindee annot)]
+data AnnCoreBinding val_bdr val_occ tyvar uvar annot
+  = AnnNonRec val_bdr (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
+  | AnnRec    [(val_bdr, AnnCoreExpr val_bdr val_occ tyvar uvar annot)]
 \end{code}
 
 \begin{code}
-type AnnCoreExpr binder bindee annot = (annot, AnnCoreExpr' binder bindee annot)
-
-data AnnCoreExpr' binder bindee annot
-  = AnnCoVar    bindee
-  | AnnCoLit BasicLit
-
-  | AnnCoCon    Id [UniType] [CoreAtom bindee]
-
-  | AnnCoPrim    PrimOp [UniType] [CoreAtom bindee]
+type AnnCoreExpr val_bdr val_occ tyvar uvar annot
+  = (annot, AnnCoreExpr' val_bdr val_occ tyvar uvar annot)
 
-  | AnnCoLam    [binder]
-                (AnnCoreExpr binder bindee annot)
-  | AnnCoTyLam   TyVar
-                (AnnCoreExpr binder bindee annot)
+data AnnCoreExpr' val_bdr val_occ tyvar uvar annot
+  = AnnVar     val_occ
+  | AnnLit     Literal
 
-  | AnnCoApp    (AnnCoreExpr binder bindee annot)
-                (CoreAtom    bindee)
-  | AnnCoTyApp   (AnnCoreExpr binder bindee annot)
-                UniType
+  | AnnCon     Id     [GenCoreArg val_occ tyvar uvar]
+  | AnnPrim    PrimOp [GenCoreArg val_occ tyvar uvar]
 
-  | AnnCoCase    (AnnCoreExpr binder bindee annot)
-                (AnnCoreCaseAlternatives binder bindee annot)
+  | AnnLam     (GenCoreBinder val_bdr tyvar uvar)
+               (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
 
-  | AnnCoLet    (AnnCoreBinding binder bindee annot)
-                (AnnCoreExpr binder bindee annot)
+  | AnnApp     (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
+               (GenCoreArg  val_occ tyvar uvar)
 
-  | AnnCoSCC    CostCentre
-                (AnnCoreExpr binder bindee annot)
-#ifdef DPH
-  | AnnCoZfExpr  (AnnCoreExpr binder bindee annot) 
-                (AnnCoreParQuals binder bindee annot)
+  | AnnCase    (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
+               (AnnCoreCaseAlts val_bdr val_occ tyvar uvar annot)
 
-  | AnnCoParCon         Id Int [UniType] [AnnCoreExpr binder bindee annot]
+  | AnnLet     (AnnCoreBinding val_bdr val_occ tyvar uvar annot)
+               (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
 
-  | AnnCoParComm
-                    Int
-                   (AnnCoreExpr binder bindee annot)
-                   (AnnCoreParCommunicate binder bindee annot)
-  | AnnCoParZipWith
-                    Int 
-                    (AnnCoreExpr binder bindee annot)
-                    [AnnCoreExpr binder bindee annot]
-#endif {- Data Parallel Haskell -}
-\end{code}
+  | AnnSCC     CostCentre
+               (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
 
-\begin{code}
-#ifdef DPH
-data AnnCoreParQuals binder bindee annot
-   = AnnCoAndQuals  (AnnCoreParQuals binder bindee annot)
-                   (AnnCoreParQuals binder bindee annot)
-   | AnnCoParFilter (AnnCoreExpr binder bindee annot)
-   | AnnCoDrawnGen  [binder]
-                   (binder)
-                   (AnnCoreExpr binder bindee annot)   
-   | AnnCoIndexGen  [AnnCoreExpr binder bindee annot]
-                   (binder)
-                   (AnnCoreExpr binder bindee annot)   
-#endif {- Data Parallel Haskell -}
-\end{code}
-
-\begin{code}
-data AnnCoreCaseAlternatives binder bindee annot
-  = AnnCoAlgAlts       [(Id,
-                        [binder],
-                        AnnCoreExpr binder bindee annot)]
-                       (AnnCoreCaseDefault binder bindee annot)
-  | AnnCoPrimAlts      [(BasicLit,
-                         AnnCoreExpr binder bindee annot)]
-                       (AnnCoreCaseDefault binder bindee annot)
-#ifdef DPH
-  | AnnCoParAlgAlts    TyCon   
-                       Int
-                       [binder]
-                       [(Id,
-                        AnnCoreExpr binder bindee annot)]
-                       (AnnCoreCaseDefault binder bindee annot)
-  | AnnCoParPrimAlts   TyCon   
-                       Int
-                       [(BasicLit,
-                         AnnCoreExpr binder bindee annot)]
-                       (AnnCoreCaseDefault binder bindee annot)
-#endif {- Data Parallel Haskell -}
-
-data AnnCoreCaseDefault binder bindee annot
-  = AnnCoNoDefault
-  | AnnCoBindDefault   binder
-                       (AnnCoreExpr binder bindee annot)
+  | AnnCoerce  Coercion
+               (GenType tyvar uvar)
+               (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
 \end{code}
 
 \begin{code}
-#ifdef DPH
-data AnnCoreParCommunicate binder bindee annot
-  = AnnCoParSend       [AnnCoreExpr binder bindee annot]     
-  | AnnCoParFetch      [AnnCoreExpr binder bindee annot]     
-  | AnnCoToPodized
-  | AnnCoFromPodized
-#endif {- Data Parallel Haskell -}
+data AnnCoreCaseAlts val_bdr val_occ tyvar uvar annot
+  = AnnAlgAlts [(Id,
+                 [val_bdr],
+                 AnnCoreExpr val_bdr val_occ tyvar uvar annot)]
+               (AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot)
+  | AnnPrimAlts        [(Literal,
+                 AnnCoreExpr val_bdr val_occ tyvar uvar annot)]
+               (AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot)
+
+data AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot
+  = AnnNoDefault
+  | AnnBindDefault  val_bdr
+                   (AnnCoreExpr val_bdr val_occ tyvar uvar annot)
 \end{code}
 
 \begin{code}
-deAnnotate :: AnnCoreExpr bndr bdee ann -> CoreExpr bndr bdee
-
-deAnnotate (_, AnnCoVar v)            = CoVar v
-deAnnotate (_, AnnCoLit lit)      = CoLit lit
-deAnnotate (_, AnnCoCon        con tys args) = CoCon con tys args
-deAnnotate (_, AnnCoPrim op tys args) = CoPrim op tys args
-deAnnotate (_, AnnCoLam        binders body) = CoLam binders (deAnnotate body)
-deAnnotate (_, AnnCoTyLam tyvar body) = CoTyLam tyvar (deAnnotate body)
-deAnnotate (_, AnnCoApp        fun arg)      = CoApp (deAnnotate fun) arg
-deAnnotate (_, AnnCoTyApp fun ty)     = CoTyApp (deAnnotate fun) ty
-deAnnotate (_, AnnCoSCC        lbl body)     = CoSCC lbl (deAnnotate body) 
-
-deAnnotate (_, AnnCoLet        bind body)
-  = CoLet (deAnnBind bind) (deAnnotate body)
+deAnnotate :: AnnCoreExpr val_bdr val_occ tyvar uvar ann
+          -> GenCoreExpr val_bdr val_occ tyvar uvar
+
+deAnnotate (_, AnnVar  v)          = Var v
+deAnnotate (_, AnnLit  lit)        = Lit lit
+deAnnotate (_, AnnCon  con args)   = Con con args
+deAnnotate (_, AnnPrim op args)    = Prim op args
+deAnnotate (_, AnnLam  binder body)= Lam binder (deAnnotate body)
+deAnnotate (_, AnnApp  fun arg)    = App (deAnnotate fun) arg
+deAnnotate (_, AnnSCC  lbl body)   = SCC lbl (deAnnotate body)
+deAnnotate (_, AnnCoerce c ty body) = Coerce c ty (deAnnotate body)
+
+deAnnotate (_, AnnLet bind body)
+  = Let (deAnnBind bind) (deAnnotate body)
   where
-    deAnnBind (AnnCoNonRec var rhs) = CoNonRec var (deAnnotate rhs)
-    deAnnBind (AnnCoRec pairs) = CoRec [(v,deAnnotate rhs) | (v,rhs) <- pairs]
+    deAnnBind (AnnNonRec var rhs) = NonRec var (deAnnotate rhs)
+    deAnnBind (AnnRec pairs) = Rec [(v,deAnnotate rhs) | (v,rhs) <- pairs]
 
-deAnnotate (_, AnnCoCase scrut alts)
-  = CoCase (deAnnotate scrut) (deAnnAlts alts)
+deAnnotate (_, AnnCase scrut alts)
+  = Case (deAnnotate scrut) (deAnnAlts alts)
   where
-    deAnnAlts (AnnCoAlgAlts alts deflt)  
-      = CoAlgAlts [(con,args,deAnnotate rhs) | (con,args,rhs) <- alts]
+    deAnnAlts (AnnAlgAlts alts deflt)
+      = AlgAlts [(con,args,deAnnotate rhs) | (con,args,rhs) <- alts]
                 (deAnnDeflt deflt)
 
-    deAnnAlts (AnnCoPrimAlts alts deflt) 
-      = CoPrimAlts [(lit,deAnnotate rhs) | (lit,rhs) <- alts]
+    deAnnAlts (AnnPrimAlts alts deflt)
+      = PrimAlts [(lit,deAnnotate rhs) | (lit,rhs) <- alts]
                   (deAnnDeflt deflt)
 
-    deAnnDeflt AnnCoNoDefault        = CoNoDefault
-    deAnnDeflt (AnnCoBindDefault var rhs) = CoBindDefault var (deAnnotate rhs)
+    deAnnDeflt AnnNoDefault            = NoDefault
+    deAnnDeflt (AnnBindDefault var rhs) = BindDefault var (deAnnotate rhs)
 \end{code}