www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Finding all the interfaces and their inheritance relationships at

reply Jean-Louis Leroy <jl leroy.nyc> writes:
I know how to find all the classes:

     foreach (mod; ModuleInfo) {
       foreach (c; mod.localClasses) {
         // use c.base to construct inheritance graph
       }
     }

Can I do the same with all the interfaces? Looking at object.d 
gives no clue...
Jul 03
parent reply bauss <jj_1337 live.dk> writes:
On Monday, 3 July 2017 at 13:54:42 UTC, Jean-Louis Leroy wrote:
 I know how to find all the classes:

     foreach (mod; ModuleInfo) {
       foreach (c; mod.localClasses) {
         // use c.base to construct inheritance graph
       }
     }

 Can I do the same with all the interfaces? Looking at object.d 
 gives no clue...
Is there a reason you need to do it with runtime and can't use __traits?
Jul 03
parent reply FoxyBrown <Foxy Brown.IPT> writes:
On Monday, 3 July 2017 at 20:45:19 UTC, bauss wrote:
 On Monday, 3 July 2017 at 13:54:42 UTC, Jean-Louis Leroy wrote:
 I know how to find all the classes:

     foreach (mod; ModuleInfo) {
       foreach (c; mod.localClasses) {
         // use c.base to construct inheritance graph
       }
     }

 Can I do the same with all the interfaces? Looking at object.d 
 gives no clue...
Is there a reason you need to do it with runtime and can't use __traits?
He didn't say *with* runtime but *at*. Changes the whole meaning ;)
Jul 03
parent Jean-Louis Leroy <jl leroy.nyc> writes:
On Monday, 3 July 2017 at 22:34:51 UTC, FoxyBrown wrote:
 On Monday, 3 July 2017 at 20:45:19 UTC, bauss wrote:
 On Monday, 3 July 2017 at 13:54:42 UTC, Jean-Louis Leroy wrote:
 I know how to find all the classes:

     foreach (mod; ModuleInfo) {
       foreach (c; mod.localClasses) {
         // use c.base to construct inheritance graph
       }
     }

 Can I do the same with all the interfaces? Looking at 
 object.d gives no clue...
Is there a reason you need to do it with runtime and can't use __traits?
He didn't say *with* runtime but *at*. Changes the whole meaning ;)
It's OK I found how to achieve what I want. I'll enumerate the classes an dfrom there work my way down via ClassInfo.interfaces. It turns out that Interface.classinfocontains the interface's inherited interfaces; the 'classinfo' name is a bit misleading though...
Jul 03