[commit: ghc] master: Check for external names/exported ids in non-top-level binders during Lint (11feda6)
Max Bolingbroke
batterseapower at hotmail.com
Wed Mar 21 22:10:06 CET 2012
Repository : ssh://darcs.haskell.org//srv/darcs/ghc
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/11feda6a360d48bc930e20c14e8cf052ef0795e9
>---------------------------------------------------------------
commit 11feda6a360d48bc930e20c14e8cf052ef0795e9
Author: Max Bolingbroke <batterseapower at hotmail.com>
Date: Tue Mar 20 17:58:57 2012 +0000
Check for external names/exported ids in non-top-level binders during Lint
>---------------------------------------------------------------
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 4a5143b..e07c87b 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
More information about the Cvs-ghc
mailing list