Correct BangPat SrcSpan calculation
authorMatthew Pickering <matthewtpickering@gmail.com>
Mon, 29 Jun 2015 19:11:17 +0000 (21:11 +0200)
committerAlan Zimmerman <alan.zimm@gmail.com>
Mon, 29 Jun 2015 19:11:17 +0000 (21:11 +0200)
Summary:
Previously when the split was performed in splitBang, `BangPat` was given the
same SrcSpan as the whole of the LHS of the declaration. This patch
correctly calculates the value.

Reviewers: alanz, austin

Reviewed By: alanz, austin

Subscribers: thomie, bgamari

Differential Revision: https://phabricator.haskell.org/D1020

GHC Trac Issues: #10588

compiler/parser/RdrHsSyn.hs

index d7af65d..aa0b8cf 100644 (file)
@@ -997,9 +997,10 @@ checkDoAndIfThenElse guardExpr semiThen thenExpr semiElse elseExpr
         -- not be any OpApps inside the e's
 splitBang :: LHsExpr RdrName -> Maybe (LHsExpr RdrName, [LHsExpr RdrName])
 -- Splits (f ! g a b) into (f, [(! g), a, b])
-splitBang (L loc (OpApp l_arg bang@(L _ (HsVar op)) _ r_arg))
-  | op == bang_RDR = Just (l_arg, L loc (SectionR bang arg1) : argns)
+splitBang (L _ (OpApp l_arg bang@(L _ (HsVar op)) _ r_arg))
+  | op == bang_RDR = Just (l_arg, L l' (SectionR bang arg1) : argns)
   where
+    l' = combineLocs bang arg1
     (arg1,argns) = split_bang r_arg []
     split_bang (L _ (HsApp f e)) es = split_bang f (e:es)
     split_bang e                 es = (e,es)