On Thu, Aug 5, 2010 at 11:29 PM, Philippe Sigaud <[email protected]>wrote:
> > > On Thu, Aug 5, 2010 at 22:24, Andrej Mitrovic > <[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! > >> 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.
