On Saturday, 28 November 2015 at 15:41:59 UTC, Quentin Ladeveze wrote:
On Saturday, 28 November 2015 at 15:22:51 UTC, tcak wrote:
On Saturday, 28 November 2015 at 15:02:32 UTC, Quentin Ladeveze wrote:
Hi,

Is it possible to retrieve the calling expression of a function ? Something like that

---
import std.stdio;

void funcTest(int x, float y)
{
  writefln(get_call());
}

void main()
{
  float x = 0.2;
  funcTest(1+2, x+2);
}
---

output expected : " funcTest(1+2, x+2) "

Thanks

I do not have right now to provide you with code, but three things:

1. Use of mixin,
2. The function call to be written in a string,
3. A wrapper that stores given function call string, saves it, and mixin it.

Thanks, it was a cool idea, I made something that works, but you can only call the function with literals, not with variables :

---

import std.stdio;

void main()
{
        int x = 2;

        enum call = "funcTest(1, 0.2);";
        callPrinter!call;
}

template callPrinter(string call)
{
        void callPrinter()
        {
                writeln(call);
                mixin(call);
        }
}

void funcTest(int x, float y)
{
        writeln("called with ", x, " and ", y);
}

---

output :
funcTest(2, 0.2);
called with 2 and 0.2

mixin template could solve this problem as well I guess. It would, instead of calling a function, directly inject the code into where you call it. So, remove the callPrinter function, make template a mixin template, and in main, call it like mixin callPrinter!"...";

Reply via email to