On 13/07/2014 11:50 p.m., Jacob Carlborg wrote:
On 2014-07-12 05:59, Rikki Cattermole wrote:
Something I've been thinking about is an overload for with statement.
E.g.
with(new MyAllocator) {
void*[256] values;
//...
}
class MyAllocator : IGC {
private {
IGC prevGC;
}
void opWithIn() {
this.prevGC = GC.getImpl();
GC.setImpl(this);
}
void opWithOut() {
GC.setImpl(this.prevGC);
}
}
Or without language changes:
void withAllocator (alias allocator, alias block)
{
auto prevGC = GC.getImpl();
scope(exit)
GC.setImpl(this.prevGC);
GC.setImpl(allocator);
block();
}
withAllocator!(new Allocator, {
void*[256] values;
});
Not as nice syntax though. That could of course be fixed with AST macros
[1] :)
[1] http://wiki.dlang.org/DIP50#Statement_Macros
Definitely, but there is a rather big difference in requirements to
implement them ;)
But in saying this, we might be able to move the with statement into
druntime via AST macros. Should it have the ability to modify the this
context like with statement does now.