Multiple return values...

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Mar 15 08:32:22 PDT 2012


On 3/15/12 5:14 AM, Iain Buclaw wrote:
> On 15 March 2012 09:52, Derek<ddparnell at bigpond.com>  wrote:
>> Are you saying that the generated code is something like ...
>>
>>    struct __tmpS { int Fa, int Fb };
>>    __tempS __tmp;
>>    __tmp.Fa = a;
>>    __tmp.Fb = b;
>>    a = __tmp.Fb;
>>    b = __tmp.Fa;
>>
>
> In effect, yes.  Given that the call to from() is inlined. :-)
>
> In GDC, you have a -fdump-tree-original switch that dumps a debug
> representation (that just so happens to look C-like) of the AST of the
> code to a file.  You could use this to unravel some of the magic going
> on under the covers. ;-)

One note - the code is really ingenious, but I still prefer swap() in 
this case. It's more concise and does less work in the general case.

swap(a[i + k], a[j + j]);

only computes the indexing once (in source, too).


Andrei



More information about the Digitalmars-d mailing list