[cfe-dev] How to get the string from the CFGStmt
redder_0210 at yeah.net
Fri Feb 17 01:05:16 PST 2012
Thanks for you replying.
The new question is that I cannot get the SourceManager only by the Stmt. So the "SM.getSpellingLoc(Range.getBegin())" cannot work.
Thus, I want to how to get SourceManager from the Stmt or from the SourceRange.
At 2012-02-13 17:25:26,"Manuel Klimek" <klimek at google.com> wrote:
>On Mon, Feb 13, 2012 at 5:48 AM, redder_0210 <redder_0210 at yeah.net> wrote:
>> Dear all,
>> I am interested in that how to translate from a statemnt to the
>> corresponding string.
>> For example,
>> in the CFG, there is a CFGStmt "int i = 0;",
>> now I want to get the string "int i = 0;",namely modify the type CFGStmt to
>> the type string.
>CFGStmt has a getStmt() which gets you a Stmt, which has a function
>getSourceRange which gives you the SourceRange.
>When you have a SourceRange you can get a CharSourceRange by calling
>Then you get the start location by calling
>SM.getSpellingLoc(Range.getBegin()) (where Range is the
>You can calculate the length of the text by calling getDecomposedLoc
>on the getBegin() and getEnd() of the spelling locations. You'll also
>need to add Lexer::MeasureTokenLength(EndLocation, ...) to the size,
>as the last element of a token range points to the begin of the last
>Finally you can call SM.getCharacterData with the begin and you'll
>have your text.
>Unfortunately this is a little harder than it could be, mostly due to
>the different types of locations. (Note that if there are for example
>macros involved, it matters whether you use getSpellingLocation or
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cfe-dev