March 12, 2010 [Issue 3944] New: Require immutable annotation for new fields of class inherited from immutable class | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=3944 Summary: Require immutable annotation for new fields of class inherited from immutable class Product: D Version: 2.041 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: bearophile_hugs@eml.cc --- Comment #0 from bearophile_hugs@eml.cc 2010-03-12 14:57:54 PST --- This is a wrong D2 program: immutable class Foo {} class Bar : Foo { int x; } void main() { auto b = new Bar; b.x = 10; // line 5 } From the error message it's clear that x is not a mutable variable: test.d(5): Error: can only initialize const member x inside constructor But from the code of the Foo class there is no clear indication that x is immutable. So in this situation I think it's better if the compiler requires a immutable annotation on x too, for code readability, something like: immutable class Foo {} class Bar : Foo { int x; } // Error: attribute x requires 'immutable' annotation void main() { auto b = new Bar; } immutable class Foo {} class Bar : Foo { immutable int x; } // OK, no error void main() { auto b = new Bar; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
July 07, 2010 [Issue 3944] Require immutable annotation for new fields of class inherited from immutable class | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile_hugs@eml.cc | http://d.puremagic.com/issues/show_bug.cgi?id=3944 Tim Verweij <tjverweij@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |tjverweij@gmail.com --- Comment #1 from Tim Verweij <tjverweij@gmail.com> 2010-07-07 14:36:34 PDT --- Here's another situation that produces the same error message: class Foo { int x; immutable void bar() { x = 1; } } Error: can only initialize const member x inside constructor It should probably report something along the lines of "immutable member function cannot modify member variables". -- 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