digitalmars.D - Escaping closure (D1)
- Denis Koroskin (20/20) Dec 13 2008 Everyone understands that the following code is incorrect in D1:
Everyone understands that the following code is incorrect in D1:
int delegate() foo(int x)
{
int n = x;
auto bar = () { return n; };
// do stuff
return bar;
}
Unfortunately, DMD doesn't detect this kind of errors at compile time, and the
spec is not subject to change, so let's make it a runtime error instead!
It is possible to do by making delegate reference counted in debug mode:
int delegate() foo(int x)
{
int n = x;
int __bar_referenceCounter = 0;
auto bar = () { return n; };
scope (exit) assert(__bar_referenceCounter == 0, bar.stringof ~ " has
escaped the scope!");
// do stuff
return bar;
} // we get an assertion failure at this point
It is not a breaking change, but will help avoid errors at early stage.
Dec 13 2008








"Denis Koroskin" <2korden gmail.com>