X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FhsSyn%2FHsExpr.lhs;h=d4cb80ea4e2817d9e6f8b2a7d19fecbb8cecb48a;hb=e30aca19def5c629a8429bd57e56535b7f8f85c8;hp=9bcd06e47f74d57bf0abeeea36324bfea08e439c;hpb=d5934bbb856aa0aa620c9b2e0fa51c90a1a5a048;p=ghc-hetmet.git diff --git a/compiler/hsSyn/HsExpr.lhs b/compiler/hsSyn/HsExpr.lhs index 9bcd06e..d4cb80e 100644 --- a/compiler/hsSyn/HsExpr.lhs +++ b/compiler/hsSyn/HsExpr.lhs @@ -186,6 +186,7 @@ data HsExpr id ----------------------------------------------------------- -- MetaHaskell Extensions + | HsBracket (HsBracket id) | HsBracketOut (HsBracket Name) -- Output of the type checker is the *original* @@ -202,18 +203,6 @@ data HsExpr id -- always has an empty stack --------------------------------------- - -- 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 - - --------------------------------------- -- The following are commands, not expressions proper | HsArrApp -- Arrow tail, or arrow application (f -< arg) @@ -232,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 @@ -247,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) @@ -412,6 +415,8 @@ ppr_expr (HsBinTick tickIdTrue tickIdFalse exp) 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] @@ -549,13 +554,13 @@ data HsCmdTop id %************************************************************************ \begin{code} -type HsRecordBinds id = [(Located id, LHsExpr id)] +data HsRecordBinds id = HsRecordBinds [(Located id, LHsExpr id)] recBindFields :: HsRecordBinds id -> [id] -recBindFields rbinds = [unLoc field | (field,_) <- rbinds] +recBindFields (HsRecordBinds rbinds) = [unLoc field | (field,_) <- rbinds] pp_rbinds :: OutputableBndr id => SDoc -> HsRecordBinds id -> SDoc -pp_rbinds thing rbinds +pp_rbinds thing (HsRecordBinds rbinds) = hang thing 4 (braces (sep (punctuate comma (map (pp_rbind) rbinds)))) where