digitalmars.D.bugs - [Issue 8161] New: -property should give an error for invalid property functions
- d-bugmail puremagic.com (44/44) May 29 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8161
- d-bugmail puremagic.com (14/41) May 29 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8161
- d-bugmail puremagic.com (12/19) May 29 2012 Yeah, because that's a free function. It's valid to use it as a property...
- d-bugmail puremagic.com (7/24) May 29 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8161
http://d.puremagic.com/issues/show_bug.cgi?id=8161 Summary: -property should give an error for invalid property functions Product: D Version: unspecified Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: jmdavisProg gmx.com --- Comment #0 from Jonathan M Davis <jmdavisProg gmx.com> 2012-05-29 22:36:00 PDT --- This code compiles with -property: struct S { property void prop() { } } void main() { } It makes no sense that it would. prop returns nothing, so it can't be used as a getter, and it takes nothing, so it can't be used as a setter. Neither S s; auto a = s.prop; nor s.prop = a; would compile, so there's no point in letting prop compile with property. Another example would be a function like struct S { property void prop(int a, int b) { } } It can't possibly be used as a property function either. I'd argue that any such function should be considered an error as long as it's marked as property and the -property flag is used. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 29 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8161 --- Comment #1 from Kenji Hara <k.hara.pg gmail.com> 2012-05-29 23:24:13 PDT --- (In reply to comment #0)This code compiles with -property: struct S { property void prop() { } } void main() { } It makes no sense that it would.I can agree.Another example would be a function like struct S { property void prop(int a, int b) { } } It can't possibly be used as a property function either. I'd argue that any such function should be considered an error as long as it's marked as property and the -property flag is used.A property function has two parameters is now allowed for UFCS property setter. property foo(T)(T obj, int val) { ... } void main() { S s; s.foo = 1; // translated to .foo(s, 1), it's valid. } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 29 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8161 --- Comment #2 from Jonathan M Davis <jmdavisProg gmx.com> 2012-05-29 23:30:30 PDT ---A property function has two parameters is now allowed for UFCS property setter.property foo(T)(T obj, int val) { ... } void main() { S s; s.foo = 1; // translated to .foo(s, 1), it's valid. }Yeah, because that's a free function. It's valid to use it as a property, so it makes sense for it to compile with property. The example that I gave with two arguments was a member function, which already has the invisible this parameter, so it won't work as a property. The point is that any function which cannot be legally used as a property function should not compile when marked with property and compiled with -property. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 29 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8161 --- Comment #3 from Kenji Hara <k.hara.pg gmail.com> 2012-05-29 23:38:53 PDT --- (In reply to comment #2)OK. I got an understanding. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------A property function has two parameters is now allowed for UFCS property setter.property foo(T)(T obj, int val) { ... } void main() { S s; s.foo = 1; // translated to .foo(s, 1), it's valid. }Yeah, because that's a free function. It's valid to use it as a property, so it makes sense for it to compile with property. The example that I gave with two arguments was a member function, which already has the invisible this parameter, so it won't work as a property. The point is that any function which cannot be legally used as a property function should not compile when marked with property and compiled with -property.
May 29 2012