HsPragTick

Ben Gamari ben at smart-cactus.org
Wed Sep 2 16:03:04 UTC 2020


"Alan & Kim Zimmerman" <alan.zimm at gmail.com> writes:

> I am working through the API Annotations, and have come across HsPragTick.
>
> In source it appears as
>
>   c = {-# GENERATED "foobar" 1 : 2  -  3 :   4 #-} 0.00
>
> But it does not seem to be used anywhere. It is passed through for renaming
> and type checking, and Coverage.hs uses it as
>
> addTickHsExpr (HsPragE _ HsPragTick{} (L pos e0)) = do
>     e2 <- allocTickBox (ExpBox False) False False (locA pos) $
>                 addTickHsExpr e0
>     return $ unLoc e2
>
> So if it is used at all, the contents are ignored.
>
> Can it be removed?
>
I traced the pragma's addition back to 
d386e0d20c6953b7cba4d53538a1782c4aa9980d (way back in 2006!). It appears
that it was intended to be used by code generators for use in informing
the code coveraging checker about generated code provenance. When it was
added it used the pragma's "payload" fields as source location
information to build an "ExternalBox". However, it looks like this
constructor was dropped in 55a5d8d90280a611bafb659bc80778d3927a6bff [2]
(only a year later!).

At this point it seems like the pragma serves no useful purpose. Given
that it *also* is not documented, I think we should remove it. I have
opened #18639 to track this.

Cheers,

- Ben


[1] https://gitlab.haskell.org/ghc/ghc/-/commit/d386e0d20c6953b7cba4d53538a1782c4aa9980d 
[2] https://gitlab.haskell.org/ghc/ghc/-/commit/55a5d8d90280a611bafb659bc80778d3927a6bff#a033dd77bd63482866f5d4f8ed130427c9000779_308_319
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20200902/2081af75/attachment.sig>


More information about the ghc-devs mailing list