digitalmars.D.bugs - [Issue 6274] New: 'pure' for a whole struct definition
- d-bugmail puremagic.com (49/49) Jul 08 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6274
- d-bugmail puremagic.com (51/51) Aug 12 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6274
http://d.puremagic.com/issues/show_bug.cgi?id=6274 Summary: 'pure' for a whole struct definition Product: D Version: D2 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 2011-07-08 18:03:32 PDT --- Just like "final" applied to a class makes all its methods non-virtual: final class Foo { int x; this(int xx) { x = xx; } void bar() {} static void spam() {} } void main() {} I'd like the attribute "pure" applied to a struct/class (in DMD 2.054beta this doesn't compile): pure struct Foo { int x; this(int xx) { x = xx; } void bar() {} static void spam() {} } void main() pure { Foo f = Foo(1); f.bar(); Foo.spam(); } to be equivalent to adding "pure" to all its methods: struct Foo { int x; this(int xx) pure { x = xx; } void bar() pure {} static void spam() pure {} } void main() pure { Foo f = Foo(1); f.bar(); Foo.spam(); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 08 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6274 --- Comment #1 from bearophile_hugs eml.cc 2011-08-12 12:44:00 PDT --- There is something I don't fully understand. The following code compiles with the improvements in DMD 2.055alpha/head, but it needs a "pure" or before "struct Map" (here#1) or at the front() method of Map (here#2). If both are removed it doesn't compile. So is the pure attribute for struct partially working already? property bool empty(T)(in T[] a) pure nothrow { return !a.length; } property ref T front(T)(T[] a) pure nothrow { assert(a.length); return a[0]; } void popFront(A)(ref A a) pure nothrow { assert(a.length); a = a[1 .. $]; } pure struct Map(alias fun, R) { // here#1 R _input; this(R input) nothrow pure { _input = input; } property bool empty() nothrow const pure { return _input.empty; } property auto ref front() nothrow const { // here#2 return fun(_input.front); } void popFront() nothrow pure { _input.popFront(); } } template map(alias fun) { auto map(R)(R range) { return Map!(fun, R)(range); } } int sqr(int x) pure nothrow { return x * x; } pure nothrow int foo(int n) { int total; foreach (x; map!(sqr)([1, 2, 3, 4])) total += x; return total; } void main() { assert(foo(10) == 30); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 12 2011