[GHC] #10243: SrcSpan incorrect for non-alphanumeric VarPat

GHC ghc-devs at haskell.org
Sun Apr 5 10:42:45 UTC 2015


#10243: SrcSpan incorrect for non-alphanumeric VarPat
-------------------------------------+-------------------------------------
        Reporter:  mpickering        |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:  7.10.2
       Component:  Compiler          |                 Version:  7.10.1
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  None/Unknown      |  Unknown/Multiple
      Blocked By:                    |               Test Case:
 Related Tickets:                    |                Blocking:
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------
Description changed by mpickering:

Old description:

> There is an inconsistency when parsing patterns which contain non-
> alphanumeric characters.
>
> For example,
>
> {{{!#hs
> foo (.) = 5
> }}}
>
> the pattern parses as the following.
>
> {{{
>  (L {tests/examples/ArgPuncParens.hs:2:5-7}
>    (VarPat
>     (Unqual {OccName: .})))]
> }}}
>
> Then consider the following similar program.
>
> {{{#!hs
> foo (x) = 5
> }}}
>
> The parse is as follows.
>
> {{{
>   (L {tests/examples/ArgPuncParens.hs:2:5-7}
>     (ParPat
>       (L {tests/examples/ArgPuncParens.hs:2:6}
>         (VarPat
>           (Unqual {OccName: x})))))]
> }}}
>
> Notice two differences.
>
> 1. The first parse lacks a surrounding `ParPat`.
> 2. If the `ParPat` is deliberately  omitted then the given location
> encompasses the surrounding parentheses which is not consistent with the
> second example where `VarPat` specifically refers to `x`.

New description:

 There is an inconsistency when parsing patterns which contain non-
 alphanumeric characters.

 For example,

 {{{#!hs
 foo (.) = 5
 }}}

 the pattern parses as the following.

 {{{
  (L {tests/examples/ArgPuncParens.hs:2:5-7}
    (VarPat
     (Unqual {OccName: .})))]
 }}}

 Then consider the following similar program.

 {{{#!hs
 foo (x) = 5
 }}}

 The parse is as follows.

 {{{
   (L {tests/examples/ArgPuncParens.hs:2:5-7}
     (ParPat
       (L {tests/examples/ArgPuncParens.hs:2:6}
         (VarPat
           (Unqual {OccName: x})))))]
 }}}

 Notice two differences.

 1. The first parse lacks a surrounding `ParPat`.
 2. If the `ParPat` is deliberately  omitted then the given location
 encompasses the surrounding parentheses which is not consistent with the
 second example where `VarPat` specifically refers to `x`.

--

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10243#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list