digitalmars.D.learn - package reflection
- sigod (46/46) Jun 22 2014 In the video "Case Studies In Simplifying Code With Compile-Time
- Shammah Chancellor (5/66) Jun 22 2014 This is very frustrating indeed, and I have an open bug request about
In the video "Case Studies In Simplifying Code With Compile-Time Reflection" [was pointed out][0] that it is possible to reflect on imported packages. So, I tried: reflection.d: ``` import std.stdio; import test.module1; import test.module2; void main() { foreach (m; __traits(allMembers, mixin(__MODULE__))) { writeln(m); } writeln("--------------"); foreach (m; __traits(allMembers, test)) { writeln(m); } } ``` test/module1.d: ``` module test.module1; void module_1() {} ``` test/module2.d: ``` module test.module2; void module_2() {} ``` It produces: ``` $ rdmd reflection.d object std test main -------------- object module_1 ``` As you see `module_2` wasn't listed. If I change order of import declarations `module_2` will be listed instead of `module_1`. I also tried to create `test/package.d` and publicly import other modules through it, but it behave in the same way. So, how to reflect on imported packages? [0]: http://youtu.be/xpImt14KTdc?t=42m26s
Jun 22 2014
On 2014-06-22 14:11:58 +0000, sigod said:In the video "Case Studies In Simplifying Code With Compile-Time Reflection" [was pointed out][0] that it is possible to reflect on imported packages. So, I tried: reflection.d: ``` import std.stdio; import test.module1; import test.module2; void main() { foreach (m; __traits(allMembers, mixin(__MODULE__))) { writeln(m); } writeln("--------------"); foreach (m; __traits(allMembers, test)) { writeln(m); } } ``` test/module1.d: ``` module test.module1; void module_1() {} ``` test/module2.d: ``` module test.module2; void module_2() {} ``` It produces: ``` $ rdmd reflection.d object std test main -------------- object module_1 ``` As you see `module_2` wasn't listed. If I change order of import declarations `module_2` will be listed instead of `module_1`. I also tried to create `test/package.d` and publicly import other modules through it, but it behave in the same way. So, how to reflect on imported packages? [0]: http://youtu.be/xpImt14KTdc?t=42m26sThis is very frustrating indeed, and I have an open bug request about it. Please bump it so it gets some attention: https://issues.dlang.org/show_bug.cgi?id=11595 -Shammah
Jun 22 2014