summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Miedema <thomasmiedema@gmail.com>2015-10-07 20:36:54 -0500
committerAustin Seipp <austin@well-typed.com>2015-10-07 20:37:23 -0500
commite2b579e8d77357e8b36f57d15daead101586ac8e (patch)
tree83b1d7dfccaceaf27a8bfafd07473c70d326b8b3
parent69a6e4258786894578ffed2a1d907a74c52d779b (diff)
downloadhaskell-e2b579e8d77357e8b36f57d15daead101586ac8e.tar.gz
Parser: revert some error messages to what they were before 7.10
Among doing other things, Phab:D201 (bc2289e13d9586be087bd8136943dc35a0130c88) tried to improve the error messages thrown by the parser. For example a missing else clause now prints "parse error in if statement: else clause empty" instead of "parse error (possibly incorrect indentation or mismatched brackets)". Some error messages got much worse however (see tests), and the result seems to be a net negative. Although not entirely satisfactory, this commits therefore reverts those parser changes. Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D1309 GHC Trac Issues: #10498
-rw-r--r--compiler/parser/Parser.y31
-rw-r--r--testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr2
-rw-r--r--testsuite/tests/parser/should_fail/T10498a.hs14
-rw-r--r--testsuite/tests/parser/should_fail/T10498a.stderr2
-rw-r--r--testsuite/tests/parser/should_fail/T10498b.hs7
-rw-r--r--testsuite/tests/parser/should_fail/T10498b.stderr2
-rw-r--r--testsuite/tests/parser/should_fail/all.T2
-rw-r--r--testsuite/tests/parser/should_fail/readFail020.stderr3
8 files changed, 29 insertions, 34 deletions
diff --git a/compiler/parser/Parser.y b/compiler/parser/Parser.y
index 7079a949f1..9245deb459 100644
--- a/compiler/parser/Parser.y
+++ b/compiler/parser/Parser.y
@@ -2182,37 +2182,6 @@ exp10 :: { LHsExpr RdrName }
-- hdaume: core annotation
| fexp { $1 }
- -- parsing error messages go below here
- | '\\' apat apats opt_asig '->' error {% parseErrorSDoc (combineLocs $1 $5) $ text
- "parse error in lambda: no expression after '->'"
- }
- | '\\' error {% parseErrorSDoc (getLoc $1) $ text
- "parse error: naked lambda expression '\'"
- }
- | 'let' binds 'in' error {% parseErrorSDoc (combineLocs $1 $2) $ text
- "parse error in let binding: missing expression after 'in'"
- }
- | 'let' binds error {% parseErrorSDoc (combineLocs $1 $2) $ text
- "parse error in let binding: missing required 'in'"
- }
- | 'let' error {% parseErrorSDoc (getLoc $1) $ text
- "parse error: naked let binding"
- }
- | 'if' exp optSemi 'then' exp optSemi
- 'else' error {% hintIf (combineLocs $1 $5) "else clause empty" }
- | 'if' exp optSemi 'then' exp optSemi error {% hintIf (combineLocs $1 $5) "missing required else clause" }
- | 'if' exp optSemi 'then' error {% hintIf (combineLocs $1 $2) "then clause empty" }
- | 'if' exp optSemi error {% hintIf (combineLocs $1 $2) "missing required then and else clauses" }
- | 'if' error {% hintIf (getLoc $1) "naked if statement" }
- | 'case' exp 'of' error {% parseErrorSDoc (combineLocs $1 $2) $ text
- "parse error in case statement: missing list after '->'"
- }
- | 'case' exp error {% parseErrorSDoc (combineLocs $1 $2) $ text
- "parse error in case statement: missing required 'of'"
- }
- | 'case' error {% parseErrorSDoc (getLoc $1) $ text
- "parse error: naked case statement"
- }
optSemi :: { ([Located a],Bool) }
: ';' { ([$1],True) }
| {- empty -} { ([],False) }
diff --git a/testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr b/testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr
index 5a3f1cc080..5eb8b539a3 100644
--- a/testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr
+++ b/testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr
@@ -1,2 +1,2 @@
-ParserNoLambdaCase.hs:3:5: parse error: naked lambda expression ''
+ParserNoLambdaCase.hs:3:6: error: parse error on input ‘case’
diff --git a/testsuite/tests/parser/should_fail/T10498a.hs b/testsuite/tests/parser/should_fail/T10498a.hs
new file mode 100644
index 0000000000..5a9656f254
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/T10498a.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE LambdaCase #-}
+module T10498a where
+
+-- ghc-7.10 would show the unhelpful error message:
+--
+-- T10498a.hs:10:5:
+-- parse error in if statement: missing required else clause
+
+foo =
+ if True
+ then
+ \case ->
+ 1 -> 2
+ else id
diff --git a/testsuite/tests/parser/should_fail/T10498a.stderr b/testsuite/tests/parser/should_fail/T10498a.stderr
new file mode 100644
index 0000000000..8b866f35f2
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/T10498a.stderr
@@ -0,0 +1,2 @@
+
+T10498a.hs:12:15: error: parse error on input ‘->’
diff --git a/testsuite/tests/parser/should_fail/T10498b.hs b/testsuite/tests/parser/should_fail/T10498b.hs
new file mode 100644
index 0000000000..19b62af5aa
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/T10498b.hs
@@ -0,0 +1,7 @@
+module T10498b where
+
+-- ghc-7.10 would show the unhelpful error message:
+--
+-- T10498b.hs:7:5: parse error in if statement: naked if statement
+
+f = if module then True else False
diff --git a/testsuite/tests/parser/should_fail/T10498b.stderr b/testsuite/tests/parser/should_fail/T10498b.stderr
new file mode 100644
index 0000000000..e15343b891
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/T10498b.stderr
@@ -0,0 +1,2 @@
+
+T10498b.hs:7:8: error: parse error on input ‘module’
diff --git a/testsuite/tests/parser/should_fail/all.T b/testsuite/tests/parser/should_fail/all.T
index 33da7217a7..13fb7385a2 100644
--- a/testsuite/tests/parser/should_fail/all.T
+++ b/testsuite/tests/parser/should_fail/all.T
@@ -91,3 +91,5 @@ test('T9225', normal, compile_fail, [''])
test('T10196Fail1', normal, compile_fail, [''])
test('T10196Fail2', normal, compile_fail, [''])
test('T10196Fail3', expect_broken(10196), compile_fail, [''])
+test('T10498a', normal, compile_fail, [''])
+test('T10498b', normal, compile_fail, [''])
diff --git a/testsuite/tests/parser/should_fail/readFail020.stderr b/testsuite/tests/parser/should_fail/readFail020.stderr
index 0c00cdc79b..0697604181 100644
--- a/testsuite/tests/parser/should_fail/readFail020.stderr
+++ b/testsuite/tests/parser/should_fail/readFail020.stderr
@@ -1,3 +1,2 @@
-readFail020.hs:3:5:
- parse error in let binding: missing required 'in'
+readFail020.hs:3:16: error: parse error on input ‘}’