digitalmars.D.bugs - [Issue 3944] New: Require immutable annotation for new fields of class inherited from immutable class
- d-bugmail puremagic.com (40/40) Mar 12 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3944
- d-bugmail puremagic.com (18/18) Jul 07 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3944
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
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: -------
Mar 12 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3944
Tim Verweij <tjverweij gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |tjverweij gmail.com
---
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: -------
Jul 07 2010








d-bugmail puremagic.com