summaryrefslogtreecommitdiff
path: root/compiler/rename/RnExpr.lhs
diff options
context:
space:
mode:
authorMerijn Verstraaten <merijn@inconsistent.nl>2014-11-21 15:32:38 -0600
committerAustin Seipp <austin@well-typed.com>2014-11-21 17:04:57 -0600
commit2cc854b7133e38c7ad1107057931761782d03594 (patch)
tree399b3ccdcc7c43dce2e598d1ea42e72ff818000c /compiler/rename/RnExpr.lhs
parent624a7c5a2eee0c0ba486a45550680052c2c79849 (diff)
downloadhaskell-2cc854b7133e38c7ad1107057931761782d03594.tar.gz
Add -fdefer-typed-holes flag which defers hole errors to runtime.
Summary: As proposed by Richard on Trac. This patch adds a new flag -fdefer-typed-holes and changes the semantics of the -fno-warn-typed-holes flag. To summarise, by default GHC has typed holes enabled and produces a compile error when it encounters a typed hole. When -fdefer-type-errors OR -fdefer-typed-holes is enabled, hole errors are converted to warnings and result in runtime errors when evaluated. The warning flag -fwarn-typed-holes is on by default. Without -fdefer-type-errors or -fdefer-typed-holes this flag is a no-op, since typed holes are an error under these conditions. If either of the defer flags are enabled (converting typed hole errors into warnings) the -fno-warn-typed-holes flag disables the warnings. This means compilation silently succeeds and evaluating a hole will produce a runtime error. The rationale behind allowing typed holes warnings to be silenced is that tools like Syntastic for vim highlight warnings and hole warnings may be undesirable. Signed-off-by: Merijn Verstraaten <merijn@inconsistent.nl> Test Plan: validate Reviewers: austin, simonpj, thomie Reviewed By: simonpj, thomie Subscribers: Fuuzetsu, thomie, carter Differential Revision: https://phabricator.haskell.org/D442 GHC Trac Issues: #9497 Conflicts: compiler/main/DynFlags.hs
Diffstat (limited to 'compiler/rename/RnExpr.lhs')
-rw-r--r--compiler/rename/RnExpr.lhs9
1 files changed, 2 insertions, 7 deletions
diff --git a/compiler/rename/RnExpr.lhs b/compiler/rename/RnExpr.lhs
index 30e7112f12..7ef815ff29 100644
--- a/compiler/rename/RnExpr.lhs
+++ b/compiler/rename/RnExpr.lhs
@@ -88,8 +88,7 @@ finishHsVar name
rnExpr (HsVar v)
= do { mb_name <- lookupOccRn_maybe v
; case mb_name of {
- Nothing -> do { opt_TypeHoles <- woptM Opt_WarnTypedHoles
- ; if opt_TypeHoles && startsWithUnderscore (rdrNameOcc v)
+ Nothing -> do { if startsWithUnderscore (rdrNameOcc v)
then return (HsUnboundVar v, emptyFVs)
else do { n <- reportUnboundName v; finishHsVar n } } ;
Just name
@@ -300,11 +299,7 @@ Since all the symbols are reservedops we can simply reject them.
We return a (bogus) EWildPat in each case.
\begin{code}
-rnExpr e@EWildPat = do { holes <- woptM Opt_WarnTypedHoles
- ; if holes
- then return (hsHoleExpr, emptyFVs)
- else patSynErr e
- }
+rnExpr EWildPat = return (hsHoleExpr, emptyFVs)
rnExpr e@(EAsPat {}) = patSynErr e
rnExpr e@(EViewPat {}) = patSynErr e
rnExpr e@(ELazyPat {}) = patSynErr e