summaryrefslogtreecommitdiff
path: root/compiler/parser
diff options
context:
space:
mode:
authorAlan Zimmerman <alan.zimm@gmail.com>2015-06-18 16:19:50 +0200
committerAlan Zimmerman <alan.zimm@gmail.com>2015-06-18 16:19:50 +0200
commit72b21c393831b49867a296f19a2d039e48bb8dcd (patch)
tree67f110ac8f3e6ae3ee00553ca19daef9c453a403 /compiler/parser
parent5d98b6828f65ce6eea45e93880928b7031955d38 (diff)
downloadhaskell-72b21c393831b49867a296f19a2d039e48bb8dcd.tar.gz
Parser: commas_tup_tail duplicate SrcSpan on "Missing" value
Summary: Parsing {-# LANGUAGE TupleSections #-} baz = (1, "hello", 6.5,,) 'a' (Just ()) Results in the following AST fragment (L tests/examples/Tuple.hs:3:7-25 (ExplicitTuple [ L tests/examples/Tuple.hs:3:8 (Present (L tests/examples/Tuple.hs:3:8 (HsOverLit (OverLit (HsIntegral [ '1' ] 1) PlaceHolder (HsLit (HsString [] {abstract:FastString})) PlaceHolder)))) , L tests/examples/Tuple.hs:3:11-17 (Present (L tests/examples/Tuple.hs:3:11-17 (HsLit (HsString [ '"' , 'h' , 'e' , 'l' , 'l' , 'o' , '"' ] {abstract:FastString})))) , L tests/examples/Tuple.hs:3:20-22 (Present (L tests/examples/Tuple.hs:3:20-22 (HsOverLit (OverLit (HsFractional (FL [ '6' , '.' , '5' ] (:% 13 2))) PlaceHolder (HsLit (HsString [] {abstract:FastString})) PlaceHolder)))) , L tests/examples/Tuple.hs:3:24 (Missing PlaceHolder) , L tests/examples/Tuple.hs:3:24 (Missing PlaceHolder) ] The final `Missing PlaceHolder` has a duplicated `SrcSpan` Test Plan: ./validate Reviewers: austin, hvr, bgamari Reviewed By: bgamari Subscribers: thomie, bgamari, mpickering Differential Revision: https://phabricator.haskell.org/D995 GHC Trac Issues: #10537
Diffstat (limited to 'compiler/parser')
-rw-r--r--compiler/parser/Parser.y14
1 files changed, 4 insertions, 10 deletions
diff --git a/compiler/parser/Parser.y b/compiler/parser/Parser.y
index 682b34263f..5414735ef8 100644
--- a/compiler/parser/Parser.y
+++ b/compiler/parser/Parser.y
@@ -2386,28 +2386,22 @@ tup_exprs :: { [LHsTupArg RdrName] }
| commas tup_tail
{% do { mapM_ (\ll -> addAnnotation ll AnnComma ll) (fst $1)
; return
- (let tt = if null $2
- then [noLoc missingTupArg]
- else $2
- in map (\l -> L l missingTupArg) (fst $1) ++ tt) } }
+ (map (\l -> L l missingTupArg) (fst $1) ++ $2) } }
-- Always starts with commas; always follows an expr
commas_tup_tail :: { (SrcSpan,[LHsTupArg RdrName]) }
commas_tup_tail : commas tup_tail
{% do { mapM_ (\ll -> addAnnotation ll AnnComma ll) (tail $ fst $1)
; return (
- let tt = if null $2
- then [L (last $ fst $1) missingTupArg]
- else $2
- in (head $ fst $1
- ,(map (\l -> L l missingTupArg) (tail $ fst $1)) ++ tt)) } }
+ (head $ fst $1
+ ,(map (\l -> L l missingTupArg) (tail $ fst $1)) ++ $2)) } }
-- Always follows a comma
tup_tail :: { [LHsTupArg RdrName] }
: texp commas_tup_tail {% addAnnotation (gl $1) AnnComma (fst $2) >>
return ((L (gl $1) (Present $1)) : snd $2) }
| texp { [L (gl $1) (Present $1)] }
- | {- empty -} { [] {- [noLoc missingTupArg] -} }
+ | {- empty -} { [noLoc missingTupArg] }
-----------------------------------------------------------------------------
-- List expressions