Commit 9afd9251 authored by Ryan Scott's avatar Ryan Scott Committed by Marge Bot

Refactoring: Use bindSigTyVarsFV in rnMethodBinds

`rnMethodBinds` was explicitly using `xoptM` to determine if
`ScopedTypeVariables` is enabled before bringing type variables
bound by the class/instance header into scope. However, this `xoptM`
logic is already performed by the `bindSigTyVarsFV` function. This
patch uses `bindSigTyVarsFV` in `rnMethodBinds` to reduce the number
of places where we need to consult if `ScopedTypeVariables` is on.

This is purely refactoring, and there should be no user-visible
change in behavior.
parent 94e7c563
Pipeline #19024 failed with stages
in 43 minutes and 36 seconds
...@@ -869,8 +869,7 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs ...@@ -869,8 +869,7 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs
-- Rename the bindings RHSs. Again there's an issue about whether the -- Rename the bindings RHSs. Again there's an issue about whether the
-- type variables from the class/instance head are in scope. -- type variables from the class/instance head are in scope.
-- Answer no in Haskell 2010, but yes if you have -XScopedTypeVariables -- Answer no in Haskell 2010, but yes if you have -XScopedTypeVariables
; scoped_tvs <- xoptM LangExt.ScopedTypeVariables ; (binds'', bind_fvs) <- bindSigTyVarsFV ktv_names $
; (binds'', bind_fvs) <- maybe_extend_tyvar_env scoped_tvs $
do { binds_w_dus <- mapBagM (rnLBind (mkScopedTvFn other_sigs')) binds' do { binds_w_dus <- mapBagM (rnLBind (mkScopedTvFn other_sigs')) binds'
; let bind_fvs = foldr (\(_,_,fv1) fv2 -> fv1 `plusFV` fv2) ; let bind_fvs = foldr (\(_,_,fv1) fv2 -> fv1 `plusFV` fv2)
emptyFVs binds_w_dus emptyFVs binds_w_dus
...@@ -878,12 +877,6 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs ...@@ -878,12 +877,6 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs
; return ( binds'', spec_inst_prags' ++ other_sigs' ; return ( binds'', spec_inst_prags' ++ other_sigs'
, sig_fvs `plusFV` sip_fvs `plusFV` bind_fvs) } , sig_fvs `plusFV` sip_fvs `plusFV` bind_fvs) }
where
-- For the method bindings in class and instance decls, we extend
-- the type variable environment iff -XScopedTypeVariables
maybe_extend_tyvar_env scoped_tvs thing_inside
| scoped_tvs = extendTyVarEnvFVRn ktv_names thing_inside
| otherwise = thing_inside
rnMethodBindLHS :: Bool -> Name rnMethodBindLHS :: Bool -> Name
-> LHsBindLR GhcPs GhcPs -> LHsBindLR GhcPs GhcPs
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment