digitalmars.D.bugs - [Issue 325] New: Overriding members and overloading with alias causes bogus error messages in with().
- d-bugmail puremagic.com (46/46) Sep 06 2006 http://d.puremagic.com/issues/show_bug.cgi?id=325
- Thomas Kuehne (14/47) Sep 07 2006 -----BEGIN PGP SIGNED MESSAGE-----
- d-bugmail puremagic.com (9/9) Sep 19 2006 http://d.puremagic.com/issues/show_bug.cgi?id=325
http://d.puremagic.com/issues/show_bug.cgi?id=325
Summary: Overriding members and overloading with alias causes
bogus error messages in with().
Product: D
Version: unspecified
Platform: PC
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla digitalmars.com
ReportedBy: chris dprogramming.com
I finally was able to reproduce this problem with a small example:
// Code begin
class Base
{
private char[] myfoo;
private char[] mybar;
// Get/set properties that will be overridden.
void foo(char[] s) { myfoo = s; }
char[] foo() { return myfoo; }
// Get/set properties that will not be overridden.
void bar(char[] s) { mybar = s; }
char[] bar() { return mybar; }
}
class Derived: Base
{
alias Base.foo foo; // Bring in Base's foo getter.
override void foo(char[] s) { super.foo = s; } // Override foo setter.
}
void main()
{
Derived d;
with(d = new Derived)
{
foo = "hi"; // Error! Due to the alias up there.
d.foo = "hi"; // Works
bar = "hi";
}
}
// Code end
DMD 0.161 through 0.166 output: test.d(26): need 'this' to access member text
I was able to find a workaround, simply put the alias after the function in the
class instead of before.
--
Sep 06 2006
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 d-bugmail puremagic.com schrieb am 2006-09-06:http://d.puremagic.com/issues/show_bug.cgi?id=325I finally was able to reproduce this problem with a small example: // Code begin class Base { private char[] myfoo; private char[] mybar; // Get/set properties that will be overridden. void foo(char[] s) { myfoo = s; } char[] foo() { return myfoo; } // Get/set properties that will not be overridden. void bar(char[] s) { mybar = s; } char[] bar() { return mybar; } } class Derived: Base { alias Base.foo foo; // Bring in Base's foo getter. override void foo(char[] s) { super.foo = s; } // Override foo setter. } void main() { Derived d; with(d = new Derived) { foo = "hi"; // Error! Due to the alias up there. d.foo = "hi"; // Works bar = "hi"; } } // Code end DMD 0.161 through 0.166 output: test.d(26): need 'this' to access member text I was able to find a workaround, simply put the alias after the function in the class instead of before.Added to DStress as http://dstress.kuehne.cn/run/w/with_15_A.d http://dstress.kuehne.cn/run/w/with_15_B.d http://dstress.kuehne.cn/run/w/with_15_C.d http://dstress.kuehne.cn/run/w/with_15_D.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFE/9QJLK5blCcjpWoRAnIYAKCpTEVbTXmI9N8OnF5JZ8MZq6mxWwCgrUbq Jh4GAQ662tCJbyKFm80A3bg= =CsG9 -----END PGP SIGNATURE-----
Sep 07 2006
http://d.puremagic.com/issues/show_bug.cgi?id=325
bugzilla digitalmars.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Fixed in DMC 0.167.
--
Sep 19 2006









Thomas Kuehne <thomas-dloop kuehne.cn> 