Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Alexis King
GHC
Commits
ddb50b31
Commit
ddb50b31
authored
Dec 20, 2011
by
dterei
Browse files
Move function from where clause to top level
parent
e1a8d3fd
Changes
1
Hide whitespace changes
Inline
Side-by-side
compiler/main/HscMain.hs
View file @
ddb50b31
...
...
@@ -911,20 +911,18 @@ hscCheckSafeImports tcg_env = do
text
"Rule
\"
"
<>
ftext
n
<>
text
"
\"
ignored"
$+$
text
"User defined rules are disabled under Safe Haskell"
-- | Validate that safe imported modules are actually safe.
-- For modules in the HomePackage (the package the module we
-- are compiling in resides) this just involves checking its
-- trust type is 'Safe' or 'Trustworthy'. For modules that
-- reside in another package we also must check that the
-- external pacakge is trusted. See the Note [Safe Haskell
-- Trust Check] above for more information.
-- | Validate that safe imported modules are actually safe. For modules in the
-- HomePackage (the package the module we are compiling in resides) this just
-- involves checking its trust type is 'Safe' or 'Trustworthy'. For modules
-- that reside in another package we also must check that the external pacakge
-- is trusted. See the Note [Safe Haskell Trust Check] above for more
-- information.
--
-- The code for this is quite tricky as the whole algorithm
-- is done in a few distinct phases in different parts of the
-- code base. See RnNames.rnImportDecl for where package trust
-- dependencies for a module are collected and unioned.
-- Specifically see the Note [RnNames . Tracking Trust Transitively]
-- and the Note [RnNames . Trust Own Package].
-- The code for this is quite tricky as the whole algorithm is done in a few
-- distinct phases in different parts of the code base. See
-- RnNames.rnImportDecl for where package trust dependencies for a module are
-- collected and unioned. Specifically see the Note [RnNames . Tracking Trust
-- Transitively] and the Note [RnNames . Trust Own Package].
checkSafeImports
::
DynFlags
->
TcGblEnv
->
Hsc
TcGblEnv
checkSafeImports
dflags
tcg_env
=
do
...
...
@@ -941,7 +939,7 @@ checkSafeImports dflags tcg_env
clearWarnings
logWarnings
oldErrs
-- See the Note [
Safe Haskell Inference]
-- See the Note [Safe Haskell Inference]
case
(
not
$
isEmptyBag
errs
)
of
-- We have errors!
...
...
@@ -953,7 +951,7 @@ checkSafeImports dflags tcg_env
-- All good matey!
False
->
do
when
(
packageTrustOn
dflags
)
$
checkPkgTrust
pkg_reqs
when
(
packageTrustOn
dflags
)
$
checkPkgTrust
dflags
pkg_reqs
-- add in trusted package requirements for this module
let
new_trust
=
emptyImportAvails
{
imp_trust_pkgs
=
catMaybes
pkgs
}
return
tcg_env
{
tcg_imports
=
imp_info
`
plusImportAvails
`
new_trust
}
...
...
@@ -986,22 +984,6 @@ checkSafeImports dflags tcg_env
checkSafe
(
_
,
_
,
False
)
=
return
Nothing
checkSafe
(
m
,
l
,
True
)
=
hscCheckSafe'
dflags
m
l
-- Here we check the transitive package trust requirements are OK still.
checkPkgTrust
::
[
PackageId
]
->
Hsc
()
checkPkgTrust
pkgs
=
case
errors
of
[]
->
return
()
_
->
(
liftIO
.
throwIO
.
mkSrcErr
.
listToBag
)
errors
where
errors
=
catMaybes
$
map
go
pkgs
go
pkg
|
trusted
$
getPackageDetails
(
pkgState
dflags
)
pkg
=
Nothing
|
otherwise
=
Just
$
mkPlainErrMsg
noSrcSpan
$
text
"The package ("
<>
ppr
pkg
<>
text
") is required"
<>
text
" to be trusted but it isn't!"
-- | Check that a module is safe to import.
--
-- We return a package id if the safe import is OK and a Nothing otherwise
...
...
@@ -1055,11 +1037,10 @@ hscCheckSafe' dflags m l = do
<+>
text
"can't be safely imported!"
<+>
text
"The module itself isn't safe."
-- | Check the package a module resides in is trusted.
-- Safe compiled modules are trusted without requiring
-- that their package is trusted. For trustworthy modules,
-- modules in the home package are trusted but otherwise
-- we check the package trust flag.
-- | Check the package a module resides in is trusted. Safe compiled
-- modules are trusted without requiring that their package is trusted. For
-- trustworthy modules, modules in the home package are trusted but
-- otherwise we check the package trust flag.
packageTrusted
::
SafeHaskellMode
->
Bool
->
Module
->
Bool
packageTrusted
_
_
_
|
not
(
packageTrustOn
dflags
)
=
True
...
...
@@ -1084,6 +1065,22 @@ hscCheckSafe' dflags m l = do
|
thisPackage
dflags
==
modulePackageId
m
=
True
|
otherwise
=
False
-- | Check the list of packages are trusted.
checkPkgTrust
::
DynFlags
->
[
PackageId
]
->
Hsc
()
checkPkgTrust
dflags
pkgs
=
case
errors
of
[]
->
return
()
_
->
(
liftIO
.
throwIO
.
mkSrcErr
.
listToBag
)
errors
where
errors
=
catMaybes
$
map
go
pkgs
go
pkg
|
trusted
$
getPackageDetails
(
pkgState
dflags
)
pkg
=
Nothing
|
otherwise
=
Just
$
mkPlainErrMsg
noSrcSpan
$
text
"The package ("
<>
ppr
pkg
<>
text
") is required"
<>
text
" to be trusted but it isn't!"
-- | Set module to unsafe and wipe trust information.
--
-- Make sure to call this method to set a module to infered unsafe,
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment