On Friday, 30 June 2017 at 16:38:45 UTC, bauss wrote:
Is there a way to retrieve the body of a function as a string?

Scenario.

I want to pass a function to a mixin template and just mixin the body of the function.

Ex.

mixin template Foo(alias fun) {
    void bar() {
        mixin(getBodyOfFun(fun));
    }
}

I'm aware that I can pass a string like mixin Foo!"a > b" but I would really like to avoid that.

I also can't just call "fun" as normal, unless it can be forced to be inline within the mixin template. The reason is if I mixin two mixin templates with the same function passed it must exist as two different function bodies executed, even tho they do the same.

Which means the following must have two "different" baz and not the actual baz.

void baz() { ... }

mixin Foo!baz;
mixin Foo!baz;

I don't know if it'll be possible without some sort of "parsing" the function or even without "string function bodies".

You need to function body as a string.
There is no way of retriving a functionBodyString from the compiler.
And I suspect it would be a bad idea to be able to do so.
Since the compiler may mutate the body while processing/optimizing.

Reply via email to