| Index: src/pathops/SkOpContour.cpp
 | 
| ===================================================================
 | 
| --- src/pathops/SkOpContour.cpp	(revision 9040)
 | 
| +++ src/pathops/SkOpContour.cpp	(working copy)
 | 
| @@ -64,38 +64,36 @@
 | 
|      #endif
 | 
|          double startT = coincidence.fTs[0][0];
 | 
|          double endT = coincidence.fTs[0][1];
 | 
| -        bool cancelers;
 | 
| -        if ((cancelers = startT > endT)) {
 | 
| +        bool startSwapped, oStartSwapped, cancelers;
 | 
| +        if ((cancelers = startSwapped = startT > endT)) {
 | 
|              SkTSwap(startT, endT);
 | 
| -            SkTSwap(coincidence.fPts[0], coincidence.fPts[1]);
 | 
|          }
 | 
|          SkASSERT(!approximately_negative(endT - startT));
 | 
|          double oStartT = coincidence.fTs[1][0];
 | 
|          double oEndT = coincidence.fTs[1][1];
 | 
| -        if (oStartT > oEndT) {
 | 
| -            SkTSwap<double>(oStartT, oEndT);
 | 
| +        if ((oStartSwapped = oStartT > oEndT)) {
 | 
| +            SkTSwap(oStartT, oEndT);
 | 
|              cancelers ^= true;
 | 
|          }
 | 
|          SkASSERT(!approximately_negative(oEndT - oStartT));
 | 
| -        bool opp = fOperand ^ otherContour->fOperand;
 | 
| -        if (cancelers && !opp) {
 | 
| +        if (cancelers) {
 | 
|              // make sure startT and endT have t entries
 | 
|              if (startT > 0 || oEndT < 1
 | 
|                      || thisOne.isMissing(startT) || other.isMissing(oEndT)) {
 | 
| -                thisOne.addTPair(startT, &other, oEndT, true, coincidence.fPts[0]);
 | 
| +                thisOne.addTPair(startT, &other, oEndT, true, coincidence.fPts[startSwapped]);
 | 
|              }
 | 
|              if (oStartT > 0 || endT < 1
 | 
|                      || thisOne.isMissing(endT) || other.isMissing(oStartT)) {
 | 
| -                other.addTPair(oStartT, &thisOne, endT, true, coincidence.fPts[1]);
 | 
| +                other.addTPair(oStartT, &thisOne, endT, true, coincidence.fPts[oStartSwapped]);
 | 
|              }
 | 
|          } else {
 | 
|              if (startT > 0 || oStartT > 0
 | 
|                      || thisOne.isMissing(startT) || other.isMissing(oStartT)) {
 | 
| -                thisOne.addTPair(startT, &other, oStartT, true, coincidence.fPts[0]);
 | 
| +                thisOne.addTPair(startT, &other, oStartT, true, coincidence.fPts[startSwapped]);
 | 
|              }
 | 
|              if (endT < 1 || oEndT < 1
 | 
|                      || thisOne.isMissing(endT) || other.isMissing(oEndT)) {
 | 
| -                other.addTPair(oEndT, &thisOne, endT, true, coincidence.fPts[1]);
 | 
| +                other.addTPair(oEndT, &thisOne, endT, true, coincidence.fPts[!oStartSwapped]);
 | 
|              }
 | 
|          }
 | 
|      #if DEBUG_CONCIDENT
 | 
| @@ -135,8 +133,7 @@
 | 
|              cancelers ^= true;
 | 
|          }
 | 
|          SkASSERT(!approximately_negative(oEndT - oStartT));
 | 
| -        bool opp = fOperand ^ otherContour->fOperand;
 | 
| -        if (cancelers && !opp) {
 | 
| +        if (cancelers) {
 | 
|              // make sure startT and endT have t entries
 | 
|              if (!thisOne.done() && !other.done()) {
 | 
|                  thisOne.addTCancel(startT, endT, &other, oStartT, oEndT);
 | 
| 
 |