Mixin declarations not showing up in ModuleInfo

bitwise via Digitalmars-d digitalmars-d at puremagic.com
Sun Nov 30 10:34:52 PST 2014


On Sunday, 30 November 2014 at 08:00:20 UTC, Daniel Kozak wrote:
> On Sunday, 30 November 2014 at 02:10:13 UTC, bitwise wrote:
>> In the following program, the output does not contain 
>> "SomeClass". Is this a bug?
>
> Maybe yes, as a workaround this works:
>
> module main;
> import std.stdio;
>
> template Test()
> {
>     enum Test = q{
>         class SomeClass {
>             int n = 123;
>         }
>     };
> }
>
> mixin(Test!());
>
> void main() {
>
>     auto sc = new SomeClass;
>     writeln(sc.n);
>
>     foreach(m; ModuleInfo)
>     {
>         foreach(c; m.localClasses())
>         {
>             writeln(c.name);
>         }
>     }
> }
>
> Btw. you can use just template, IIRC there is no difference 
> between template and mixin template

Hey, thanks for the q{} trick. I knew I had seen it somewhere... 
but couldn't find it.

That trick only really helps when there is minimal concatenation 
going on though. When you have to splice a bunch of stuff 
together, a TokenString doesn't provide much relief.

Docs for template mixins explicitly support the behaviour that 
I'm after, so I'm gonna file a bug.

" TemplateMixin takes an arbitrary set of declarations from the 
body of a TemplateDeclaration and inserts them into the current 
context."





More information about the Digitalmars-d mailing list