diff options
Diffstat (limited to 'compiler/parser/RdrHsSyn.hs')
-rw-r--r-- | compiler/parser/RdrHsSyn.hs | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/compiler/parser/RdrHsSyn.hs b/compiler/parser/RdrHsSyn.hs index 1c03344eb2..534330a003 100644 --- a/compiler/parser/RdrHsSyn.hs +++ b/compiler/parser/RdrHsSyn.hs @@ -567,19 +567,21 @@ mkConDeclH98 name mb_forall cxt args mkGadtDecl :: [Located RdrName] -> LHsType GhcPs -- Always a HsForAllTy - -> ConDecl GhcPs + -> ([AddAnn],ConDecl GhcPs) mkGadtDecl names ty - = ConDeclGADT { con_names = names - , con_forall = isLHsForAllTy ty - , con_qvars = mkHsQTvs tvs - , con_mb_cxt = mcxt - , con_args = args - , con_res_ty = res_ty - , con_doc = Nothing } + = (anns, ConDeclGADT { con_names = names + , con_forall = isLHsForAllTy ty + , con_qvars = L tvloc $ mkHsQTvs tvs + , con_mb_cxt = mcxt + , con_args = args + , con_res_ty = res_ty + , con_doc = Nothing }) where - (tvs, rho) = splitLHsForAllTy ty + (L tvloc tvs, rho) = splitLHsForAllTy ty (mcxt, tau) = split_rho rho + anns = getHsParTyAsAnns ty ++ getHsParTyAsAnns rho ++ getHsParTyAsAnns tau + split_rho (L _ (HsQualTy { hst_ctxt = cxt, hst_body = tau })) = (Just cxt, tau) split_rho (L _ (HsParTy ty)) = split_rho ty @@ -592,6 +594,10 @@ mkGadtDecl names ty split_tau (L _ (HsParTy ty)) = split_tau ty split_tau tau = (PrefixCon [], tau) +getHsParTyAsAnns :: LHsType GhcPs -> [AddAnn] +getHsParTyAsAnns (L l (HsParTy ty)) = mkParensApiAnn l ++ getHsParTyAsAnns ty +getHsParTyAsAnns _ = [] + setRdrNameSpace :: RdrName -> NameSpace -> RdrName -- ^ This rather gruesome function is used mainly by the parser. -- When parsing: @@ -713,7 +719,7 @@ checkTyVars :: SDoc -> SDoc -> Located RdrName -> [LHsType GhcPs] -- Convert.hs checkTyVars pp_what equals_or_where tc tparms = do { tvs <- mapM chk tparms - ; return (mkHsQTvs tvs) } + ; return (noLoc $ mkHsQTvs tvs) } where chk (L _ (HsParTy ty)) = chk ty |