digitalmars.D - Mixin declarations not showing up in ModuleInfo
- bitwise (22/22) Nov 29 2014 In the following program, the output does not contain
- Daniel Kozak (26/28) Nov 30 2014 Maybe yes, as a workaround this works:
- bitwise (11/39) Nov 30 2014 Hey, thanks for the q{} trick. I knew I had seen it somewhere...
- bitwise (1/1) Nov 30 2014 https://issues.dlang.org/show_bug.cgi?id=13800
- Daniel Kozak via Digitalmars-d (4/50) Nov 30 2014 Yes, thats true. It is a bug. But I just try to say you can omit mixin
- bitwise (1/3) Nov 30 2014 mixin != mixin template != template
- Daniel =?UTF-8?B?S296w6Fr?= via Digitalmars-d (22/26) Nov 30 2014 Yes and no :)
- bitwise (8/34) Dec 01 2014 Heh... Guess you got me there ;)
- Daniel =?UTF-8?B?S296w6Fr?= via Digitalmars-d (23/67) Dec 01 2014 There is one limitation of mixin template. You can not do this
- Adam D. Ruppe (4/5) Dec 01 2014 huh, it isn't supposed to be and I'm pretty sure it was made an
- Daniel Kozak (2/7) Dec 01 2014 http://forum.dlang.org/thread/ntuysfcivhbphnhnnvcw@forum.dlang.org#post-...
In the following program, the output does not contain "SomeClass". Is this a bug? module main; import std.stdio; mixin template Test() { 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); } } }
Nov 29 2014
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
Nov 30 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: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."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
Nov 30 2014
https://issues.dlang.org/show_bug.cgi?id=13800
Nov 30 2014
Dne Sun, 30 Nov 2014 19:34:52 +0100 bitwise via Digitalmars-d <digitalmars-d puremagic.com> napsal(a):On Sunday, 30 November 2014 at 08:00:20 UTC, Daniel Kozak wrote:Yes, thats true. It is a bug. But I just try to say you can omit mixin word in template declaration. Because it doesn't have any effect.On Sunday, 30 November 2014 at 02:10:13 UTC, bitwise wrote: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."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
Nov 30 2014
But I just try to say you can omit mixin word in template declaration. Because it doesn't have any effect.mixin != mixin template != template
Nov 30 2014
V Mon, 01 Dec 2014 00:07:10 +0000 bitwise via Digitalmars-d <digitalmars-d puremagic.com> napsáno:Yes and no :) import std.stdio; mixin template t1() { int x = 5; } void main(string[] args) { mixin t1; writeln(x); } is same as: import std.stdio; template t1() { int x = 5; } void main(string[] args) { mixin t1; writeln(x); }But I just try to say you can omit mixin word in template declaration. Because it doesn't have any effect.mixin != mixin template != template
Nov 30 2014
On Monday, 1 December 2014 at 07:28:28 UTC, Daniel Kozák via Digitalmars-d wrote:V Mon, 01 Dec 2014 00:07:10 +0000 bitwise via Digitalmars-d <digitalmars-d puremagic.com> napsáno:Heh... Guess you got me there ;) That is strange though... I don't see in the docs that mixin templates have been deprecated, and can't seem to find anything that doesn't work in both templates and mixin templates. The "mixin name" usage is also not present in the docs for regular templates.Yes and no :) import std.stdio; mixin template t1() { int x = 5; } void main(string[] args) { mixin t1; writeln(x); } is same as: import std.stdio; template t1() { int x = 5; } void main(string[] args) { mixin t1; writeln(x); }But I just try to say you can omit mixin word in template declaration. Because it doesn't have any effect.mixin != mixin template != template
Dec 01 2014
V Tue, 02 Dec 2014 04:05:16 +0000 bitwise via Digitalmars-d <digitalmars-d puremagic.com> napsáno:On Monday, 1 December 2014 at 07:28:28 UTC, Daniel Kozák via Digitalmars-d wrote:There is one limitation of mixin template. You can not do this (instantied mixin template): import std.stdio; mixin template t1() { int x = 5; } void main(string[] args) { alias t1!() T; writeln(T.x); } But this is valid: import std.stdio; template t1() { int x = 5; } void main(string[] args) { alias t1!() T; writeln(T.x); }V Mon, 01 Dec 2014 00:07:10 +0000 bitwise via Digitalmars-d <digitalmars-d puremagic.com> napsáno:Heh... Guess you got me there ;) That is strange though... I don't see in the docs that mixin templates have been deprecated, and can't seem to find anything that doesn't work in both templates and mixin templates. The "mixin name" usage is also not present in the docs for regular templates.Yes and no :) import std.stdio; mixin template t1() { int x = 5; } void main(string[] args) { mixin t1; writeln(x); } is same as: import std.stdio; template t1() { int x = 5; } void main(string[] args) { mixin t1; writeln(x); }But I just try to say you can omit mixin word in template declaration. Because it doesn't have any effect.mixin != mixin template != template
Dec 01 2014
On Monday, 1 December 2014 at 07:28:28 UTC, Daniel Kozák via Digitalmars-dYes and no :)huh, it isn't supposed to be and I'm pretty sure it was made an error at some point...
Dec 01 2014
On Tuesday, 2 December 2014 at 04:17:08 UTC, Adam D. Ruppe wrote:On Monday, 1 December 2014 at 07:28:28 UTC, Daniel Kozák via Digitalmars-dhttp://forum.dlang.org/thread/ntuysfcivhbphnhnnvcw forum.dlang.org#post-mailman.1406.1339349232.24740.digitalmars-d-learn:40puremagic.comYes and no :)huh, it isn't supposed to be and I'm pretty sure it was made an error at some point...
Dec 01 2014