diff options
author | Max Bolingbroke <batterseapower@hotmail.com> | 2012-03-20 17:58:57 +0000 |
---|---|---|
committer | Max Bolingbroke <batterseapower@hotmail.com> | 2012-03-21 21:04:10 +0000 |
commit | 11feda6a360d48bc930e20c14e8cf052ef0795e9 (patch) | |
tree | 9b7a43fb311beb1372617df4a6adbd2aca16f52c /compiler/coreSyn | |
parent | a067f1ffc86d0e7d0221af593ca2727cca793c81 (diff) | |
download | haskell-11feda6a360d48bc930e20c14e8cf052ef0795e9.tar.gz |
Check for external names/exported ids in non-top-level binders during Lint
Diffstat (limited to 'compiler/coreSyn')
-rw-r--r-- | compiler/coreSyn/CoreLint.lhs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/compiler/coreSyn/CoreLint.lhs b/compiler/coreSyn/CoreLint.lhs index 4a5143bcb9..e07c87bbc5 100644 --- a/compiler/coreSyn/CoreLint.lhs +++ b/compiler/coreSyn/CoreLint.lhs @@ -190,6 +190,12 @@ lintSingleBinding top_lvl_flag rec_flag (binder,rhs) ; checkL (not (isStrictId binder) || (isNonRec rec_flag && not (isTopLevel top_lvl_flag))) (mkStrictMsg binder) + -- Check that if the binder is local, it is not marked as exported + ; checkL (not (isExportedId binder) || isTopLevel top_lvl_flag) + (mkNonTopExportedMsg binder) + -- Check that if the binder is local, it does not have an external name + ; checkL (not (isExternalName (Var.varName binder)) || isTopLevel top_lvl_flag) + (mkNonTopExternalNameMsg binder) -- Check whether binder's specialisations contain any out-of-scope variables ; mapM_ (checkBndrIdInScope binder) bndr_vars @@ -1220,6 +1226,13 @@ mkStrictMsg binder hsep [ptext (sLit "Binder's demand info:"), ppr (idDemandInfo binder)] ] +mkNonTopExportedMsg :: Id -> MsgDoc +mkNonTopExportedMsg binder + = hsep [ptext (sLit "Non-top-level binder is marked as exported:"), ppr binder] + +mkNonTopExternalNameMsg :: Id -> MsgDoc +mkNonTopExternalNameMsg binder + = hsep [ptext (sLit "Non-top-level binder has an external name:"), ppr binder] mkKindErrMsg :: TyVar -> Type -> MsgDoc mkKindErrMsg tyvar arg_ty |