| Index: src/pathops/SkOpContour.h
 | 
| diff --git a/src/pathops/SkOpContour.h b/src/pathops/SkOpContour.h
 | 
| index 8cedab4cb1ebb0b5e35be9bcf4223c8b1183dea1..5b92a4b071b999d9adfad3d8f89a8ad025b75f38 100644
 | 
| --- a/src/pathops/SkOpContour.h
 | 
| +++ b/src/pathops/SkOpContour.h
 | 
| @@ -25,7 +25,7 @@ class SkOpContour {
 | 
|  public:
 | 
|      SkOpContour() {
 | 
|          reset();
 | 
| -#ifdef SK_DEBUG
 | 
| +#if defined(SK_DEBUG) || !FORCE_RELEASE
 | 
|          fID = ++SkPathOpsDebug::gContourID;
 | 
|  #endif
 | 
|      }
 | 
| @@ -77,18 +77,29 @@ public:
 | 
|          return fSegments[segIndex].addT(&other->fSegments[otherIndex], pt, newT);
 | 
|      }
 | 
|  
 | 
| -    int addSelfT(int segIndex, SkOpContour* other, int otherIndex, const SkPoint& pt, double newT) {
 | 
| +    int addSelfT(int segIndex, const SkPoint& pt, double newT) {
 | 
|          setContainsIntercepts();
 | 
| -        return fSegments[segIndex].addSelfT(&other->fSegments[otherIndex], pt, newT);
 | 
| +        return fSegments[segIndex].addSelfT(pt, newT);
 | 
|      }
 | 
|  
 | 
|      const SkPathOpsBounds& bounds() const {
 | 
|          return fBounds;
 | 
|      }
 | 
|  
 | 
| +    bool calcAngles();
 | 
|      void calcCoincidentWinding();
 | 
|      void calcPartialCoincidentWinding();
 | 
|  
 | 
| +    void checkDuplicates() {
 | 
| +        int segmentCount = fSegments.count();
 | 
| +        for (int sIndex = 0; sIndex < segmentCount; ++sIndex) {
 | 
| +            SkOpSegment& segment = fSegments[sIndex];
 | 
| +            if (segment.count() > 2) {
 | 
| +                segment.checkDuplicates();
 | 
| +            }
 | 
| +        }
 | 
| +    }
 | 
| +
 | 
|      void checkEnds() {
 | 
|          if (!fContainsCurves) {
 | 
|              return;
 | 
| @@ -106,6 +117,26 @@ public:
 | 
|          }
 | 
|      }
 | 
|  
 | 
| +    void checkMultiples() {
 | 
| +        int segmentCount = fSegments.count();
 | 
| +        for (int sIndex = 0; sIndex < segmentCount; ++sIndex) {
 | 
| +            SkOpSegment& segment = fSegments[sIndex];
 | 
| +            if (segment.count() > 2) {
 | 
| +                segment.checkMultiples();
 | 
| +            }
 | 
| +        }
 | 
| +    }
 | 
| +
 | 
| +    void checkSmall() {
 | 
| +        int segmentCount = fSegments.count();
 | 
| +        for (int sIndex = 0; sIndex < segmentCount; ++sIndex) {
 | 
| +            SkOpSegment& segment = fSegments[sIndex];
 | 
| +            if (segment.hasSmall()) {
 | 
| +                segment.checkSmall();
 | 
| +            }
 | 
| +        }
 | 
| +    }
 | 
| +
 | 
|      // if same point has different T values, choose a common T
 | 
|      void checkTiny() {
 | 
|          int segmentCount = fSegments.count();
 | 
| @@ -113,7 +144,10 @@ public:
 | 
|              return;
 | 
|          }
 | 
|          for (int sIndex = 0; sIndex < segmentCount; ++sIndex) {
 | 
| -            fSegments[sIndex].checkTiny();
 | 
| +            SkOpSegment& segment = fSegments[sIndex];
 | 
| +            if (segment.hasTiny()) {
 | 
| +                segment.checkTiny();
 | 
| +            }
 | 
|          }
 | 
|      }
 | 
|  
 | 
| @@ -192,6 +226,7 @@ public:
 | 
|          fXor = isXor;
 | 
|      }
 | 
|  
 | 
| +    void sortAngles();
 | 
|      void sortSegments();
 | 
|  
 | 
|      const SkPoint& start() const {
 | 
| @@ -242,6 +277,12 @@ public:
 | 
|      static void debugShowWindingValues(const SkTArray<SkOpContour*, true>& contourList);
 | 
|  #endif
 | 
|  
 | 
| +    // available to test routines only
 | 
| +    void dump() const;
 | 
| +    void dumpAngles() const;
 | 
| +    void dumpPts() const;
 | 
| +    void dumpSpans() const;
 | 
| +
 | 
|  private:
 | 
|      void calcCommonCoincidentWinding(const SkCoincidence& );
 | 
|      void joinCoincidence(const SkTArray<SkCoincidence, true>& , bool partial);
 | 
| @@ -261,8 +302,11 @@ private:
 | 
|      bool fOperand;  // true for the second argument to a binary operator
 | 
|      bool fXor;
 | 
|      bool fOppXor;
 | 
| -#ifdef SK_DEBUG
 | 
| +#if defined(SK_DEBUG) || !FORCE_RELEASE
 | 
| +    int debugID() const { return fID; }
 | 
|      int fID;
 | 
| +#else
 | 
| +    int debugID() const { return -1; }
 | 
|  #endif
 | 
|  };
 | 
|  
 | 
| 
 |