diff options
author | romankoshelev <romankoshelev@yandex-team.com> | 2023-08-09 20:07:20 +0300 |
---|---|---|
committer | romankoshelev <romankoshelev@yandex-team.com> | 2023-08-09 20:59:13 +0300 |
commit | fd82fb12fb45e71a02c628e45b12c50c0dd0d308 (patch) | |
tree | f582b79f9002ab1d083e9acda600dfb3551c47b6 /contrib/libs/icu/i18n/collationdatabuilder.cpp | |
parent | bf862ddf5c6178e1bb5e4fb3f7c61015deebe284 (diff) | |
download | ydb-fd82fb12fb45e71a02c628e45b12c50c0dd0d308.tar.gz |
Update ICU to 70.1
Diffstat (limited to 'contrib/libs/icu/i18n/collationdatabuilder.cpp')
-rw-r--r-- | contrib/libs/icu/i18n/collationdatabuilder.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/contrib/libs/icu/i18n/collationdatabuilder.cpp b/contrib/libs/icu/i18n/collationdatabuilder.cpp index 53361b86c7..25050aa777 100644 --- a/contrib/libs/icu/i18n/collationdatabuilder.cpp +++ b/contrib/libs/icu/i18n/collationdatabuilder.cpp @@ -131,18 +131,18 @@ public: int32_t fetchCEs(const UnicodeString &str, int32_t start, int64_t ces[], int32_t cesLength); - virtual void resetToOffset(int32_t newOffset); - virtual int32_t getOffset() const; + virtual void resetToOffset(int32_t newOffset) override; + virtual int32_t getOffset() const override; - virtual UChar32 nextCodePoint(UErrorCode &errorCode); - virtual UChar32 previousCodePoint(UErrorCode &errorCode); + virtual UChar32 nextCodePoint(UErrorCode &errorCode) override; + virtual UChar32 previousCodePoint(UErrorCode &errorCode) override; protected: - virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode); - virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode); + virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode) override; + virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode) override; - virtual uint32_t getDataCE32(UChar32 c) const; - virtual uint32_t getCE32FromBuilderData(uint32_t ce32, UErrorCode &errorCode); + virtual uint32_t getDataCE32(UChar32 c) const override; + virtual uint32_t getCE32FromBuilderData(uint32_t ce32, UErrorCode &errorCode) override; CollationDataBuilder &builder; CollationData builderData; @@ -255,12 +255,18 @@ DataBuilderCollationIterator::getDataCE32(UChar32 c) const { uint32_t DataBuilderCollationIterator::getCE32FromBuilderData(uint32_t ce32, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return 0; } U_ASSERT(Collation::hasCE32Tag(ce32, Collation::BUILDER_DATA_TAG)); if((ce32 & CollationDataBuilder::IS_BUILDER_JAMO_CE32) != 0) { UChar32 jamo = Collation::indexFromCE32(ce32); return utrie2_get32(builder.trie, jamo); } else { ConditionalCE32 *cond = builder.getConditionalCE32ForCE32(ce32); + if (cond == nullptr) { + errorCode = U_INTERNAL_PROGRAM_ERROR; + // TODO: ICU-21531 figure out why this happens. + return 0; + } if(cond->builtCE32 == Collation::NO_CE32) { // Build the context-sensitive mappings into their runtime form and cache the result. cond->builtCE32 = builder.buildContext(cond, errorCode); @@ -521,7 +527,7 @@ CollationDataBuilder::addConditionalCE32(const UnicodeString &context, uint32_t errorCode = U_MEMORY_ALLOCATION_ERROR; return -1; } - conditionalCE32s.addElement(cond, errorCode); + conditionalCE32s.addElementX(cond, errorCode); return index; } @@ -852,7 +858,7 @@ CollationDataBuilder::copyFromBaseCE32(UChar32 c, uint32_t ce32, UBool withConte ce32 = encodeOneCE(Collation::unassignedCEFromCodePoint(c), errorCode); break; default: - UPRV_UNREACHABLE; // require ce32 == base->getFinalCE32(ce32) + UPRV_UNREACHABLE_EXIT; // require ce32 == base->getFinalCE32(ce32) } return ce32; } |