[cfe-dev] How to get the StringLiteral EndLocation of the last token
chiasa.men via cfe-dev
cfe-dev at lists.llvm.org
Wed Sep 1 08:35:40 PDT 2021
Sorry, that was a quick one:
Lexer::getLocForEndOfToken (pLiteral->getStrTokenLoc (parts-1),0,SM,LO)
seems to work
On Mittwoch, 1. September 2021 17:26:40 CEST chiasa.men via cfe-dev wrote:
> The EndLoc of StringLiteral is the Loc returned by
> getStrTokenLoc(getNumConcatenated()-1).
> I understand that #6 concats the String tokens and the AST matcher gets the
> already concatenated string.
>
> How do I know where the actual end (in the source file) is?
>
> Example
>
> Test:
> #define testmacro L"testexpansion"
> int main(int argc, char** argv) {
> auto test=testmacro L"append";
> }
>
> In the Matcher:
> llvm::dbgs()<<"Range:"<<pLiteral->getBeginLoc().printToString(SM)<<",
> "<<pLiteral->getEndLoc().printToString(SM)<<"\n";
> for (unsigned i = 0; i<pLiteral->getNumConcatenated();++i){
> llvm::dbgs()<<"getStrTokenLoc "<<i<<"\n";
> pLiteral->getStrTokenLoc(i).dump(SM);
> }
>
> output:
> Range:3:15 <Spelling=1:19>, :3:25
> getStrTokenLoc 0
>
> :3:15 <Spelling=:1:19>
>
> // which is !testmacro L"append";
> getStrTokenLoc 1
>
> :3:25
>
> // which is testmacro !L"append";
>
> What I would need is this location: testmacro L"append"!; (34)
>
> What can I do to get the "actual" end of the StringLiteral in the
> SourceFile. Is there some kind of callback "onStringConcat" or a supposed
> way for this?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20210901/d5bb35c3/attachment.html>
More information about the cfe-dev
mailing list