X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FhsSyn%2FHsBinds.lhs;h=a9729e693464f63c88d6763547aad500f7d5eacf;hb=438596897ebbe25a07e1c82085cfbc5bdb00f09e;hp=d6246f15e5c1d6705ce1c26acc364b28a7783ef9;hpb=83817d01dff687643eee23218435b968ba358a25;p=ghc-hetmet.git diff --git a/ghc/compiler/hsSyn/HsBinds.lhs b/ghc/compiler/hsSyn/HsBinds.lhs index d6246f1..a9729e6 100644 --- a/ghc/compiler/hsSyn/HsBinds.lhs +++ b/ghc/compiler/hsSyn/HsBinds.lhs @@ -1,5 +1,5 @@ % -% (c) The GRASP/AQUA Project, Glasgow University, 1992-1996 +% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % \section[HsBinds]{Abstract syntax: top-level bindings and signatures} @@ -19,14 +19,13 @@ import CoreSyn ( CoreExpr ) import PprCore () -- Instances for Outputable --others: -import Id ( Id, GenId ) +import Id ( Id ) import Name ( OccName, NamedThing(..) ) import BasicTypes ( RecFlag(..) ) import Outputable import Bag import SrcLoc ( SrcLoc ) -import Type ( GenType ) -import TyVar ( GenTyVar ) +import Var ( GenTyVar ) \end{code} %************************************************************************ @@ -157,8 +156,13 @@ nullMonoBinds EmptyMonoBinds = True nullMonoBinds (AndMonoBinds bs1 bs2) = nullMonoBinds bs1 && nullMonoBinds bs2 nullMonoBinds other_monobind = False -andMonoBinds :: [MonoBinds flexi id pat] -> MonoBinds flexi id pat -andMonoBinds binds = foldr AndMonoBinds EmptyMonoBinds binds +andMonoBinds :: MonoBinds flexi id pat -> MonoBinds flexi id pat -> MonoBinds flexi id pat +andMonoBinds EmptyMonoBinds mb = mb +andMonoBinds mb EmptyMonoBinds = mb +andMonoBinds mb1 mb2 = AndMonoBinds mb1 mb2 + +andMonoBindList :: [MonoBinds flexi id pat] -> MonoBinds flexi id pat +andMonoBindList binds = foldr AndMonoBinds EmptyMonoBinds binds \end{code} \begin{code} @@ -222,6 +226,9 @@ data Sig name | InlineSig name -- INLINE f SrcLoc + | NoInlineSig name -- NOINLINE f + SrcLoc + | SpecInstSig (HsType name) -- (Class tys); should be a specialisation of the -- current instance decl SrcLoc @@ -232,11 +239,12 @@ sigsForMe :: (name -> Bool) -> [Sig name] -> [Sig name] sigsForMe f sigs = filter sig_for_me sigs where - sig_for_me (Sig n _ _) = f n - sig_for_me (ClassOpSig n _ _ _) = f n - sig_for_me (SpecSig n _ _ _) = f n - sig_for_me (InlineSig n _) = f n - sig_for_me (SpecInstSig _ _) = False + sig_for_me (Sig n _ _) = f n + sig_for_me (ClassOpSig n _ _ _) = f n + sig_for_me (SpecSig n _ _ _) = f n + sig_for_me (InlineSig n _) = f n + sig_for_me (NoInlineSig n _) = f n + sig_for_me (SpecInstSig _ _) = False \end{code} \begin{code} @@ -263,6 +271,9 @@ ppr_sig (SpecSig var ty using _) ppr_sig (InlineSig var _) = hsep [text "{-# INLINE", ppr var, text "#-}"] +ppr_sig (NoInlineSig var _) + = hsep [text "{-# NOINLINE", ppr var, text "#-}"] + ppr_sig (SpecInstSig ty _) = hsep [text "{-# SPECIALIZE instance", ppr ty, text "#-}"] \end{code}