Expression evaluation order
Iain Buclaw
ibuclaw at ubuntu.com
Fri Jun 14 04:30:24 PDT 2013
On 14 June 2013 12:04, bearophile <bearophileHUGS at lycos.com> wrote:
> Iain Buclaw:
>
>
>> However yes, the behaviour relies on the order the sucky X86 ABI
>> pushes arguments onto the stack (which for this array op is from right
>> to left). Whereas on *all* other architectures it will execute the
>> parameters in left to right order, which would be a, c, b in this case.
>
>
> D needs the same standard order of evaluations for all expressions on all
> compilers, regardless of the CPUs. The only other acceptable alternative is
> to statically forbid code that risks having variable results.
>
> (And I think the right order for that is b, c, a).
>
Right... and the way to do that would be to evaluate the argument
before calling the array op.
eg:
ref _tmp1 = b()[];
ref _tmp2 = c()[];
ref _tmp3 = a()[];
_tmp3 = _arrayOp(_tmp3, _tmp2, _tmp1);
--
Iain Buclaw
*(p < e ? p++ : p) = (c & 0x0f) + '0';
More information about the Digitalmars-d
mailing list