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

--
/Jacob Carlborg

Reply via email to