X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FhsSyn%2FHsExpr.lhs;h=0b6095e913e7635fd0c81f7cba1f13e9b28e429f;hb=49d454d8f8f0e1a83369ec12f8aafc1dcf80aea9;hp=40866f44d701e3da2aba2038ebcd8f78d801609e;hpb=e6d057711f4d6d6ff6342c39fa2b9e44d25447f1;p=ghc-hetmet.git diff --git a/compiler/hsSyn/HsExpr.lhs b/compiler/hsSyn/HsExpr.lhs index 40866f4..0b6095e 100644 --- a/compiler/hsSyn/HsExpr.lhs +++ b/compiler/hsSyn/HsExpr.lhs @@ -1,7 +1,9 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -\section[HsExpr]{Abstract Haskell syntax: expressions} + +HsExpr: Abstract Haskell syntax: expressions \begin{code} module HsExpr where @@ -9,20 +11,18 @@ module HsExpr where #include "HsVersions.h" -- friends: -import HsDecls ( HsGroup ) -import HsPat ( LPat ) -import HsLit ( HsLit(..), HsOverLit ) -import HsTypes ( LHsType, PostTcType ) -import HsImpExp ( isOperator, pprHsVar ) -import HsBinds ( HsLocalBinds, DictBinds, isEmptyLocalBinds, - HsWrapper, pprHsWrapper ) +import HsDecls +import HsPat +import HsLit +import HsTypes +import HsImpExp +import HsBinds -- others: -import Type ( Type, pprParendType ) -import Var ( TyVar, Id ) -import Name ( Name ) -import BasicTypes ( IPName, Boxity, tupleParens, Arity, Fixity(..) ) -import SrcLoc ( Located(..), unLoc ) +import Var +import Name +import BasicTypes +import SrcLoc import Outputable import FastString \end{code} @@ -186,6 +186,7 @@ data HsExpr id ----------------------------------------------------------- -- MetaHaskell Extensions + | HsBracket (HsBracket id) | HsBracketOut (HsBracket Name) -- Output of the type checker is the *original* @@ -220,13 +221,28 @@ data HsExpr id (Maybe Fixity) -- fixity (filled in by the renamer), for forms that -- were converted from OpApp's by the renamer [LHsCmdTop id] -- argument commands -\end{code} -These constructors only appear temporarily in the parser. -The renamer translates them into the Right Thing. + --------------------------------------- + -- Haskell program coverage (Hpc) Support + + | HsTick + Int -- module-local tick number + (LHsExpr id) -- sub-expression + + | HsBinTick + Int -- module-local tick number for True + Int -- module-local tick number for False + (LHsExpr id) -- sub-expression + + | HsTickPragma -- A pragma introduced tick + (FastString,(Int,Int),(Int,Int)) -- external span for this tick + (LHsExpr id) + + --------------------------------------- + -- These constructors only appear temporarily in the parser. + -- The renamer translates them into the Right Thing. -\begin{code} | EWildPat -- wildcard | EAsPat (Located id) -- as pattern @@ -235,11 +251,10 @@ The renamer translates them into the Right Thing. | ELazyPat (LHsExpr id) -- ~ pattern | HsType (LHsType id) -- Explicit type argument; e.g f {| Int |} x y -\end{code} -Everything from here on appears only in typechecker output. + --------------------------------------- + -- Finally, HsWrap appears only in typechecker output -\begin{code} | HsWrap HsWrapper -- TRANSLATION (HsExpr id) @@ -391,6 +406,18 @@ ppr_expr (HsBracketOut e ps) = ppr e $$ ptext SLIT("pending") <+> ppr ps ppr_expr (HsProc pat (L _ (HsCmdTop cmd _ _ _))) = hsep [ptext SLIT("proc"), ppr pat, ptext SLIT("->"), ppr cmd] +ppr_expr (HsTick tickId exp) + = hcat [ptext SLIT("tick<"), ppr tickId,ptext SLIT(">("), ppr exp,ptext SLIT(")")] +ppr_expr (HsBinTick tickIdTrue tickIdFalse exp) + = hcat [ptext SLIT("bintick<"), + ppr tickIdTrue, + ptext SLIT(","), + ppr tickIdFalse, + ptext SLIT(">("), + ppr exp,ptext SLIT(")")] +ppr_expr (HsTickPragma externalSrcLoc exp) + = hcat [ptext SLIT("tickpragma<"), ppr externalSrcLoc,ptext SLIT(">("), ppr exp,ptext SLIT(")")] + ppr_expr (HsArrApp arrow arg _ HsFirstOrderApp True) = hsep [ppr_lexpr arrow, ptext SLIT("-<"), ppr_lexpr arg] ppr_expr (HsArrApp arrow arg _ HsFirstOrderApp False)