patch applied (ghc): Adding a GENERATED pragma
Simon Marlow
simonmarhaskell at gmail.com
Fri Jan 5 05:05:55 EST 2007
Andy Gill wrote:
> You have two files.
>
> 012345678901234567890123456789
> Happy.y:
>
> foo ::= foo bar { BarBaz $1 $2 }
>
> Happy.hs: (generated file)
>
> [stuff]
> rhs dollar_1 dollar_2 = BarBaz dollar_1 dollar_2
> [more stuff]
>
> Now we still want any error messages in the BarBaz code fragment to be
> in terms of the generated file,
> and we still want to do coverage in terms of the generated file. After
> all, it is a Haskell module.
> However, if we change Happy to generate the following:
>
> Happy.hs: (generated file)
>
> [stuff]
> rhs dollar_1 dollar_2 = {-# GENERATED "Happy.y" 1:15-1:25 #-} BarBaz
> dollar_1 dollar_2
> [more stuff]
>
> Under the semantics for GENERATED, this makes no difference to the
> generated code,
> or any error messages (say BarBaz is a typo, for example). However, Hpc
> can use the pragma,
> and generate a coverage markup file for *both* Happy.hs (the real
> Haskell) and Happy.y,
> where the GENERATED code is tied back to its original location.
>
> Note that this is different than LINE, because LINE changes what the
> current span is for
> the purposes of tagging the AST, and therefore error messages (and code
> coverage).
> After all, the GENERATED code is even of different length than the
> original production code inside {}.
I'm beginning to understand, but this still seems a bit strange.
So GENERATED is only used for coverage information? It really isn't a
generalised LINE pragma, because it doesn't affect the locations reported in
error messages. I understand that this is intentional, but... hmmmm.
Cheers,
Simon
More information about the Cvs-ghc
mailing list