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 /compiler/parser | |
| 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
Diffstat (limited to 'compiler/parser')
| -rw-r--r-- | compiler/parser/Parser.y | 14 |
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 |
