IRC log, pmichaud answering why my patch is wrong:

pmichaud: it's something like this:   .value on a Pair is an lvalue
pmichaud: so, if I have    :x   and :y
pmichaud: or, more precisely, if I have
pmichaud: my $x = :x;  my $y = :y;
pmichaud: then both $x.value and $y.value end up referring to exactly
the same PMC
pmichaud: so that if someone ends up later doing   $x.value = 3;
pmichaud: it has the potential to also change $y.value (since they're
bound to the same PMC)
pmichaud: so, what really needs to happen is to end up with separate
copies of Bool::True and Bool::False
pmichaud: i.e., the problem is related to the difference between doing
a binding (which is what your code ends up doing) and an assignment or
using a constant
pmichaud: (I'm trying to think of a good way to update the patch)
pmichaud: okay, I don't have a good fix off the top of my ehad.
pmichaud: For that reason I think perhaps we can go ahead and apply
this patch as-is
pmichaud: but we should put a note in there that it might cause issues
with binding to True/False later.
ihrd: aha, now I am understend
ihrd: no. I don`t, why binding is wrong here? I can`t find out the
situations where this is broken something
ihrd: > my $x = :x; my $y = :y; $x.value = 2; say $y.perl; say $x.perl
ihrd: "y" => Bool::True
ihrd: "x" => 2
pmichaud: yes, but Pairs are currently not doing .value correctly.
When they do, this will break.
ihrd: ah :(

Reply via email to