[cfe-dev] Fwd: Type Information for C++ classes

Mohammad Adil madil90 at gmail.com
Wed Oct 17 04:08:36 PDT 2012


---------- Forwarded message ----------
From: Mohammad Adil <madil90 at gmail.com>
Date: Wed, Oct 17, 2012 at 4:08 PM
Subject: Re: [cfe-dev] Type Information for C++ classes
To: Manuel Klimek <klimek at google.com>


I am analyzing an AST with clang and I have a code which uses "FILE" type.
Clang reports FILE type as int rather than FILE. I need to distinguish
between FILE and int because both of them behave differently with streams.
Is there a way I can distinguish between these two in clang?


On Mon, Oct 15, 2012 at 6:53 PM, Mohammad Adil <madil90 at gmail.com> wrote:

> Hi,
>    When clang parses a source file, how does it include the related header
> files. e.g lets say i have
>
> #include "something.h"
>
>    Does the final AST includes everything in something.h too? What about
> something.cpp? At which compilation stage does the linker include code from
> something.cpp, or something.o, if there is any?
>
> Adil
>
>
> On Mon, Oct 15, 2012 at 12:27 PM, Manuel Klimek <klimek at google.com> wrote:
>
>> On Mon, Oct 15, 2012 at 8:30 AM, Mohammad Adil <madil90 at gmail.com> wrote:
>>
>>> Sorry to disturb you again. I have found out how to find the member
>>> variables of a class. Can you please tell me how to find all instances of a
>>> variable usage in a source code? e.g. I create a global variable temp. I
>>> want to find out all the places where temp was used or changed?
>>
>>
>> declRefExpr(to(varDecl(hasName("x"))))
>>
>>
>>
>>>
>>>
>>> On Mon, Oct 15, 2012 at 11:00 AM, Mohammad Adil <madil90 at gmail.com>wrote:
>>>
>>>> Hi,
>>>>    clang provides information about all the unused variables when a
>>>> flag is provided in the command line. How does clang finds all instances of
>>>> that variable usage in a source code?
>>>>    I still am not quite sure how to use the matcher to find all member
>>>> variables of a class? Can you briefly explain how the matchfinder api works
>>>> and how it can be used to find all variables of a class? e.g.
>>>>
>>>> class A
>>>> {
>>>>     int b,c;
>>>>     double e;
>>>> };
>>>>
>>>>     I want to find out that the class A has variables named b,c,e? How
>>>> do I use the matcher in this situation? I will be very grateful for your
>>>> help
>>>>
>>>> Regards,
>>>> Adil
>>>>
>>>>
>>>> On Fri, Oct 12, 2012 at 5:23 PM, Manuel Klimek <klimek at google.com>wrote:
>>>>
>>>>> Is this what you're looking for?
>>>>>
>>>>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/tool-template/ToolTemplate.cpp?revision=162624&view=markup
>>>>>
>>>>> Cheers,
>>>>> /Manuel
>>>>>
>>>>>
>>>>> On Fri, Oct 12, 2012 at 10:50 AM, Mohammad Adil <madil90 at gmail.com>wrote:
>>>>>
>>>>>> I am comfortable with clang's internal API at the time, although the
>>>>>> abstraction provided in libclang seems much easier to work with. The
>>>>>> clang's internal API is much more self-explanatory than libclang. Can you
>>>>>> please give me some hints as for how to find the members and methods of a
>>>>>> class. I can visit all classes using VisitCXXRecordDecl but there doesn't
>>>>>> seem to be any way to find it's members. Is there a way to recursively walk
>>>>>> all the children this CXXRecordDecl and figure out which ones are methods
>>>>>> and members? Also, I am struggling on how to use the ASTMatcher you
>>>>>> mentioned earlier. I have a returnstmt using the VisitStmt method of my
>>>>>> visitor. This will give me a return statement. How do I find which function
>>>>>> it belongs to? Can you give a small example of how to do it? I am very
>>>>>> grateful for your help.
>>>>>>
>>>>>>
>>>>>> On Fri, Oct 12, 2012 at 1:13 PM, Manuel Klimek <klimek at google.com>wrote:
>>>>>>
>>>>>>> On Fri, Oct 12, 2012 at 7:38 AM, Mohammad Adil <madil90 at gmail.com>wrote:
>>>>>>>
>>>>>>>> Also, Is it better to use libclang for doing this. My complete
>>>>>>>> purpose is to refactor source code to find all functions, their arguments,
>>>>>>>> return statements, all class members and methods. Can I find all this using
>>>>>>>> libclang? I've heard that clang is unstable while libclang is stable. Which
>>>>>>>> one should I use? I am currently using clang's internal API.
>>>>>>>
>>>>>>>
>>>>>>>  http://clang.llvm.org/docs/Tooling.html
>>>>>>>
>>>>>>> I don't have too much experience with using libclang for something
>>>>>>> like this; what you want to do is definitely possible with LibTooling. And
>>>>>>> while the internal clang AST interface is going to change more often than
>>>>>>> libclang, in practice it is stable enough that you usually don't care
>>>>>>> unless you want to ship a product (like an IDE) to end users. I'd try to
>>>>>>> decide more on how much power you need, or what language you'd like to
>>>>>>> write your integration in.
>>>>>>>
>>>>>>> One good way is to try to start with libclang, and if you see that
>>>>>>> you're hitting a missing feature, switch to using libtooling.
>>>>>>>
>>>>>>> Cheers,
>>>>>>> /Manuel
>>>>>>>
>>>>>>>
>>>>>>>> On Fri, Oct 12, 2012 at 10:16 AM, Mohammad Adil <madil90 at gmail.com>wrote:
>>>>>>>>
>>>>>>>>> My purpose is to overload the << operator for all classes if they
>>>>>>>>> don't already have one. The basic goal is to make all classes serializable
>>>>>>>>> over some stream (ideally a network stream). Is that possible with clang?
>>>>>>>>> If yes, How do I find all the member variables and functions of a class or
>>>>>>>>> struct?
>>>>>>>>>
>>>>>>>>> On Thu, Oct 11, 2012 at 5:13 PM, Manuel Klimek <klimek at google.com>wrote:
>>>>>>>>>
>>>>>>>>>> +cfe-dev
>>>>>>>>>>
>>>>>>>>>> On Thu, Oct 11, 2012 at 12:13 PM, Mohammad Adil <
>>>>>>>>>> madil90 at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Sorry about that. I wasn't correctly changing my language from C
>>>>>>>>>>> to C++. I figured that out. It's working now. I wanted to ask you one more
>>>>>>>>>>> thing. I am trying to find all the return statements in the file. I can do
>>>>>>>>>>> that easily but I know want to find out which function does this return
>>>>>>>>>>> statement belong to? Since funcdecl and return statements are de-coupled, I
>>>>>>>>>>> can't find a way to do so. Is there an easy way to do it?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> If you're using RecursiveASTVisitor, you can intercept the
>>>>>>>>>> Traverse* calls to figure out AST child relations. Or you can use the AST
>>>>>>>>>> matchers (functionDecl(hasDescendant(returnStmt()))).
>>>>>>>>>>
>>>>>>>>>> Cheers,
>>>>>>>>>> /Manuel
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>  On Wed, Oct 10, 2012 at 8:29 PM, Manuel Klimek <
>>>>>>>>>>> klimek at google.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Oct 10, 2012 at 2:05 AM, madil90 <madil90 at gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> > Hi,
>>>>>>>>>>>> >    I am trying to find the type of a VarDecl. I am currently
>>>>>>>>>>>> using the
>>>>>>>>>>>> > VarDecl->getOriginalType(). This function does not work for
>>>>>>>>>>>> C++ classes.
>>>>>>>>>>>> > Consider the code below:
>>>>>>>>>>>>
>>>>>>>>>>>> Does getType() not work for you for some reason?
>>>>>>>>>>>>
>>>>>>>>>>>> Cheers,
>>>>>>>>>>>> /Manuel
>>>>>>>>>>>>
>>>>>>>>>>>> >
>>>>>>>>>>>> > class Foo
>>>>>>>>>>>> > {
>>>>>>>>>>>> >     int a;
>>>>>>>>>>>> > };
>>>>>>>>>>>> >
>>>>>>>>>>>> > int f( Foo foo);
>>>>>>>>>>>> >
>>>>>>>>>>>> > When I try to find the type for "foo" in the function
>>>>>>>>>>>> decleration, it
>>>>>>>>>>>> > returns "int", while the actual type is Foo. If Foo is a
>>>>>>>>>>>> structure, this
>>>>>>>>>>>> > works perfectly fine but not for C++ classes. Can some one
>>>>>>>>>>>> please explain
>>>>>>>>>>>> > where the type information for C++ classes is stored?
>>>>>>>>>>>> >
>>>>>>>>>>>> >
>>>>>>>>>>>> >
>>>>>>>>>>>> > --
>>>>>>>>>>>> > View this message in context:
>>>>>>>>>>>> http://clang-developers.42468.n3.nabble.com/Type-Information-for-C-classes-tp4027266.html
>>>>>>>>>>>> > Sent from the Clang Developers mailing list archive at
>>>>>>>>>>>> Nabble.com.
>>>>>>>>>>>> > _______________________________________________
>>>>>>>>>>>> > cfe-dev mailing list
>>>>>>>>>>>> > cfe-dev at cs.uiuc.edu
>>>>>>>>>>>> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Mohammad Adil
>>>>>>>>>>> LUMS SSE
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Mohammad Adil
>>>>>>>>> LUMS SSE
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Mohammad Adil
>>>>>>>> LUMS SSE
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Mohammad Adil
>>>>>> LUMS SSE
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Mohammad Adil
>>>> LUMS SSE
>>>>
>>>>
>>>
>>>
>>> --
>>> Mohammad Adil
>>> LUMS SSE
>>>
>>>
>>
>
>
> --
> Mohammad Adil
> LUMS SSE
>
>


-- 
Mohammad Adil
LUMS SSE




-- 
Mohammad Adil
LUMS SSE
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20121017/f734e3a6/attachment.html>


More information about the cfe-dev mailing list