diff --git a/compiler/GHC/Parser.y b/compiler/GHC/Parser.y index 363c0919b80a040c65af961d6788a0614541a01e..30b8b28ea098f310f1482ba3e149079587b9db54 100644 --- a/compiler/GHC/Parser.y +++ b/compiler/GHC/Parser.y @@ -1237,12 +1237,12 @@ topdecl_cs : topdecl {% commentsPA $1 } ----------------------------------------------------------------------------- topdecl :: { LHsDecl GhcPs } - : cl_decl { sL1a $1 (TyClD noExtField (unLoc $1)) } - | ty_decl { sL1a $1 (TyClD noExtField (unLoc $1)) } - | standalone_kind_sig { sL1a $1 (KindSigD noExtField (unLoc $1)) } - | inst_decl { sL1a $1 (InstD noExtField (unLoc $1)) } - | stand_alone_deriving { sL1a $1 (DerivD noExtField (unLoc $1)) } - | role_annot { sL1a $1 (RoleAnnotD noExtField (unLoc $1)) } + : cl_decl { L (getLoc $1) (TyClD noExtField (unLoc $1)) } + | ty_decl { L (getLoc $1) (TyClD noExtField (unLoc $1)) } + | standalone_kind_sig { L (getLoc $1) (KindSigD noExtField (unLoc $1)) } + | inst_decl { L (getLoc $1) (InstD noExtField (unLoc $1)) } + | stand_alone_deriving { L (getLoc $1) (DerivD noExtField (unLoc $1)) } + | role_annot { L (getLoc $1) (RoleAnnotD noExtField (unLoc $1)) } | 'default' '(' comma_types0 ')' {% amsA' (sLL $1 $> (DefD noExtField (DefaultDecl [mj AnnDefault $1,mop $2,mcp $4] $3))) } | 'foreign' fdecl {% amsA' (sLL $1 $> ((snd $ unLoc $2) (mj AnnForeign $1:(fst $ unLoc $2)))) } diff --git a/compiler/GHC/Parser/PostProcess.hs b/compiler/GHC/Parser/PostProcess.hs index 28460aa798a26375c9904bddd9332463ad4deabd..a53e3829e40973e1863212cab1ce6521909028d6 100644 --- a/compiler/GHC/Parser/PostProcess.hs +++ b/compiler/GHC/Parser/PostProcess.hs @@ -943,11 +943,13 @@ checkTyVars pp_what equals_or_where tc tparms -- Keep around an action for adjusting the annotations of extra parens chkParens :: [AddEpAnn] -> [AddEpAnn] -> HsBndrVis GhcPs -> LHsType GhcPs -> P (LHsTyVarBndr (HsBndrVis GhcPs) GhcPs) - chkParens ops cps bvis (L l (HsParTy _ ty)) + chkParens ops cps bvis (L l (HsParTy _ (L lt ty))) = let (o,c) = mkParensEpAnn (realSrcSpan $ locA l) + lcs = epAnnComments l + lt' = setCommentsEpAnn lt lcs in - chkParens (o:ops) (c:cps) bvis ty + chkParens (o:ops) (c:cps) bvis (L lt' ty) chkParens ops cps bvis ty = chk ops cps bvis ty -- Check that the name space is correct! diff --git a/testsuite/tests/parser/should_compile/DumpSemis.stderr b/testsuite/tests/parser/should_compile/DumpSemis.stderr index d3f280e06f60599c25989d34463c86b9f8f648fd..e070f0e116afa7aeed8386f9b2c43a8cab6151a6 100644 --- a/testsuite/tests/parser/should_compile/DumpSemis.stderr +++ b/testsuite/tests/parser/should_compile/DumpSemis.stderr @@ -212,7 +212,10 @@ (EpaComments [])) (HsTupleTy - (AnnParen AnnParens (EpaSpan { DumpSemis.hs:9:11 }) (EpaSpan { DumpSemis.hs:9:12 })) + (AnnParen + AnnParens + (EpaSpan { DumpSemis.hs:9:11 }) + (EpaSpan { DumpSemis.hs:9:12 })) (HsBoxedOrConstraintTuple) [])))))))))) ,(L @@ -498,7 +501,10 @@ (EpaComments [])) (HsTupleTy - (AnnParen AnnParens (EpaSpan { DumpSemis.hs:14:11 }) (EpaSpan { DumpSemis.hs:14:12 })) + (AnnParen + AnnParens + (EpaSpan { DumpSemis.hs:14:11 }) + (EpaSpan { DumpSemis.hs:14:12 })) (HsBoxedOrConstraintTuple) [])))))))))) ,(L @@ -747,7 +753,10 @@ (EpaComments [])) (HsTupleTy - (AnnParen AnnParens (EpaSpan { DumpSemis.hs:21:11 }) (EpaSpan { DumpSemis.hs:21:12 })) + (AnnParen + AnnParens + (EpaSpan { DumpSemis.hs:21:11 }) + (EpaSpan { DumpSemis.hs:21:12 })) (HsBoxedOrConstraintTuple) [])))))))))) ,(L diff --git a/testsuite/tests/printer/Test24533.hs b/testsuite/tests/printer/Test24533.hs index 4f08ade0973fa905baa5e6441ad52a89f579ea37..36d74acdf361b8c4e49b345e1e36834934f1c0ab 100644 --- a/testsuite/tests/printer/Test24533.hs +++ b/testsuite/tests/printer/Test24533.hs @@ -6,3 +6,9 @@ instance Read b ) => Read (a, b) + +class Foo (a :: Type {- Weird -}) + +instance Eq Foo where + -- Weird + Foo == Foo = True diff --git a/testsuite/tests/printer/Test24533.stdout b/testsuite/tests/printer/Test24533.stdout index 55b22e09e20a2699ecf96c65fc90bf7d830168e6..5b4a56a66a83d6ff7e9b61d8efbba3ea1e8be025 100644 --- a/testsuite/tests/printer/Test24533.stdout +++ b/testsuite/tests/printer/Test24533.stdout @@ -13,8 +13,8 @@ [] (Just ((,) - { Test24533.hs:9:1 } - { Test24533.hs:8:13 }))) + { Test24533.hs:15:1 } + { Test24533.hs:14:16-19 }))) (EpaCommentsBalanced [(L (EpaSpan @@ -273,6 +273,323 @@ [] [] [] + (Nothing))))) + ,(L + (EpAnn + (EpaSpan { Test24533.hs:10:1-33 }) + (AnnListItem + []) + (EpaComments + [])) + (TyClD + (NoExtField) + (ClassDecl + ((,,) + [(AddEpAnn AnnClass (EpaSpan { Test24533.hs:10:1-5 }))] + (EpNoLayout) + (NoAnnSortKey)) + (Nothing) + (L + (EpAnn + (EpaSpan { Test24533.hs:10:7-9 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Foo})) + (HsQTvs + (NoExtField) + [(L + (EpAnn + (EpaSpan { Test24533.hs:10:11-33 }) + (AnnListItem + []) + (EpaComments + [(L + (EpaSpan + { Test24533.hs:10:22-32 }) + (EpaComment + (EpaBlockComment + "{- Weird -}") + { Test24533.hs:10:17-20 }))])) + (KindedTyVar + [(AddEpAnn AnnOpenP (EpaSpan { Test24533.hs:10:11 })) + ,(AddEpAnn AnnCloseP (EpaSpan { Test24533.hs:10:33 })) + ,(AddEpAnn AnnDcolon (EpaSpan { Test24533.hs:10:14-15 }))] + (HsBndrRequired + (NoExtField)) + (L + (EpAnn + (EpaSpan { Test24533.hs:10:12 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: a})) + (L + (EpAnn + (EpaSpan { Test24533.hs:10:17-20 }) + (AnnListItem + []) + (EpaComments + [])) + (HsTyVar + [] + (NotPromoted) + (L + (EpAnn + (EpaSpan { Test24533.hs:10:17-20 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Type}))))))]) + (Prefix) + [] + [] + {Bag(LocatedA (HsBind GhcPs)): + []} + [] + [] + []))) + ,(L + (EpAnn + (EpaSpan { Test24533.hs:(12,1)-(14,19) }) + (AnnListItem + []) + (EpaComments + [(L + (EpaSpan + { Test24533.hs:13:3-10 }) + (EpaComment + (EpaLineComment + "-- Weird") + { Test24533.hs:12:17-21 }))])) + (InstD + (NoExtField) + (ClsInstD + (NoExtField) + (ClsInstDecl + ((,,) + (Nothing) + [(AddEpAnn AnnInstance (EpaSpan { Test24533.hs:12:1-8 })) + ,(AddEpAnn AnnWhere (EpaSpan { Test24533.hs:12:17-21 }))] + (NoAnnSortKey)) + (L + (EpAnn + (EpaSpan { Test24533.hs:12:10-15 }) + (AnnListItem + []) + (EpaComments + [])) + (HsSig + (NoExtField) + (HsOuterImplicit + (NoExtField)) + (L + (EpAnn + (EpaSpan { Test24533.hs:12:10-15 }) + (AnnListItem + []) + (EpaComments + [])) + (HsAppTy + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.hs:12:10-11 }) + (AnnListItem + []) + (EpaComments + [])) + (HsTyVar + [] + (NotPromoted) + (L + (EpAnn + (EpaSpan { Test24533.hs:12:10-11 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Eq})))) + (L + (EpAnn + (EpaSpan { Test24533.hs:12:13-15 }) + (AnnListItem + []) + (EpaComments + [])) + (HsTyVar + [] + (NotPromoted) + (L + (EpAnn + (EpaSpan { Test24533.hs:12:13-15 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Foo})))))))) + {Bag(LocatedA (HsBind GhcPs)): + [(L + (EpAnn + (EpaSpan { Test24533.hs:14:3-19 }) + (AnnListItem + []) + (EpaComments + [])) + (FunBind + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.hs:14:7-8 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: ==})) + (MG + (FromSource) + (L + (EpAnn + (EpaSpan { Test24533.hs:14:3-19 }) + (AnnList + (Nothing) + (Nothing) + (Nothing) + [] + []) + (EpaComments + [])) + [(L + (EpAnn + (EpaSpan { Test24533.hs:14:3-19 }) + (AnnListItem + []) + (EpaComments + [])) + (Match + [] + (FunRhs + (L + (EpAnn + (EpaSpan { Test24533.hs:14:7-8 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: ==})) + (Infix) + (NoSrcStrict)) + [(L + (EpAnn + (EpaSpan { Test24533.hs:14:3-5 }) + (AnnListItem + []) + (EpaComments + [])) + (VisPat + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.hs:14:3-5 }) + (AnnListItem + []) + (EpaComments + [])) + (ConPat + [] + (L + (EpAnn + (EpaSpan { Test24533.hs:14:3-5 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Foo})) + (PrefixCon + [] + []))))) + ,(L + (EpAnn + (EpaSpan { Test24533.hs:14:10-12 }) + (AnnListItem + []) + (EpaComments + [])) + (VisPat + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.hs:14:10-12 }) + (AnnListItem + []) + (EpaComments + [])) + (ConPat + [] + (L + (EpAnn + (EpaSpan { Test24533.hs:14:10-12 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Foo})) + (PrefixCon + [] + [])))))] + (GRHSs + (EpaComments + []) + [(L + (EpAnn + (EpaSpan { Test24533.hs:14:14-19 }) + (NoEpAnns) + (EpaComments + [])) + (GRHS + (EpAnn + (EpaSpan { Test24533.hs:14:14-19 }) + (GrhsAnn + (Nothing) + (AddEpAnn AnnEqual (EpaSpan { Test24533.hs:14:14 }))) + (EpaComments + [])) + [] + (L + (EpAnn + (EpaSpan { Test24533.hs:14:16-19 }) + (AnnListItem + []) + (EpaComments + [])) + (HsVar + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.hs:14:16-19 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: True}))))))] + (EmptyLocalBinds + (NoExtField)))))]))))]} + [] + [] + [] (Nothing)))))])) @@ -291,8 +608,8 @@ [] (Just ((,) - { Test24533.ppr.hs:3:41 } - { Test24533.ppr.hs:3:40 }))) + { Test24533.ppr.hs:6:20 } + { Test24533.ppr.hs:6:16-19 }))) (EpaCommentsBalanced [(L (EpaSpan @@ -545,4 +862,311 @@ [] [] [] - (Nothing)))))])) \ No newline at end of file + (Nothing))))) + ,(L + (EpAnn + (EpaSpan { Test24533.ppr.hs:4:1-21 }) + (AnnListItem + []) + (EpaComments + [])) + (TyClD + (NoExtField) + (ClassDecl + ((,,) + [(AddEpAnn AnnClass (EpaSpan { Test24533.ppr.hs:4:1-5 }))] + (EpNoLayout) + (NoAnnSortKey)) + (Nothing) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:4:7-9 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Foo})) + (HsQTvs + (NoExtField) + [(L + (EpAnn + (EpaSpan { Test24533.ppr.hs:4:11-21 }) + (AnnListItem + []) + (EpaComments + [])) + (KindedTyVar + [(AddEpAnn AnnOpenP (EpaSpan { Test24533.ppr.hs:4:11 })) + ,(AddEpAnn AnnCloseP (EpaSpan { Test24533.ppr.hs:4:21 })) + ,(AddEpAnn AnnDcolon (EpaSpan { Test24533.ppr.hs:4:14-15 }))] + (HsBndrRequired + (NoExtField)) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:4:12 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: a})) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:4:17-20 }) + (AnnListItem + []) + (EpaComments + [])) + (HsTyVar + [] + (NotPromoted) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:4:17-20 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Type}))))))]) + (Prefix) + [] + [] + {Bag(LocatedA (HsBind GhcPs)): + []} + [] + [] + []))) + ,(L + (EpAnn + (EpaSpan { Test24533.ppr.hs:(5,1)-(6,19) }) + (AnnListItem + []) + (EpaComments + [])) + (InstD + (NoExtField) + (ClsInstD + (NoExtField) + (ClsInstDecl + ((,,) + (Nothing) + [(AddEpAnn AnnInstance (EpaSpan { Test24533.ppr.hs:5:1-8 })) + ,(AddEpAnn AnnWhere (EpaSpan { Test24533.ppr.hs:5:17-21 }))] + (NoAnnSortKey)) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:5:10-15 }) + (AnnListItem + []) + (EpaComments + [])) + (HsSig + (NoExtField) + (HsOuterImplicit + (NoExtField)) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:5:10-15 }) + (AnnListItem + []) + (EpaComments + [])) + (HsAppTy + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:5:10-11 }) + (AnnListItem + []) + (EpaComments + [])) + (HsTyVar + [] + (NotPromoted) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:5:10-11 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Eq})))) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:5:13-15 }) + (AnnListItem + []) + (EpaComments + [])) + (HsTyVar + [] + (NotPromoted) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:5:13-15 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Foo})))))))) + {Bag(LocatedA (HsBind GhcPs)): + [(L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:3-19 }) + (AnnListItem + []) + (EpaComments + [])) + (FunBind + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:7-8 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: ==})) + (MG + (FromSource) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:3-19 }) + (AnnList + (Nothing) + (Nothing) + (Nothing) + [] + []) + (EpaComments + [])) + [(L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:3-19 }) + (AnnListItem + []) + (EpaComments + [])) + (Match + [] + (FunRhs + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:7-8 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: ==})) + (Infix) + (NoSrcStrict)) + [(L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:3-5 }) + (AnnListItem + []) + (EpaComments + [])) + (VisPat + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:3-5 }) + (AnnListItem + []) + (EpaComments + [])) + (ConPat + [] + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:3-5 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Foo})) + (PrefixCon + [] + []))))) + ,(L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:10-12 }) + (AnnListItem + []) + (EpaComments + [])) + (VisPat + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:10-12 }) + (AnnListItem + []) + (EpaComments + [])) + (ConPat + [] + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:10-12 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: Foo})) + (PrefixCon + [] + [])))))] + (GRHSs + (EpaComments + []) + [(L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:14-19 }) + (NoEpAnns) + (EpaComments + [])) + (GRHS + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:14-19 }) + (GrhsAnn + (Nothing) + (AddEpAnn AnnEqual (EpaSpan { Test24533.ppr.hs:6:14 }))) + (EpaComments + [])) + [] + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:16-19 }) + (AnnListItem + []) + (EpaComments + [])) + (HsVar + (NoExtField) + (L + (EpAnn + (EpaSpan { Test24533.ppr.hs:6:16-19 }) + (NameAnnTrailing + []) + (EpaComments + [])) + (Unqual + {OccName: True}))))))] + (EmptyLocalBinds + (NoExtField)))))]))))]} + [] + [] + [] + (Nothing)))))])) + +