digitalmars.D.bugs - [Issue 10103] New: template mixin with property overloads
- d-bugmail puremagic.com (41/41) May 17 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (10/10) May 17 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (11/11) May 20 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (9/9) May 20 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (9/9) May 29 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (8/8) Jun 01 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (10/10) Oct 23 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (9/9) Oct 23 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (21/21) Oct 23 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (46/57) Oct 24 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
- d-bugmail puremagic.com (7/7) Oct 24 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10103
http://d.puremagic.com/issues/show_bug.cgi?id=10103
Summary: template mixin with property overloads
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: SebastianGraf t-online.de
02:31:31 PDT ---
If you mix in getters and setters in seperate template mixins, it fails to
compile on first property-like usage.
Strangely, you may use both overloads if you treat them like functions (e.g.
the first examples in main below).
I think this is related to http://d.puremagic.com/issues/show_bug.cgi?id=1686
and http://d.puremagic.com/issues/show_bug.cgi?id=9235.
Offending code:
mixin template Getter() {
property auto x() { return _x; }
}
mixin template Setter() {
property void x(int x) { _x = x; }
}
struct Foo {
int _x;
mixin Getter!(); // definition order is irrelevant
mixin Setter!();
}
void main() {
auto f = Foo(4);
auto x1 = f.x(); //fine
f.x(2); // fine
auto x2 = f.x; // Error: expression has no value
f.x = 3; // Error: f.x is not an lvalue
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 17 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103
Kenji Hara <k.hara.pg gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |pull, rejects-valid
https://github.com/D-Programming-Language/dmd/pull/2047
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 17 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103 Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/e892946b376b8365bc6cefd896e5e3e6a1219b16 fix Issue 10103 - template mixin with property overloads https://github.com/D-Programming-Language/dmd/commit/fa4a52c8e832f43081349332ea3d274d976c54ca Issue 10103 - template mixin with property overloads -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 20 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103
Kenji Hara <k.hara.pg gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 20 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103 Commit pushed to 2.063 at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/76d09dfa5ef28176f666aa6f50038ed6a48b830b Fix 2.063 branch breaking Bug10103 is not yet fixed in 2.063 branch. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 29 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103 Commit pushed to 2.063 at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/76d09dfa5ef28176f666aa6f50038ed6a48b830b Fix 2.063 branch breaking -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 01 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103 2013-10-23 23:39:05 PDT --- Created an attachment (id=1281) Alternative example of problem The problem does not appear to be resolved in all cases. See attached code, where a class takes _one_ of the implementations (getter _or_ setter) via a mixin, and the other is local. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 23 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103 2013-10-23 23:40:30 PDT --- Created an attachment (id=1282) Second example of bug still in existence This second example has the _getter_ obtained via mixin, while the setter is in the class itself. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 23 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103
Joseph Rushton Wakeling <joseph.wakeling webdrake.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
CC| |joseph.wakeling webdrake.ne
| |t
Resolution|FIXED |
2013-10-23 23:42:49 PDT ---
The current fix does not cover all possible cases. The two recently-attached
examples show cases where, of a getter/setter property pair, a class implements
one of them locally and obtains the other via a mixin. In both cases errors
result:
$ rdmd mixproperty.d
mixproperty.d(30): Error: a.foo is not an lvalue
$ rdmd mixproperty2.d
mixproperty2.d(31): Error: function mixproperty2.A.foo (const(int) f) is
not callable using argument types ()
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 23 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103
Kenji Hara <k.hara.pg gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |RESOLVED
Resolution| |FIXED
The current fix does not cover all possible cases. The two recently-attached
examples show cases where, of a getter/setter property pair, a class implements
one of them locally and obtains the other via a mixin. In both cases errors
result:
$ rdmd mixproperty.d
mixproperty.d(30): Error: a.foo is not an lvalue
$ rdmd mixproperty2.d
mixproperty2.d(31): Error: function mixproperty2.A.foo (const(int) f) is
not callable using argument types ()
No. The two cases does not work as you expected. **It's by design**.
mixin template B()
{
void foo(int n) {}
}
class C
{
void foo() {}
// Mixed-in symbol foo(int) won't be automatically merged with foo().
// In other words, C.foo() hides C.B!().foo(int) normally.
mixin B;
}
void main()
{
auto c = new C;
c.foo(); // OK
c.foo(1); // NG, foo() is not callable using argument types (int)
}
If you want to make workable both c.foo() and c.foo(1), you need to change the
mixin declaration as follows.
class C
{
...
mixin B x;
alias foo = x.foo; // merge foo(int) in the overload set 'C.foo'
}
void main()
{
auto c = new C;
c.foo(); // OK
c.foo(1); // OK
}
I know that currently D does not have a feature to do it automatically. If you
want to do it, you could design a language enhancement to resolve the issue.
Change back the issue status.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 24 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10103 2013-10-24 02:21:52 PDT --- Thanks for the explanation, Kenji -- apologies for the misunderstanding, but at least we now have this special case documented here :-) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 24 2013









d-bugmail puremagic.com 