diff options
Diffstat (limited to 'src/CharacterCategoryMap.cxx')
-rw-r--r-- | src/CharacterCategoryMap.cxx | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/CharacterCategoryMap.cxx b/src/CharacterCategoryMap.cxx index b8b20fee7..3ef5bb748 100644 --- a/src/CharacterCategoryMap.cxx +++ b/src/CharacterCategoryMap.cxx @@ -4050,12 +4050,17 @@ constexpr int maskCategory = 0x1F; // possibly for 0..0xff for most Western European text or 0..0xfff for most // alphabetic languages. -CharacterCategory CategoriseCharacter(int character) { +CharacterCategory CategoriseCharacter(int character) noexcept { if (character < 0 || character > maxUnicode) return ccCn; const int baseValue = character * (maskCategory+1) + maskCategory; - const int *placeAfter = std::lower_bound(catRanges, std::end(catRanges), baseValue); - return static_cast<CharacterCategory>(*(placeAfter-1) & maskCategory); + try { + // lower_bound will never throw with these args but its not marked noexcept so add catch to pretend. + const int *placeAfter = std::lower_bound(catRanges, std::end(catRanges), baseValue); + return static_cast<CharacterCategory>(*(placeAfter - 1) & maskCategory); + } catch (...) { + return ccCn; + } } // Implementation of character sets recommended for identifiers in Unicode Standard Annex #31. @@ -4158,7 +4163,7 @@ bool OmitXidContinue(int character) noexcept { // UAX #31 defines ID_Start as // [[:L:][:Nl:][:Other_ID_Start:]--[:Pattern_Syntax:]--[:Pattern_White_Space:]] -bool IsIdStart(int character) { +bool IsIdStart(int character) noexcept { if (IsIdPattern(character)) { return false; } @@ -4173,7 +4178,7 @@ bool IsIdStart(int character) { // UAX #31 defines ID_Continue as // [[:ID_Start:][:Mn:][:Mc:][:Nd:][:Pc:][:Other_ID_Continue:]--[:Pattern_Syntax:]--[:Pattern_White_Space:]] -bool IsIdContinue(int character) { +bool IsIdContinue(int character) noexcept { if (IsIdPattern(character)) { return false; } @@ -4187,7 +4192,7 @@ bool IsIdContinue(int character) { } // XID_Start is ID_Start modified for Normalization Form KC in UAX #31 -bool IsXidStart(int character) { +bool IsXidStart(int character) noexcept { if (OmitXidStart(character)) { return false; } else { @@ -4196,7 +4201,7 @@ bool IsXidStart(int character) { } // XID_Continue is ID_Continue modified for Normalization Form KC in UAX #31 -bool IsXidContinue(int character) { +bool IsXidContinue(int character) noexcept { if (OmitXidContinue(character)) { return false; } else { |