[cfe-dev] Return type of statement

Alexei Svitkine alexei.svitkine at gmail.com
Mon Jan 5 18:31:02 PST 2009


Thanks for the pointers.

What's the best way to map from a location in the source to the
corresponding Stmt (and hence Expr if it is exists)?

-Alexei

On Mon, Jan 5, 2009 at 9:22 PM, Chris Lattner <clattner at apple.com> wrote:
>
> On Jan 5, 2009, at 6:10 PM, Ted Kremenek wrote:
>
>> Alexei,
>>
>> Statements that evalute to a value are known as expressions.
>> Expressions are represented by the Expr class (which subclasses
>> Stmt).  The method Expr::getType() will return the information you
>> want.  I recommend looking at the Clang sources for example uses of
>> this method.
>
> Try something like:
>
> Stmt *S = ...
>
> if (Expr *E = dyn_cast<Expr>(S))
>  if (E->getType() == ... )
>    ...
>
> If something is a statement but not an expr, it doesn't produce a value
> (things like "if" or "break").
>
> -Chris
>
>>
>>
>> On Jan 5, 2009, at 5:43 PM, Alexei Svitkine
>> <alexei.svitkine at gmail.com> wrote:
>>
>>> I am starting a project that will use clang. I'm asking to be pointed
>>> in the right direction with a question I have. Here goes.
>>>
>>> Given a context (ie a source file) and a statement somewhere in that
>>> file, what's the easiest way to find the return type of that statement
>>> with clang?
>>>
>>> For example, for an assignment, it's the type of the variable, for a
>>> function call, it's the return type, but obviously there are more
>>> complicated examples in C semantics.
>>>
>>> Surely, clang must be aware of this information, so what's the easiest
>>> way to get at it (using code)?
>>>
>>> -Alexei Svitkine
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>



More information about the cfe-dev mailing list