%
+% (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
#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 Var ( 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}
-- 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)
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 (HsArrApp arrow arg _ HsFirstOrderApp True)
= hsep [ppr_lexpr arrow, ptext SLIT("-<"), ppr_lexpr arg]
ppr_expr (HsArrApp arrow arg _ HsFirstOrderApp False)