[cfe-dev] Get location of #pragma

Daniel Powell divot.powell at googlemail.com
Sat Jun 16 06:54:22 PDT 2012


HandlePragma should take a SourceRange that covers the '#pragma' or
> '_Pragma', so that this information is available to the pragma handlers. It
> should be a fairly simple change to Clang; would you like to contribute a
> patch for it?

Happy to. Just to check, you are suggesting I modify the current
HandlePragma method to have the following prototype?
virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind
Introducer, Token &FirstToken, SourceLocation IntroducerLoc) = 0;

With the three types of pragma supported (#pragma, _Pragma and __Pragma)
their locations only appear available when the preprocessor first discovers
the token (HandleDirective, Handle_Pragma and HandleMicrosoft__pragma
respectively), and is lost by the time HandlePragmaDirective is called so
it's probably best to pass the location from those places to
HandlePragmaDirective and onwards.

_Pragma and __Pragma are easy, they each have PragmaLoc pointing to the
keyword. However, by the time #pragma is fully discovered it only has a
location pointing to "pragma" not "#pragma". I could use the
getLocWithOffset(-1) method, or catch it at the start of the
HandleDirective method, which do you think is best?

I'll have to update the existing PragmaHandlers too.

Does all this sound sane? First time someone's asked me to contribute
something specific back to open source. :-D



Daniel Powell
divot.powell at googlemail.com

The University of Edinburgh
Institute for Computer Systems Architecture
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120616/77af9126/attachment.html>

More information about the cfe-dev mailing list