On 2010-08-05 23:50, Andrej Mitrovic wrote:
On Thu, Aug 5, 2010 at 11:29 PM, Philippe Sigaud
<[email protected] <mailto:[email protected]>> wrote:
On Thu, Aug 5, 2010 at 22:24, Andrej Mitrovic
<[email protected] <mailto:[email protected]>> wrote:
Thanks, Steven!
You don't want to know what I'm up to :p.
Yes, yes, wo do!
I'm using some traits to find out what kind of parameters a
function takes. I'm also using a demangler from phobos to find
out the name of the function (But I can't find any
straightforward way to get a name of a function without getting
back "1D_5std_5funcName" etc, so I just take a hardcoded slice).
You can get the name of an alias using __traits(identifier,
aliasName), like this for example:
template Name(alias a)
{
enum string Name = __traits(identifier, a);
}
int foo(int i) { return 0;}
import std.stdio;
void main()
{
writeln(Name!foo); // "foo", not "a".
}
As for demangling, how do you do to get mangled names in the first
place?
I was using mangledName!() from std.straits. __traits works prefectly,
Thanks!
You know there is a .mangleof property for all symbols.
Anyway, I have a template function which takes as it'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:
"long var1; long var2; long var3; ".
How can you know if a parameter is ref or out?
I remember seeing something about it in Phobos svn, are you using it?
Not svn, it's in 2.047 (maybe in earlier ones as well) in std.traits:
ParameterTypeTuple!(alias) - for the types
ParameterStorageClassTuple!(alias) - for the storage class
So anyway, at the calling site I have this:
mixin(unpack!(getTimes)(r"C:\\cookies"));
getTimes() is a Phobos function with the signature:
getTimes(in char[] name, out d_time ftc, out d_time fta, out
d_time ftm)
And now I automatically have var1, var2, and var3 at my disposal.
That's fun :)
It was just an exercise for fun but it'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'd actually get back
variables "ftc, fta, ftm" back)
I'm pretty sure I saw some code to do this. But maybe that was a D1
thing, using mangled names, too.
in dsource/scrapple?
Philippe
Dunno, I haven'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.
--
/Jacob Carlborg