Index: src/pathops/SkOpCoincidence.cpp |
diff --git a/src/pathops/SkOpCoincidence.cpp b/src/pathops/SkOpCoincidence.cpp |
index d16f6f86421883789b0a2395f986794bb9548623..dcd22854f8a72449432f72ede2b72bcbba4e08be 100755 |
--- a/src/pathops/SkOpCoincidence.cpp |
+++ b/src/pathops/SkOpCoincidence.cpp |
@@ -239,7 +239,7 @@ void SkOpCoincidence::add(SkOpPtT* coinPtTStart, SkOpPtT* coinPtTEnd, SkOpPtT* o |
oppPtTStart = oppPtTStart->span()->ptT(); |
oppPtTEnd = oppPtTEnd->span()->ptT(); |
SkOPASSERT(coinPtTStart->fT < coinPtTEnd->fT); |
- SkASSERT(oppPtTStart->fT != oppPtTEnd->fT); |
+ SkOPASSERT(oppPtTStart->fT != oppPtTEnd->fT); |
SkOPASSERT(!coinPtTStart->deleted()); |
SkOPASSERT(!coinPtTEnd->deleted()); |
SkOPASSERT(!oppPtTStart->deleted()); |
@@ -976,8 +976,10 @@ bool SkOpCoincidence::apply(DEBUG_COIN_DECLARE_ONLY_PARAMS()) { |
const SkOpSpanBase* end = coin->coinPtTEnd()->span(); |
SkASSERT(start == start->starter(end)); |
bool flipped = coin->flipped(); |
- SkOpSpan* oStart = (flipped ? coin->oppPtTEndWritable() |
- : coin->oppPtTStartWritable())->span()->upCast(); |
+ SkOpSpanBase* oStartBase = (flipped ? coin->oppPtTEndWritable() |
+ : coin->oppPtTStartWritable())->span(); |
+ FAIL_IF(!oStartBase->upCastable()); |
+ SkOpSpan* oStart = oStartBase->upCast(); |
if (oStart->deleted()) { |
continue; |
} |
@@ -1075,6 +1077,7 @@ bool SkOpCoincidence::apply(DEBUG_COIN_DECLARE_ONLY_PARAMS()) { |
if (next == end) { |
break; |
} |
+ FAIL_IF(!next->upCastable()); |
start = next->upCast(); |
// if the opposite ran out too soon, just reuse the last span |
if (!oNext || !oNext->upCastable()) { |
@@ -1306,6 +1309,7 @@ bool SkOpCoincidence::mark(DEBUG_COIN_DECLARE_ONLY_PARAMS()) { |
SkAssertResult(next->upCast()->insertCoincidence(oSegment, flipped, ordered)); |
} |
while ((oNext = oNext->upCast()->next()) != oEnd) { |
+ FAIL_IF(!oNext->upCastable()); |
FAIL_IF(!oNext->upCast()->insertCoincidence(segment, flipped, ordered)); |
} |
} while ((coin = coin->next())); |