diff options
author | Vladislav Zavialov <vlad.z.4096@gmail.com> | 2021-04-01 21:51:17 +0300 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-05-23 18:53:50 -0400 |
commit | f8c6fce4a09762adea6009540e523c2b984b2978 (patch) | |
tree | fb0898eadf884f4320e5a05f783f6308663350e9 /compiler/GHC/Rename | |
parent | d82d38239f232c3970a8641bb6d47d436e3cbc11 (diff) | |
download | haskell-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.hs | 24 | ||||
-rw-r--r-- | compiler/GHC/Rename/Pat.hs | 5 | ||||
-rw-r--r-- | compiler/GHC/Rename/Splice.hs | 21 |
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) |