summaryrefslogtreecommitdiff
path: root/compiler/GHC/Rename
diff options
context:
space:
mode:
authorVladislav Zavialov <vlad.z.4096@gmail.com>2021-04-01 21:51:17 +0300
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-05-23 18:53:50 -0400
commitf8c6fce4a09762adea6009540e523c2b984b2978 (patch)
treefb0898eadf884f4320e5a05f783f6308663350e9 /compiler/GHC/Rename
parentd82d38239f232c3970a8641bb6d47d436e3cbc11 (diff)
downloadhaskell-f8c6fce4a09762adea6009540e523c2b984b2978.tar.gz
HsToken for HsPar, ParPat, HsCmdPar (#19523)
This patch is a first step towards a simpler design for exact printing.
Diffstat (limited to 'compiler/GHC/Rename')
-rw-r--r--compiler/GHC/Rename/Expr.hs24
-rw-r--r--compiler/GHC/Rename/Pat.hs5
-rw-r--r--compiler/GHC/Rename/Splice.hs21
3 files changed, 25 insertions, 25 deletions
diff --git a/compiler/GHC/Rename/Expr.hs b/compiler/GHC/Rename/Expr.hs
index dce75ba1f2..564eabb601 100644
--- a/compiler/GHC/Rename/Expr.hs
+++ b/compiler/GHC/Rename/Expr.hs
@@ -333,17 +333,17 @@ rnExpr (HsSpliceE _ splice) = rnSpliceExpr splice
---------------------------------------------
-- Sections
-- See Note [Parsing sections] in GHC.Parser
-rnExpr (HsPar x (L loc (section@(SectionL {}))))
+rnExpr (HsPar x lpar (L loc (section@(SectionL {}))) rpar)
= do { (section', fvs) <- rnSection section
- ; return (HsPar x (L loc section'), fvs) }
+ ; return (HsPar x lpar (L loc section') rpar, fvs) }
-rnExpr (HsPar x (L loc (section@(SectionR {}))))
+rnExpr (HsPar x lpar (L loc (section@(SectionR {}))) rpar)
= do { (section', fvs) <- rnSection section
- ; return (HsPar x (L loc section'), fvs) }
+ ; return (HsPar x lpar (L loc section') rpar, fvs) }
-rnExpr (HsPar x e)
+rnExpr (HsPar x lpar e rpar)
= do { (e', fvs_e) <- rnLExpr e
- ; return (HsPar x e', fvs_e) }
+ ; return (HsPar x lpar e' rpar, fvs_e) }
rnExpr expr@(SectionL {})
= do { addErr (sectionErr expr); rnSection expr }
@@ -783,9 +783,9 @@ rnCmd (HsCmdLam _ matches)
= do { (matches', fvMatch) <- rnMatchGroup LambdaExpr rnLCmd matches
; return (HsCmdLam noExtField matches', fvMatch) }
-rnCmd (HsCmdPar x e)
+rnCmd (HsCmdPar x lpar e rpar)
= do { (e', fvs_e) <- rnLCmd e
- ; return (HsCmdPar x e', fvs_e) }
+ ; return (HsCmdPar x lpar e' rpar, fvs_e) }
rnCmd (HsCmdCase _ expr matches)
= do { (new_expr, e_fvs) <- rnLExpr expr
@@ -835,7 +835,7 @@ methodNamesCmd (HsCmdArrApp _ _arrow _arg HsHigherOrderApp _rtl)
= unitFV appAName
methodNamesCmd (HsCmdArrForm {}) = emptyFVs
-methodNamesCmd (HsCmdPar _ c) = methodNamesLCmd c
+methodNamesCmd (HsCmdPar _ _ c _) = methodNamesLCmd c
methodNamesCmd (HsCmdIf _ _ _ c1 c2)
= methodNamesLCmd c1 `plusFV` methodNamesLCmd c2 `addOneFV` choiceAName
@@ -2145,7 +2145,7 @@ isStrictPattern lpat =
VarPat{} -> False
LazyPat{} -> False
AsPat _ _ p -> isStrictPattern p
- ParPat _ p -> isStrictPattern p
+ ParPat _ _ p _ -> isStrictPattern p
ViewPat _ _ p -> isStrictPattern p
SigPat _ p _ -> isStrictPattern p
BangPat{} -> True
@@ -2279,13 +2279,13 @@ needJoin _monad_names stmts = (True, stmts)
isReturnApp :: MonadNames
-> LHsExpr GhcRn
-> Maybe (LHsExpr GhcRn, Bool)
-isReturnApp monad_names (L _ (HsPar _ expr)) = isReturnApp monad_names expr
+isReturnApp monad_names (L _ (HsPar _ _ expr _)) = isReturnApp monad_names expr
isReturnApp monad_names (L _ e) = case e of
OpApp _ l op r | is_return l, is_dollar op -> Just (r, True)
HsApp _ f arg | is_return f -> Just (arg, False)
_otherwise -> Nothing
where
- is_var f (L _ (HsPar _ e)) = is_var f e
+ is_var f (L _ (HsPar _ _ e _)) = is_var f e
is_var f (L _ (HsAppType _ e _)) = is_var f e
is_var f (L _ (HsVar _ (L _ r))) = f r
-- TODO: I don't know how to get this right for rebindable syntax
diff --git a/compiler/GHC/Rename/Pat.hs b/compiler/GHC/Rename/Pat.hs
index 5e0723d4cb..7a63d73fee 100644
--- a/compiler/GHC/Rename/Pat.hs
+++ b/compiler/GHC/Rename/Pat.hs
@@ -400,8 +400,9 @@ rnLPatAndThen nm lpat = wrapSrcSpanCps (rnPatAndThen nm) lpat
rnPatAndThen :: NameMaker -> Pat GhcPs -> CpsRn (Pat GhcRn)
rnPatAndThen _ (WildPat _) = return (WildPat noExtField)
-rnPatAndThen mk (ParPat x pat) = do { pat' <- rnLPatAndThen mk pat
- ; return (ParPat x pat') }
+rnPatAndThen mk (ParPat x lpar pat rpar) =
+ do { pat' <- rnLPatAndThen mk pat
+ ; return (ParPat x lpar pat' rpar) }
rnPatAndThen mk (LazyPat _ pat) = do { pat' <- rnLPatAndThen mk pat
; return (LazyPat noExtField pat') }
rnPatAndThen mk (BangPat _ pat) = do { pat' <- rnLPatAndThen mk pat
diff --git a/compiler/GHC/Rename/Splice.hs b/compiler/GHC/Rename/Splice.hs
index d8bead6645..ab17333c0e 100644
--- a/compiler/GHC/Rename/Splice.hs
+++ b/compiler/GHC/Rename/Splice.hs
@@ -450,11 +450,11 @@ rnSpliceExpr splice
runRnSplice UntypedExpSplice runMetaE ppr rn_splice
; (lexpr3, fvs) <- checkNoErrs (rnLExpr rn_expr)
-- See Note [Delaying modFinalizers in untyped splices].
- ; return ( HsPar noAnn $ HsSpliceE noAnn
- . HsSpliced noExtField (ThModFinalizers mod_finalizers)
- . HsSplicedExpr <$>
- lexpr3
- , fvs)
+ ; let e = HsSpliceE noAnn
+ . HsSpliced noExtField (ThModFinalizers mod_finalizers)
+ . HsSplicedExpr
+ <$> lexpr3
+ ; return (gHsPar e, fvs)
}
{- Note [Running splices in the Renamer]
@@ -694,12 +694,11 @@ rnSplicePat splice
; (pat, mod_finalizers) <-
runRnSplice UntypedPatSplice runMetaP ppr rn_splice
-- See Note [Delaying modFinalizers in untyped splices].
- ; return ( Left $ ParPat noAnn $ ((SplicePat noExtField)
- . HsSpliced noExtField (ThModFinalizers mod_finalizers)
- . HsSplicedPat) `mapLoc`
- pat
- , emptyFVs
- ) }
+ ; let p = SplicePat noExtField
+ . HsSpliced noExtField (ThModFinalizers mod_finalizers)
+ . HsSplicedPat
+ <$> pat
+ ; return (Left $ gParPat p, emptyFVs) }
-- Wrap the result of the quasi-quoter in parens so that we don't
-- lose the outermost location set by runQuasiQuote (#7918)