On Tue, 20 Sep 2005 11:21:40 -0700, Yitzchak Scott-Thoennes <[EMAIL PROTECTED]> wrote:
> 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. I just didn't understand why it was changed. Changes like this (and the scattered const additions, thanks Andy) make maintaining the dor patch take a lot of time. But it's in working order again, and it still passes all tests :) -- H.Merijn Brand Amsterdam Perl Mongers (http://amsterdam.pm.org/) using Perl 5.6.2, 5.8.0, 5.8.5, & 5.9.2 on HP-UX 10.20, 11.00 & 11.11, AIX 4.3 & 5.2, SuSE 9.2 & 9.3, and Cygwin. http://www.cmve.net/~merijn Smoking perl: http://www.test-smoke.org, perl QA: http://qa.perl.org reports to: [EMAIL PROTECTED], perl-qa@perl.org