X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fparser%2FRdrHsSyn.lhs;fp=compiler%2Fparser%2FRdrHsSyn.lhs;h=32f81a707b753c1782102d6620c329b7c21621bf;hp=90220d365d398e6a28b55a2e65feb5815f6f1073;hb=0cbdc7b1bd76c61ad31a14a43398ae05ce138489;hpb=5e4375adca19f66803c3ad47fb1ba2c2ac6b4b62 diff --git a/compiler/parser/RdrHsSyn.lhs b/compiler/parser/RdrHsSyn.lhs index 90220d3..32f81a7 100644 --- a/compiler/parser/RdrHsSyn.lhs +++ b/compiler/parser/RdrHsSyn.lhs @@ -44,6 +44,7 @@ module RdrHsSyn ( checkMDo, -- [Stmt] -> P [Stmt] checkValDef, -- (SrcLoc, HsExp, HsRhs, [HsDecl]) -> P HsDecl checkValSig, -- (SrcLoc, HsExp, HsRhs, [HsDecl]) -> P HsDecl + checkDoAndIfThenElse, parseError, parseErrorSDoc, ) where @@ -815,6 +816,27 @@ checkValSig lhs@(L l _) ty looks_like_foreign _ = False foreign_RDR = mkUnqual varName (fsLit "foreign") + +checkDoAndIfThenElse :: LHsExpr RdrName + -> Bool + -> LHsExpr RdrName + -> Bool + -> LHsExpr RdrName + -> P () +checkDoAndIfThenElse guardExpr semiThen thenExpr semiElse elseExpr + | semiThen || semiElse + = do pState <- getPState + unless (dopt Opt_DoAndIfThenElse (dflags pState)) $ do + parseErrorSDoc (combineLocs guardExpr elseExpr) + (text "Unexpected semi-colons in conditional:" + $$ nest 4 expr + $$ text "Perhaps you meant to use -XDoAndIfThenElse?") + | otherwise = return () + where pprOptSemi True = semi + pprOptSemi False = empty + expr = text "if" <+> ppr guardExpr <> pprOptSemi semiThen <+> + text "then" <+> ppr thenExpr <> pprOptSemi semiElse <+> + text "else" <+> ppr elseExpr \end{code}