Getting the name of current module
Philippe Sigaud
philippe.sigaud at gmail.com
Thu Aug 26 13:31:43 PDT 2010
Hi,
does anyone of you know a way to get the name of the current module at
compile-time?
I have a very fragile trick, creating a temporary, mangling/demangling it and
parsing the resulting name, but it's ugly as hell and does not work so well.
I need this for a very simple reason: I have a huge string mixin which
introduces helper structs in the current scope. The user may well use the
mixin many time with common arguments, which will mix-in many times the same
structs. So, botch.
Say I have:
mixin("struct Foo {}");
//...
mixin("struct Foo {}");
My first thought was to insert a static this:
mixin("static if (!is(Foo)) struct Foo {}");
But this does not work :-( after the first mixin the code is not compiled yet,
so Foo is not a type.
But I discovered that __traits(allMembers, currentModule) _will_ contain "Foo"
after the first mixin. So I can test for the existence of Foo this way and
abort creating it a second time. But, for that to work, I need the (local!)
module name at compile-time, the one the string will be mixed in.
Philippe
More information about the Digitalmars-d
mailing list