digitalmars.D.bugs - DMD 0.126, anonymous classes
- Andrew Fedoniouk (39/39) Jun 08 2005 Typical Java anonymous class patterns
- Kris (4/43) Jun 08 2005 I understand there's a disclaimer in the documentation regarding the fir...
- Andrew Fedoniouk (21/77) Jun 09 2005 Original Java code:
Typical Java anonymous class patterns import std.stdio; Object makeObj(char[] name) { char[] objName = "My name is " ~ name; return new class Object { char[] toString() { return objName; } }; } int main() { writef ("%s\n", makeObj("Vasili").toString()); return 0; } Produces in RT: "Error: 4invalid UTF-8 sequence" and "Access Violation" - [nodebug]/debug import std.stdio; Object makeAnotherObj(char[] name) { return new class Object { static char[] objName = "My name is"; char[] toString() { return objName ~ name; } }; } int main() { writef ("%s\n", makeAnotherObj("Vasili").toString()); return 0; } Produces in RT: "Access Violation" Andrew.
Jun 08 2005
I understand there's a disclaimer in the documentation regarding the first example. "Andrew Fedoniouk" <news terrainformatica.com> wrote in message news:d88mok$jk2$1 digitaldaemon.com...Typical Java anonymous class patterns import std.stdio; Object makeObj(char[] name) { char[] objName = "My name is " ~ name; return new class Object { char[] toString() { return objName; } }; } int main() { writef ("%s\n", makeObj("Vasili").toString()); return 0; } Produces in RT: "Error: 4invalid UTF-8 sequence" and "Access Violation" - [nodebug]/debug import std.stdio; Object makeAnotherObj(char[] name) { return new class Object { static char[] objName = "My name is"; char[] toString() { return objName ~ name; } }; } int main() { writef ("%s\n", makeAnotherObj("Vasili").toString()); return 0; } Produces in RT: "Access Violation" Andrew.
Jun 08 2005
"Kris" <fu bar.com> wrote in message news:d88n5f$k3j$1 digitaldaemon.com...I understand there's a disclaimer in the documentation regarding the first example.Original Java code: public Object makeObj(String name) { final String objName = "My name is " + name; return new Object() { public String toString() { return objName; } }; } Inner classes in Java can access only finals in outer function because anonymous classes store such variables in hidden fields. Second sample is from the same category - access to stack frame which is gone. Just be aware while writing converter. The problem is not in runtime. Compiler should detect such cases. Bugs like these are too hard to detect in runtime especially if you are getting "invalid UTF-8 sequence". Andrew."Andrew Fedoniouk" <news terrainformatica.com> wrote in message news:d88mok$jk2$1 digitaldaemon.com...Typical Java anonymous class patterns import std.stdio; Object makeObj(char[] name) { char[] objName = "My name is " ~ name; return new class Object { char[] toString() { return objName; } }; } int main() { writef ("%s\n", makeObj("Vasili").toString()); return 0; } Produces in RT: "Error: 4invalid UTF-8 sequence" and "Access Violation" - [nodebug]/debug import std.stdio; Object makeAnotherObj(char[] name) { return new class Object { static char[] objName = "My name is"; char[] toString() { return objName ~ name; } }; } int main() { writef ("%s\n", makeAnotherObj("Vasili").toString()); return 0; } Produces in RT: "Access Violation" Andrew.
Jun 09 2005