Get Function Body

Stefan Koch via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 30 09:43:33 PDT 2017


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.



More information about the Digitalmars-d-learn mailing list