June 22, 2014 package reflection | ||||
|---|---|---|---|---|
| ||||
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
| ||||
June 22, 2014 Re: package reflection | ||||
|---|---|---|---|---|
| ||||
Posted in reply to sigod | 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=42m26s This 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 | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply