<br><br><div class="gmail_quote">On Thu, Aug 5, 2010 at 22:24, Andrej Mitrovic <span dir="ltr">&lt;<a href="mailto:andrej.mitrovich@gmail.com">andrej.mitrovich@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Thanks, Steven!<br><br>You don&#39;t want to know what I&#39;m up to :p.<br></blockquote><div><br></div><div>Yes, yes, wo do!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>I&#39;m using some traits to find out what kind of parameters a function takes. I&#39;m also using a demangler from phobos to find out the name of the function (But I can&#39;t find any straightforward way to get a name of a function without getting back &quot;1D_5std_5funcName&quot; etc, so I just take a hardcoded slice).<br>
</blockquote><div><br></div><div>You can get the name of an alias using __traits(identifier, aliasName), like this for example:</div><div><br></div><div>template Name(alias a)</div><div>{</div><div>  enum string Name = __traits(identifier, a);</div>
<div>}</div><div><br></div><div>int foo(int i) { return 0;}</div><div><br></div><div>import std.stdio;</div><div>void main()</div><div>{</div><div>  writeln(Name!foo); // &quot;foo&quot;, not &quot;a&quot;.</div><div>}</div>
<div><br></div><div><br></div><div>As for demangling, how do you do to get mangled names in the first place?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<br>Anyway, I have a template function which takes as it&#39;s parameters a function (aliased to func), and some arguments (right now just one in my hardcoded code). It then creates a string which can be compiled via the mixin. It constructs the string by checking the parameter types of func, and for any ref or out parameter it detects it appends something like this to a string:<br>

&quot;long var1; long var2; long var3; &quot;.<br></blockquote><div><br></div><div>How can you know if a parameter is ref or out?</div><div>I remember seeing something about it in Phobos svn, are you using it?</div><div>
<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">So anyway, at the calling site I have this:<br><br>mixin(unpack!(getTimes)(r&quot;C:\\cookies&quot;));<br>
<br>getTimes() is a Phobos function with the signature:<br>getTimes(in char[] name, out d_time ftc, out d_time fta, out d_time ftm)<br>
<br>And now I automatically have var1, var2, and var3 at my disposal. <br></blockquote><div><br></div><div>That&#39;s fun :)</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>It was just an exercise for fun but it&#39;s cool that things like this are possible in D. It would be nice if I could get the actual names of the parameters the function takes + the clear name of the function itself, that way I&#39;d actually get back variables &quot;ftc, fta, ftm&quot; back)</blockquote>
<div><br></div><div>I&#39;m pretty sure I saw some code to do this. But maybe that was a D1 thing, using mangled names, too.</div><div>in dsource/scrapple?</div><div><br></div><div>Philippe</div><div><br></div></div>