[cfe-dev] Matching Indirect base classes
Daniel Jasper
djasper at google.com
Fri Nov 8 09:30:17 PST 2013
Yes, sorry, lookupInBases() is what I meant. You'll need forAllBases(). You
can pass in a ForallBasesCallback, which is basically a callback function
executed for each base class.
I have not used this myself, but for an example, look at:
CXXRecordDecl::isProvablyNotDerivedFrom defined in
lib/AST/CXXInheritance.cpp.
Also lib/Sema/SemaDeclCXX.cpp has an example close to the bottom
of Sema::CheckUsingDeclQualifier()
that collects all of the bases into a SmallPtrSet.
On Fri, Nov 8, 2013 at 9:16 AM, Pedro Delgado Perez <pedro.delgado at uca.es>wrote:
> Hi,
>
> Thanks Daniel, I suppose you mean CXXRecordDecl::lookupInBases() instead
> CXXRecordDecl::findInBases().
>
> Have you ever used one of these methods? I don't understand quite well how
> can I use them for my purpose. What I need is that, given an object
> CXXRecordDecl, I can analyze something in particular in each one of its
> base classes (direct or indirect). Thus, I need to get each one of these
> classes to process them, but the methods you refer only return a *bool*.
>
> Could you please show me an example using these methods? Mainly, with
> respect the arguments passed to these methdos.
>
> Thanks,
>
> Pedro.
> *El día 08 nov 2013 15:32, Daniel Jasper <djasper at google.com
> <djasper at google.com>> escribió:*
>
> Take a look at CXXRecordDecl::forallBases() and
> CXXRecordDecl::findInBases(). Dependent on what you want to do, one of them
> might do what you need.
> Cheers,
> Daniel
>
>
> On Fri, Nov 8, 2013 at 2:39 AM, Pedro Delgado Perez <pedro.delgado at uca.es>wrote:
>
>> Hello,
>>
>> Please, I need some help with an issue I noticed a few days ago and I am
>> not able to solve.
>>
>> To illustrate my problem, I show this piece of code:
>>
>> class A{
>> public:
>> A(): a(1) {};
>> int a;
>> };
>>
>> class B: public A{
>> public:
>> B(): b(2){};
>> int b;
>> };
>>
>> class C: public B{
>> public:
>> C(): c(3){};
>> int b;
>> int a;
>> };
>>
>> We have three classes, where:
>> B inherits directly from A
>> C inherits directly from B and INDIRECTLY from A
>>
>> Using CXXRecordDecl::base_class_iterator, the classes indirectly
>> inherited are not visited. Please, can someone explain me how to take into
>> account these indirectly inherited base classes? I've been thinking on
>> recursion (use base_class_iterator on each class directly inherited), but
>> I'm sure there should be another simpler way to do this.
>>
>> Thanks in advance,
>>
>> Pedro.
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>>
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131108/d6df3d08/attachment.html>
More information about the cfe-dev
mailing list