<div class="gmail_quote">On Thu, Aug 5, 2010 at 11:29 PM, Philippe Sigaud <span dir="ltr">&lt;<a href="mailto:philippe.sigaud@gmail.com">philippe.sigaud@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br><br><div class="gmail_quote"><div class="im">On Thu, Aug 5, 2010 at 22:24, Andrej Mitrovic <span dir="ltr">&lt;<a href="mailto:andrej.mitrovich@gmail.com" target="_blank">andrej.mitrovich@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); 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><div>Yes, yes, wo do!</div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); 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><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 class="im"><div><br></div><div>import std.stdio;</div><div>void main()</div><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 class="im"><div> </div></div></div></blockquote><div><br>I was using mangledName!() from std.straits. __traits works prefectly, Thanks!<br>
<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); 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><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 class="im"><div>
<br></div></div></div></blockquote><div><br>Not svn, it&#39;s in 2.047 (maybe in earlier ones as well) in std.traits:<br><br>ParameterTypeTuple!(alias) - for the types<br>ParameterStorageClassTuple!(alias) - for the storage class<br>
<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="gmail_quote"><div class="im"><div></div><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); 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><div>That&#39;s fun :)</div><div class="im"><div><br></div><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); 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><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>
</blockquote><div><br>Dunno, I haven&#39;t been using D1 really (actually I tried it some years ago with Tango but it left me wanting more so I never stuck around much). But D2 is super-fun.<br><br><br></div></div><br>