aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/CharacterCategoryMap.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2024-03-08 17:11:54 +1100
committerNeil <nyamatongwe@gmail.com>2024-03-08 17:11:54 +1100
commit212219da82d0a430dbf4eac1528056440f07940c (patch)
treee5a21da94492f4a65ebd9aad41cad7280830b37d /src/CharacterCategoryMap.cxx
parent990e88a854ce05b86f4ce0b6f9b6975b6df4a282 (diff)
downloadscintilla-mirror-212219da82d0a430dbf4eac1528056440f07940c.tar.gz
Use noexcept in CharacterCategoryMap.
Diffstat (limited to 'src/CharacterCategoryMap.cxx')
-rw-r--r--src/CharacterCategoryMap.cxx19
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 {