summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornineonine <mail4chemik@gmail.com>2021-08-23 09:41:59 -0700
committerSimon Peyton Jones <simonpj@microsoft.com>2021-11-15 23:22:30 +0000
commit89491f38b7cc865eea989fb60a8018ed1d27ab7f (patch)
tree1ad34917be1e05d0018a1163546a42f6418c54cc
parent4e698ffaf857167e97f4d1ce84980fb2f6844ce3 (diff)
downloadhaskell-89491f38b7cc865eea989fb60a8018ed1d27ab7f.tar.gz
Revert nameIsExternalOrFrom for now
-rw-r--r--compiler/GHC/Stg/FVs.hs20
-rw-r--r--compiler/GHC/Types/Name.hs8
2 files changed, 15 insertions, 13 deletions
diff --git a/compiler/GHC/Stg/FVs.hs b/compiler/GHC/Stg/FVs.hs
index 50854f73f8..caf28ce43e 100644
--- a/compiler/GHC/Stg/FVs.hs
+++ b/compiler/GHC/Stg/FVs.hs
@@ -48,7 +48,7 @@ import GHC.Prelude hiding (mod)
import GHC.Stg.Syntax
import GHC.Types.Id
-import GHC.Types.Name (Name, nameIsExternalFrom)
+import GHC.Types.Name (Name, nameIsLocalOrFrom)
import GHC.Types.Name.Env
import GHC.Utils.Outputable
import GHC.Utils.Panic
@@ -204,9 +204,11 @@ bindingFVs bounds env body_fv b =
pairs' = zip bndrs rhss
id_sets = delDVarSetList (unionDVarSets (body_fv:rhs_id_sets)) bndrs
where
- var_fvs :: Var -> TopIds
- var_fvs v | nameIsExternalFrom (mod env) (idName v) = unitVarSet v
- | otherwise = emptyVarSet
+ var_fvs :: NestedIds -> Var -> TopIds
+ var_fvs bounds v
+ | not (elemVarSet v bounds)
+ , nameIsLocalOrFrom (mod env) (idName v) = unitVarSet v
+ | otherwise = emptyVarSet
exprFVs :: NestedIds -> Env -> StgExpr -> (CgStgExpr, TopIds, DIdSet)
@@ -215,7 +217,7 @@ bindingFVs bounds env body_fv b =
go (StgApp f as)
| (args_fvs, id_set) <- argsFVs bounds env as
= ( StgApp f as
- , var_fvs f `unionVarSet` args_fvs
+ , var_fvs bounds f `unionVarSet` args_fvs
, unionDVarSet (id_set `dVarSetIntersectVarSet` locals env) (mkFreeVarSet env [f]))
go (StgLit lit) = (StgLit lit, emptyVarSet, emptyDVarSet)
go (StgConApp dc n as tys)
@@ -265,12 +267,12 @@ bindingFVs bounds env body_fv b =
= (StgRhsCon ccs dc mu ts bs, fvs, id_set)
argsFVs :: NestedIds -> Env -> [StgArg] -> (TopIds, DIdSet)
- argsFVs _ env = foldl' f (emptyVarSet, emptyDVarSet)
+ argsFVs bounds env = foldl' f (emptyVarSet, emptyDVarSet)
where
- f (fvs,ids) StgLitArg{} = (fvs, ids )
- f (fvs,ids) (StgVarArg v) = (fvs', ids')
+ f (fvs,ids) StgLitArg{} = (fvs, ids)
+ f (fvs,ids) (StgVarArg v) = (fvs', ids')
where
- !fvs' = var_fvs v `unionVarSet` fvs
+ !fvs' = var_fvs bounds v `unionVarSet` fvs
!ids' | v `elemVarSet` locals env
= extendDVarSet ids v
| otherwise = ids
diff --git a/compiler/GHC/Types/Name.hs b/compiler/GHC/Types/Name.hs
index 9be42a7525..2c3cfac8c5 100644
--- a/compiler/GHC/Types/Name.hs
+++ b/compiler/GHC/Types/Name.hs
@@ -64,7 +64,7 @@ module GHC.Types.Name (
isWiredInName, isWiredIn, isBuiltInSyntax,
isHoleName,
wiredInNameTyThing_maybe,
- nameIsLocalOrFrom, nameIsExternalFrom, nameIsHomePackage,
+ nameIsLocalOrFrom, nameIsExternalOrFrom, nameIsHomePackage,
nameIsHomePackageImport, nameIsFromExternalPackage,
stableNameCmp,
@@ -357,10 +357,10 @@ nameIsLocalOrFrom from name
| Just mod <- nameModule_maybe name = is_interactive_or_from from mod
| otherwise = True
-nameIsExternalFrom :: Module -> Name -> Bool
--- ^ Returns True if the name is external or from the 'interactive package
+nameIsExternalOrFrom :: Module -> Name -> Bool
+-- ^ Returns True if the name is external or from the 'interactive' package
-- See documentation of `nameIsLocalOrFrom` function
-nameIsExternalFrom from name
+nameIsExternalOrFrom from name
| Just mod <- nameModule_maybe name = is_interactive_or_from from mod
| otherwise = False