On Mon, Sep 19, 2005 at 11:31:19PM +0100, Nicholas Clark wrote:
> Merijn notices this line in 5.8.x in S_new_logop
> 
>   if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) {
> 
> It's wonky. It seems to be wrong. But it's been that way since 5.8.0 started.
> 
> The corresponding point in blead is
> 
>   if ((type == OP_AND &&  SvTRUE(((SVOP*)first)->op_sv)) ||
>       (type == OP_OR  && !SvTRUE(((SVOP*)first)->op_sv)) ||
>       (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
> 
> 
> This was patched by Marcus Holland-Moritz, changing that == to && in the 
> process:
> 
> http://public.activestate.com/cgi-bin/perlbrowse?patch=22625
> 
> Presumably '==' is wrong. But if this is a bug, how can it be detected
> with a perl level regression test?

== is correct; if both operands are 0 or 1,  a == b is equivalent
to !(a ^ b) is equivalent to !(a && !b || !a && b) is equivlent to
a && b || !a && !b.

Reply via email to