Thread overview | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
March 18, 2009 [Issue 2740] New: Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=2740 Summary: Template Mixins do not work as advertised Product: D Version: unspecified Platform: PC OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: andrew.livesay@gmail.com // As I understand TFM, all three calls to go() should be printing 'false'. import std.stdio; interface IFooable { bool foo(); } template TFoo() { bool foo() { return true; } } class Foo : IFooable { mixin TFoo; bool foo() { return false; } } class _Foo : IFooable { mixin TFoo; } class Foo2 : _Foo { bool foo() { return false; } } class Foo3 : IFooable { bool foo() { return false; } } void go(IFooable p) { writefln(p.foo); } void main() { Foo p = new Foo(); Foo2 p2 = new Foo2(); Foo3 p3 = new Foo3(); go(p); // output is "true" <------- Why isn't this false? go(p2); // output is "false" go(p3); // output is "false" } -- |
March 18, 2009 [Issue 2740] Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2740 ------- Comment #1 from andrew.livesay@gmail.com 2009-03-17 21:31 ------- Issue appears to be dependent on the order the mixin is imported. If you redefine foo() before "mixin TFoo;", it works as expected. -- |
September 08, 2010 [Issue 2740] Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2740 David Simcha <dsimcha@yahoo.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dsimcha@yahoo.com Severity|normal |critical --- Comment #2 from David Simcha <dsimcha@yahoo.com> 2010-09-08 10:40:17 PDT --- This seems to happen iff the class is called from its interface handle: import std.stdio; interface IFooable { bool foo(); } mixin template TFoo() { override bool foo() { return true; } } class Foo : IFooable { mixin TFoo; override bool foo() { return false; } } void go(IFooable p) { writeln(p.foo); } void main() { Foo p = new Foo(); go(p); // true writeln(p.foo); // false IFooable i = p; writeln(i.foo); // true } Marking as critical because this is an extremely subtle wrong-code bug that can lead to some pretty frustrating debugging. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
September 08, 2010 [Issue 2740] Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2740 --- Comment #3 from David Simcha <dsimcha@yahoo.com> 2010-09-08 10:42:34 PDT --- Oh yeah, doesn't happen for abstract classes either. Looks like only the interface vtbl info is wrong. import std.stdio; abstract class IFooable { abstract bool foo(); } mixin template TFoo() { override bool foo() { return true; } } class Foo : IFooable { mixin TFoo; override bool foo() { return false; } } void go(IFooable p) { writeln(p.foo); } void main() { Foo p = new Foo(); go(p); // false writeln(p.foo); // false IFooable i = p; writeln(i.foo); // false } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
December 03, 2010 [Issue 2740] Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2740 Bruno Medeiros <bdom.pub+deebugz@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bdom.pub+deebugz@gmail.com --- Comment #4 from Bruno Medeiros <bdom.pub+deebugz@gmail.com> 2010-12-03 06:33:18 PST --- Hum, I suspect the code above should not even compile. Instantiating the mixin "is analogous to cutting and pasting the body of the template into the location of the mixin." http://www.digitalmars.com/d/2.0/template-mixin.html Thus it should be the same as: class Foo : IFooable { bool foo() { return false; } bool foo() { return false; } } which should be a semantic error, I think. See http://d.puremagic.com/issues/show_bug.cgi?id=5312 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
December 03, 2010 [Issue 2740] Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2740 --- Comment #5 from Sobirari Muhomori <dfj1esp02@sneakemail.com> 2010-12-03 11:57:37 PST --- The right code can't be generated for such input. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
February 19, 2011 [Issue 2740] Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2740 akb825@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |akb825@gmail.com --- Comment #6 from akb825@gmail.com 2011-02-19 12:18:10 PST --- (In reply to comment #4) > Hum, I suspect the code above should not even compile. Instantiating the mixin > "is analogous to cutting and pasting the body of the template into the location > of the mixin." http://www.digitalmars.com/d/2.0/template-mixin.html > Thus it should be the same as: > > class Foo : IFooable { > bool foo() { return false; } > bool foo() { return false; } > } > > > which should be a semantic error, I think. See http://d.puremagic.com/issues/show_bug.cgi?id=5312 From http://www.digitalmars.com/d/2.0/template-mixin.html: "The declarations in a mixin are ‘imported’ into the surrounding scope. If the name of a declaration in a mixin is the same as a declaration in the surrounding scope, the surrounding declaration overrides the mixin one." In other words, declarations in the current scope always hide declarations in the mixin. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
July 09, 2011 [Issue 2740] Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2740 Kenji Hara <k.hara.pg@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch CC| |k.hara.pg@gmail.com --- Comment #7 from Kenji Hara <k.hara.pg@gmail.com> 2011-07-09 16:45:34 PDT --- https://github.com/D-Programming-Language/dmd/pull/223 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
October 14, 2011 [Issue 2740] Template Mixins do not work as advertised | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2740 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla@digitalmars.com Resolution| |FIXED --- Comment #8 from Walter Bright <bugzilla@digitalmars.com> 2011-10-13 19:40:50 PDT --- https://github.com/D-Programming-Language/dmd/commit/4081225e4407ca08d6c8f9a390e1bb6def057c29 https://github.com/D-Programming-Language/dmd/commit/73e600b38ec0fdcadd3855db4b0ccac53a451da0 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation