| Index: src/pathops/SkOpCoincidence.cpp
|
| diff --git a/src/pathops/SkOpCoincidence.cpp b/src/pathops/SkOpCoincidence.cpp
|
| index 61ea3ef4447f4ab2a84890ac3044a15008e7b506..0548ed5a0594157971d3773d3502de79b46303e7 100755
|
| --- a/src/pathops/SkOpCoincidence.cpp
|
| +++ b/src/pathops/SkOpCoincidence.cpp
|
| @@ -551,6 +551,9 @@ double SkOpCoincidence::TRange(const SkOpPtT* overS, double t,
|
| do {
|
| const SkOpPtT* contained = work->contains(coinSeg);
|
| if (!contained) {
|
| + if (work->t() >= t) {
|
| + return 1;
|
| + }
|
| continue;
|
| }
|
| if (work->t() <= t) {
|
| @@ -795,7 +798,9 @@ bool SkOpCoincidence::addMissing() {
|
| const SkOpSegment* outerCoin = ocs->segment();
|
| SkASSERT(!outerCoin->done()); // if it's done, should have already been removed from list
|
| const SkOpPtT* oos = outer->oppPtTStart();
|
| - SkASSERT(!oos->deleted());
|
| + if (oos->deleted()) {
|
| + return false;
|
| + }
|
| const SkOpSegment* outerOpp = oos->segment();
|
| SkASSERT(!outerOpp->done());
|
| SkOpSegment* outerCoinWritable = const_cast<SkOpSegment*>(outerCoin);
|
| @@ -816,7 +821,9 @@ bool SkOpCoincidence::addMissing() {
|
| SkOpSegment* innerOppWritable = const_cast<SkOpSegment*>(innerOpp);
|
| if (outerCoin == innerCoin) {
|
| const SkOpPtT* oce = outer->coinPtTEnd();
|
| - SkASSERT(!oce->deleted());
|
| + if (oce->deleted()) {
|
| + return false;
|
| + }
|
| const SkOpPtT* ice = inner->coinPtTEnd();
|
| SkASSERT(!ice->deleted());
|
| if (outerOpp != innerOpp && this->overlap(ocs, oce, ics, ice, &overS, &overE)) {
|
| @@ -852,7 +859,9 @@ bool SkOpCoincidence::addMissing() {
|
| const SkOpPtT* ooe = outer->oppPtTEnd();
|
| SkASSERT(!ooe->deleted());
|
| const SkOpPtT* ioe = inner->oppPtTEnd();
|
| - SkASSERT(!ioe->deleted());
|
| + if (ioe->deleted()) {
|
| + return false;
|
| + }
|
| SkASSERT(outerCoin != innerCoin);
|
| if (this->overlap(oos, ooe, ios, ioe, &overS, &overE)) {
|
| added |= this->addIfMissing(oos->starter(ooe), ios->starter(ioe),
|
| @@ -1394,7 +1403,7 @@ bool SkOpCoincidence::removeCollapsed() {
|
| }
|
|
|
| void SkOpCoincidence::fixUp(SkOpPtT* deleted, const SkOpPtT* kept) {
|
| - SkASSERT(deleted != kept);
|
| + SkOPASSERT(deleted != kept);
|
| if (fHead) {
|
| this->fixUp(fHead, deleted, kept);
|
| }
|
| @@ -1453,7 +1462,9 @@ bool SkOpCoincidence::mark() {
|
| SkOpSpanBase* end = coin->coinPtTEndWritable()->span();
|
| SkASSERT(!end->deleted());
|
| SkOpSpanBase* oStart = coin->oppPtTStartWritable()->span();
|
| - SkASSERT(!oStart->deleted());
|
| + if (oStart->deleted()) {
|
| + return false;
|
| + }
|
| SkOpSpanBase* oEnd = coin->oppPtTEndWritable()->span();
|
| SkASSERT(!oEnd->deleted());
|
| bool flipped = coin->flipped();
|
|
|