Re: Strange behaviour of __traits(allMembers)

2023-07-05 Thread IchorDev via Digitalmars-d-learn

On Wednesday, 28 June 2023 at 10:20:44 UTC, Dennis wrote:


It's now fixed: https://github.com/dlang/dmd/pull/15335


Yesss! You're a hero indeed!


Re: Strange behaviour of __traits(allMembers)

2023-06-28 Thread Dennis via Digitalmars-d-learn

On Sunday, 18 June 2023 at 10:21:16 UTC, IchorDev wrote:
Whaat why has this not been fixed in the 
last 4 years!


It's now fixed: https://github.com/dlang/dmd/pull/15335



Re: Strange behaviour of __traits(allMembers)

2023-06-18 Thread FeepingCreature via Digitalmars-d-learn

On Sunday, 18 June 2023 at 10:21:16 UTC, IchorDev wrote:

On Sunday, 18 June 2023 at 10:04:14 UTC, FeepingCreature wrote:

On Sunday, 18 June 2023 at 09:48:40 UTC, IchorDev wrote:

Does anyone understand why this happens?
Is there any way to subvert this behaviour, or is it actually 
a bug?


Yes, see also my bug report, 
https://issues.dlang.org/show_bug.cgi?id=20008 
"__traits(allMembers) of packages is complete nonsense".


Whaat why has this not been fixed in the 
last 4 years!


I think because nobody *needs* `__traits(allMembers)` of 
packages. Mostly people just learn to skip them while scanning 
modules, and instead of iterating imports, they do the standard 
hack of "generate a list of all files in the project, string 
import it, and generate import statements for each".


Yeah it's ugly. I guess the lesson is, nothing takes as long to 
fix as a bug with a well-known workaround.


Re: Strange behaviour of __traits(allMembers)

2023-06-18 Thread IchorDev via Digitalmars-d-learn

On Sunday, 18 June 2023 at 10:04:14 UTC, FeepingCreature wrote:

On Sunday, 18 June 2023 at 09:48:40 UTC, IchorDev wrote:

Does anyone understand why this happens?
Is there any way to subvert this behaviour, or is it actually 
a bug?


Yes, see also my bug report, 
https://issues.dlang.org/show_bug.cgi?id=20008 
"__traits(allMembers) of packages is complete nonsense".


Whaat why has this not been fixed in the last 
4 years!


Re: Strange behaviour of __traits(allMembers)

2023-06-18 Thread FeepingCreature via Digitalmars-d-learn

On Sunday, 18 June 2023 at 09:48:40 UTC, IchorDev wrote:

Does anyone understand why this happens?
Is there any way to subvert this behaviour, or is it actually a 
bug?


Yes, see also my bug report, 
https://issues.dlang.org/show_bug.cgi?id=20008 
"__traits(allMembers) of packages is complete nonsense".


Strange behaviour of __traits(allMembers)

2023-06-18 Thread IchorDev via Digitalmars-d-learn

`source/mod/submod.d:`
```d
module mod.submod;
enum T1{ x }
```

`source/mod/package.d`:
```d
module mod;
import mod.submod;

enum T2{ y }
enum T3{ z }

static foreach(member; __traits(allMembers, mod)){
  pragma(msg, member);
}
/**Prints:
object
T1
**/
```
I get the members of `mod.submod` instead of `mod`, even though I 
supplied it with `mod`. The same happens if I use 
`mixin(__MODULE__)`.
I've tested this using `dub` with the stock dub.json file (no 
dependencies) with

- dmd 2.101.1
- dmd 2.104.0
- ldc2 1.30.0
- ldc2 1.32.2
- gdc 12.2.0

and I've gotten the same results for all of my tests every time.

If I change `mod.submod` to being a different module instead of a 
submodule, `allMembers` lists the contents of `mod` as expected. 
The members within the two modules don't seem to affect anything.


Importing `mod` from `mod.submod` makes it show up in 
`allMembers`, meaning I can do `__traits(allMembers, 
mod.mod.mod.mod.mod.` (etc.) recursively, and it still prints the 
members of `mod.submod`. Putting `mod.submod` into `allMembers` 
causes this error:

```
Error: undefined identifier `submod` in package `mod`
```


Does anyone understand why this happens?
Is there any way to subvert this behaviour, or is it actually a 
bug?