So, I think there's your answer: the last token might be ITccurly, not ITsemi. It seems that the "insert invisible curlies and semis" is taken more literally for semis than for curlies.

Richard

On Jan 19, 2021, at 4:58 PM, Alan & Kim Zimmerman <alan.zimm@gmail.com> wrote:

Changing it to remove the final ';' gives a last token of ITccurly.

Changing it to

module Bug where
x = 5
y = 6

Gives a last token of ITsemi.

Alan

On Tue, 19 Jan 2021 at 21:50, Richard Eisenberg <rae@richarde.dev> wrote:
That's bizarre. Does it still happen with explicit braces?

Just to test, I tried

module Bug where {
x = 5;
y = 6;
};

and GHC rejected because of the trailing ;.

Richard

> On Jan 19, 2021, at 4:35 PM, Alan & Kim Zimmerman <alan.zimm@gmail.com> wrote:
>
> I am (still) working on !2418 to bring the API Annotations into the GHC ParsedSource, and making good progress.
>
> I am currently making a rough port of ghc-exactprint, to ensure I can get all the tests around modifying the AST to work.
>
> One of the last pieces is being able to capture the spacing from the last token in the file to the EOF.  I guess technically it is the second last token.
>
> Empirically (calling getTokenStream), it seems this is always ITsemi.  I am not sure how this comes about, as the `module` parsing rule in Parser.y ends with body or body2, and those both finish with an actual or virtual '}'.
>
> Can I rely on the token before ITEof always being ITsemi?
>
> Alan
> _______________________________________________
> ghc-devs mailing list
> ghc-devs@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs