diff options
| author | Alan Zimmerman <alan.zimm@gmail.com> | 2015-06-18 16:19:50 +0200 |
|---|---|---|
| committer | Alan Zimmerman <alan.zimm@gmail.com> | 2015-06-18 16:19:50 +0200 |
| commit | 72b21c393831b49867a296f19a2d039e48bb8dcd (patch) | |
| tree | 67f110ac8f3e6ae3ee00553ca19daef9c453a403 | |
| parent | 5d98b6828f65ce6eea45e93880928b7031955d38 (diff) | |
| download | haskell-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
| -rw-r--r-- | compiler/parser/Parser.y | 14 | ||||
| -rw-r--r-- | testsuite/tests/ghc-api/annotations/exampleTest.stdout | 3 | ||||
| -rw-r--r-- | testsuite/tests/ghc-api/annotations/parseTree.stdout | 3 |
3 files changed, 6 insertions, 14 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 diff --git a/testsuite/tests/ghc-api/annotations/exampleTest.stdout b/testsuite/tests/ghc-api/annotations/exampleTest.stdout index cd6f9c0dd4..210a4d8ae0 100644 --- a/testsuite/tests/ghc-api/annotations/exampleTest.stdout +++ b/testsuite/tests/ghc-api/annotations/exampleTest.stdout @@ -1,10 +1,9 @@ ---Problems--------------------- [ -(AK <no location info> AnnEofPos = [AnnotationTuple.hs:32:1]) ] ---Problems'-------------------- -[(AnnEofPos, AnnotationTuple.hs:32:1)] +[] -------------------------------- [ (AK AnnotationTuple.hs:1:1 AnnCloseC = [AnnotationTuple.hs:27:1]) diff --git a/testsuite/tests/ghc-api/annotations/parseTree.stdout b/testsuite/tests/ghc-api/annotations/parseTree.stdout index f7d1e5d67b..7d651aaffb 100644 --- a/testsuite/tests/ghc-api/annotations/parseTree.stdout +++ b/testsuite/tests/ghc-api/annotations/parseTree.stdout @@ -8,8 +8,7 @@ (AnnotationTuple.hs:16:20-22, [p], (6.5)), (AnnotationTuple.hs:16:24, [m], ()), (AnnotationTuple.hs:16:25, [m], ()), - (AnnotationTuple.hs:16:26, [m], ()), - (AnnotationTuple.hs:16:26, [m], ())] + (AnnotationTuple.hs:16:26, [m], ()), (<no location info>, [m], ())] [ (AK AnnotationTuple.hs:1:1 AnnCloseC = [AnnotationTuple.hs:27:1]) |
