Eirik Berg Hanssen <[EMAIL PROTECTED]> wrote:
> Which Perl5 (xor, undef) would this be? It does not look like the
> result is undef around here:
> [EMAIL PROTECTED]:~$ perl -le 'print defined($_)?"defined":"undef", ": �$_�"
> for map {(undef xor $_), ($_ xor undef), (undef ^ $_), ($_ ^ undef)}
> "string", "", -1, 0, 1 , 2'
This "xor" is returning the bool values, which is quite different to
returning a value according to the xor of the booleans.
perl -le 'print defined($_)?"defined":"undef", ": �$_�"
for map {(undef xor $_), ($_ xor undef)}
"string", "", undef, -1, 0, 1 , 2'
dropping bitwise xor, and including "undef xor undef" reveals that Perl5
has a different opinion then Parrot (or Perl6?).
inline op xor(out INT, in INT, in INT) :base_core {
$1 = ($2 && ! $3) ? $2 : ($3 && ! $2) ? $3 : 0;
goto NEXT();
}
static void
mmd_fallback_lxor_pmc(Parrot_Interp interp, PMC *left, PMC *right, PMC *dest)
{
INTVAL left_truth, right_truth;
PMC *true;
left_truth = VTABLE_get_bool(interp, left);
right_truth = VTABLE_get_bool(interp, right);
if (left_truth && !right_truth)
true = left;
else if (!left_truth && right_truth)
true = right;
else {
VTABLE_set_integer_native(interp, dest, 0);
return;
}
VTABLE_set_pmc(interp, dest, true);
}
We need language lawyers ;)
leo