[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