Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Alex D
GHC
Commits
f0bea9fa
Commit
f0bea9fa
authored
Nov 28, 2007
by
simonpj@microsoft.com
Browse files
Check for duplicate bindings in CoreLint
parent
3e1c50a6
Changes
1
Hide whitespace changes
Inline
Side-by-side
compiler/coreSyn/CoreLint.lhs
View file @
f0bea9fa
%
% (c) The University of Glasgow 2006
% (c) The GRASP/AQUA Project, Glasgow University, 1993-1998
...
...
@@ -42,6 +43,7 @@ import Coercion
import TyCon
import BasicTypes
import StaticFlags
import ListSetOps
import DynFlags
import Outputable
import Util
...
...
@@ -177,7 +179,8 @@ lintCoreBindings dflags whoDunnit binds
-- Put all the top-level binders in scope at the start
-- This is because transformation rules can bring something
-- into use 'unexpectedly'
lint_binds binds = addInScopeVars (bindersOfBinds binds) $
lint_binds binds = addLoc TopLevelBindings $
addInScopeVars (bindersOfBinds binds) $
mapM lint_bind binds
lint_bind (Rec prs) = mapM_ (lintSingleBinding TopLevel Recursive) prs
...
...
@@ -641,6 +644,7 @@ data LintLocInfo
| CasePat CoreAlt -- *Pattern* of the case alternative
| AnExpr CoreExpr -- Some expression
| ImportedUnfolding SrcLoc -- Some imported unfolding (ToDo: say which)
| TopLevelBindings
\end{code}
...
...
@@ -678,8 +682,13 @@ addLoc extra_loc m =
LintM (\ loc subst errs -> unLintM m (extra_loc:loc) subst errs)
addInScopeVars :: [Var] -> LintM a -> LintM a
addInScopeVars vars m =
LintM (\ loc subst errs -> unLintM m loc (extendTvInScope subst vars) errs)
addInScopeVars vars m
| null dups
= LintM (\ loc subst errs -> unLintM m loc (extendTvInScope subst vars) errs)
| otherwise
= addErrL (dupVars dups)
where
(_, dups) = removeDups compare vars
updateTvSubst :: TvSubst -> LintM a -> LintM a
updateTvSubst subst' m =
...
...
@@ -767,6 +776,8 @@ dumpLoc (CasePat (con, args, rhs))
dumpLoc (ImportedUnfolding locn)
= (locn, brackets (ptext SLIT("in an imported unfolding")))
dumpLoc TopLevelBindings
= (noSrcLoc, empty)
pp_binders :: [Var] -> SDoc
pp_binders bs = sep (punctuate comma (map pp_binder bs))
...
...
@@ -919,6 +930,10 @@ mkCastErr from_ty expr_ty
ptext SLIT("Type of enclosed expr:") <+> ppr expr_ty
]
dupVars vars
= hang (ptext SLIT("Duplicate variables brought into scope"))
2 (ppr vars)
mkStrangeTyMsg e
= ptext SLIT("Type where expression expected:") <+> ppr e
\end{code}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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