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.

Reply via email to