diff options
author | Shayne Fletcher <shayne@shaynefletcher.org> | 2021-05-15 21:15:41 +1000 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-05-19 23:40:12 -0400 |
commit | d48b7e5c2fae5db1973a767be45aba82b2aa727c (patch) | |
tree | b0af0b799854da5e4b9efbe29a24e02d4db71641 /compiler/GHC/Rename | |
parent | df4a0a53691cd833f54eb443401243dd9c964196 (diff) | |
download | haskell-d48b7e5c2fae5db1973a767be45aba82b2aa727c.tar.gz |
Changes to HsRecField'
Diffstat (limited to 'compiler/GHC/Rename')
-rw-r--r-- | compiler/GHC/Rename/Expr.hs | 20 | ||||
-rw-r--r-- | compiler/GHC/Rename/Pat.hs | 54 |
2 files changed, 38 insertions, 36 deletions
diff --git a/compiler/GHC/Rename/Expr.hs b/compiler/GHC/Rename/Expr.hs index e4b4b10363..d97266d7f2 100644 --- a/compiler/GHC/Rename/Expr.hs +++ b/compiler/GHC/Rename/Expr.hs @@ -424,8 +424,8 @@ rnExpr (RecordCon { rcon_con = con_id , fvs `plusFV` plusFVs fvss `addOneFV` con_name) } where mk_hs_var l n = HsVar noExtField (L (noAnnSrcSpan l) n) - rn_field (L l fld) = do { (arg', fvs) <- rnLExpr (hsRecFieldArg fld) - ; return (L l (fld { hsRecFieldArg = arg' }), fvs) } + rn_field (L l fld) = do { (arg', fvs) <- rnLExpr (hfbRHS fld) + ; return (L l (fld { hfbRHS = arg' }), fvs) } rnExpr (RecordUpd { rupd_expr = expr, rupd_flds = rbinds }) = case rbinds of @@ -437,7 +437,7 @@ rnExpr (RecordUpd { rupd_expr = expr, rupd_flds = rbinds }) Right flds -> -- 'OverloadedRecordUpdate' is in effect. Record dot update desugaring. do { ; unlessXOptM LangExt.RebindableSyntax $ addErr $ text "RebindableSyntax is required if OverloadedRecordUpdate is enabled." - ; let punnedFields = [fld | (L _ fld) <- flds, hsRecPun fld] + ; let punnedFields = [fld | (L _ fld) <- flds, hfbPun fld] ; punsEnabled <-xoptM LangExt.RecordPuns ; unless (null punnedFields || punsEnabled) $ addErr $ text "For this to work enable NamedFieldPuns." @@ -2618,7 +2618,7 @@ mkProjection _ _ [] = panic "mkProjection: The impossible happened" -- e.g. Suppose an update like foo.bar = 1. -- We calculate the function \a -> setField @"foo" a (setField @"bar" (getField @"foo" a) 1). mkProjUpdateSetField :: Name -> Name -> LHsRecProj GhcRn (LHsExpr GhcRn) -> (LHsExpr GhcRn -> LHsExpr GhcRn) -mkProjUpdateSetField get_field set_field (L _ (HsRecField { hsRecFieldLbl = (L _ (FieldLabelStrings flds')), hsRecFieldArg = arg } )) +mkProjUpdateSetField get_field set_field (L _ (HsFieldBind { hfbLHS = (L _ (FieldLabelStrings flds')), hfbRHS = arg } )) = let { ; flds = map (fmap (unLoc . hflLabel)) flds' ; final = last flds -- quux @@ -2643,9 +2643,11 @@ rnHsUpdProjs us = do pure (u, plusFVs fvs) where rnRecUpdProj :: LHsRecUpdProj GhcPs -> RnM (LHsRecUpdProj GhcRn, FreeVars) - rnRecUpdProj (L l (HsRecField _ fs arg pun)) + rnRecUpdProj (L l (HsFieldBind _ fs arg pun)) = do { (arg, fv) <- rnLExpr arg - ; return $ (L l (HsRecField { hsRecFieldAnn = noAnn - , hsRecFieldLbl = fmap rnFieldLabelStrings fs - , hsRecFieldArg = arg - , hsRecPun = pun}), fv) } + ; return $ + (L l (HsFieldBind { + hfbAnn = noAnn + , hfbLHS = fmap rnFieldLabelStrings fs + , hfbRHS = arg + , hfbPun = pun}), fv ) } diff --git a/compiler/GHC/Rename/Pat.hs b/compiler/GHC/Rename/Pat.hs index c86e3f6ec2..8681903590 100644 --- a/compiler/GHC/Rename/Pat.hs +++ b/compiler/GHC/Rename/Pat.hs @@ -590,15 +590,15 @@ rnHsRecPatsAndThen mk (L _ con) where mkVarPat l n = VarPat noExtField (L (noAnnSrcSpan l) n) rn_field (L l fld, n') = - do { arg' <- rnLPatAndThen (nested_mk dd mk n') (hsRecFieldArg fld) - ; return (L l (fld { hsRecFieldArg = arg' })) } + do { arg' <- rnLPatAndThen (nested_mk dd mk n') (hfbRHS fld) + ; return (L l (fld { hfbRHS = arg' })) } loc = maybe noSrcSpan getLoc dd -- Get the arguments of the implicit binders implicit_binders fs (unLoc -> n) = collectPatsBinders CollNoDictBinders implicit_pats where - implicit_pats = map (hsRecFieldArg . unLoc) (drop n fs) + implicit_pats = map (hfbRHS . unLoc) (drop n fs) -- Don't warn for let P{..} = ... in ... check_unused_wildcard = case mk of @@ -659,11 +659,11 @@ rnHsRecFields ctxt mk_arg (HsRecFields { rec_flds = flds, rec_dotdot = dotdot }) rn_fld :: Bool -> Maybe Name -> LHsRecField GhcPs (LocatedA arg) -> RnM (LHsRecField GhcRn (LocatedA arg)) rn_fld pun_ok parent (L l - (HsRecField - { hsRecFieldLbl = + (HsFieldBind + { hfbLHS = (L loc (FieldOcc _ (L ll lbl))) - , hsRecFieldArg = arg - , hsRecPun = pun })) + , hfbRHS = arg + , hfbPun = pun })) = do { sel <- setSrcSpan loc $ lookupRecFieldOcc parent lbl ; arg' <- if pun then do { checkErr pun_ok (badPun (L loc lbl)) @@ -671,11 +671,11 @@ rnHsRecFields ctxt mk_arg (HsRecFields { rec_flds = flds, rec_dotdot = dotdot }) ; let arg_rdr = mkRdrUnqual (rdrNameOcc lbl) ; return (L (noAnnSrcSpan loc) (mk_arg loc arg_rdr)) } else return arg - ; return (L l (HsRecField - { hsRecFieldAnn = noAnn - , hsRecFieldLbl = (L loc (FieldOcc sel (L ll lbl))) - , hsRecFieldArg = arg' - , hsRecPun = pun })) } + ; return (L l (HsFieldBind + { hfbAnn = noAnn + , hfbLHS = (L loc (FieldOcc sel (L ll lbl))) + , hfbRHS = arg' + , hfbPun = pun })) } rn_dotdot :: Maybe (Located Int) -- See Note [DotDot fields] in GHC.Hs.Pat @@ -716,12 +716,12 @@ rnHsRecFields ctxt mk_arg (HsRecFields { rec_flds = flds, rec_dotdot = dotdot }) ; addUsedGREs dot_dot_gres ; let locn = noAnnSrcSpan loc - ; return [ L (noAnnSrcSpan loc) (HsRecField - { hsRecFieldAnn = noAnn - , hsRecFieldLbl + ; return [ L (noAnnSrcSpan loc) (HsFieldBind + { hfbAnn = noAnn + , hfbLHS = L loc (FieldOcc sel (L (noAnnSrcSpan loc) arg_rdr)) - , hsRecFieldArg = L locn (mk_arg loc arg_rdr) - , hsRecPun = False }) + , hfbRHS = L locn (mk_arg loc arg_rdr) + , hfbPun = False }) | fl <- dot_dot_fields , let sel = flSelector fl , let arg_rdr = mkVarUnqual (flLabel fl) ] } @@ -763,9 +763,9 @@ rnHsRecUpdFields flds where rn_fld :: Bool -> DuplicateRecordFields -> LHsRecUpdField GhcPs -> RnM (LHsRecUpdField GhcRn, FreeVars) - rn_fld pun_ok dup_fields_ok (L l (HsRecField { hsRecFieldLbl = L loc f - , hsRecFieldArg = arg - , hsRecPun = pun })) + rn_fld pun_ok dup_fields_ok (L l (HsFieldBind { hfbLHS = L loc f + , hfbRHS = arg + , hfbPun = pun })) = do { let lbl = rdrNameAmbiguousFieldOcc f ; mb_sel <- setSrcSpan loc $ -- Defer renaming of overloaded fields to the typechecker @@ -785,10 +785,10 @@ rnHsRecUpdFields flds in (Unambiguous sel_name (L (noAnnSrcSpan loc) lbl), fvs `addOneFV` sel_name) AmbiguousFields -> (Ambiguous noExtField (L (noAnnSrcSpan loc) lbl), fvs) - ; return (L l (HsRecField { hsRecFieldAnn = noAnn - , hsRecFieldLbl = L loc lbl' - , hsRecFieldArg = arg'' - , hsRecPun = pun }), fvs') } + ; return (L l (HsFieldBind { hfbAnn = noAnn + , hfbLHS = L loc lbl' + , hfbRHS = arg'' + , hfbPun = pun }), fvs') } dup_flds :: [NE.NonEmpty RdrName] -- Each list represents a RdrName that occurred more than once @@ -799,14 +799,14 @@ rnHsRecUpdFields flds getFieldIds :: [LHsRecField GhcRn arg] -> [Name] -getFieldIds flds = map (unLoc . hsRecFieldSel . unLoc) flds +getFieldIds flds = map (hsRecFieldSel . unLoc) flds getFieldLbls :: forall p arg . UnXRec p => [LHsRecField p arg] -> [RdrName] getFieldLbls flds - = map (unLoc . rdrNameFieldOcc . unLoc . hsRecFieldLbl . unXRec @p) flds + = map (unLoc . rdrNameFieldOcc . unXRec @p . hfbLHS . unXRec @p) flds getFieldUpdLbls :: [LHsRecUpdField GhcPs] -> [RdrName] -getFieldUpdLbls flds = map (rdrNameAmbiguousFieldOcc . unLoc . hsRecFieldLbl . unLoc) flds +getFieldUpdLbls flds = map (rdrNameAmbiguousFieldOcc . unLoc . hfbLHS . unLoc) flds needFlagDotDot :: HsRecFieldContext -> SDoc needFlagDotDot ctxt = vcat [text "Illegal `..' in record" <+> pprRFC ctxt, |