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