Mixin Expressions, can't evalutate string variable
Andrej Mitrovic
andrej.mitrovich at gmail.com
Thu Aug 5 14:50:13 PDT 2010
On Thu, Aug 5, 2010 at 11:29 PM, Philippe Sigaud
<philippe.sigaud at gmail.com>wrote:
>
>
> On Thu, Aug 5, 2010 at 22:24, Andrej Mitrovic <andrej.mitrovich at gmail.com>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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20100805/e981e53c/attachment.html>
More information about the Digitalmars-d
mailing list