On Tuesday, 12 July 2016 at 11:26:20 UTC, jj75607 wrote:
I want to use aspect-like annotations to transform@Lockable class Abc { @sync void f() { writeln("f"); } @shared void g() { writeln("g"); } } to something like: class Abc { shared(ReadWriteMutex) _lock123; this() { _lock123 = cast(shared)(new ReadWriteMutex()); } void f() { synchronized((cast()_lock123).writer) { writeln("f"); } } void g() { synchronized((cast()_lock123).reader) { writeln("g"); } } } How can I do that?
I don't think UDAs can be used that way in D, but I'm not an expert. When I want to achieve something similar to this kind of rewriting, I usually use a mix of template mixins[1] and string mixins[2,3].
[1] https://dlang.org/spec/template-mixin.html [2] https://dlang.org/spec/statement.html#MixinStatement [3] https://dlang.org/mixin.html
