summaryrefslogtreecommitdiff
path: root/external/hunspell/0001-unroll-this-a-bit.patch
blob: 607a51a5fd1b628b897020e81c9e01e42898f8ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
From bf05e232805f6c1fae5dea3c223de8bdaab425e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Mon, 23 Jan 2017 13:26:53 +0000
Subject: [PATCH 1/3] unroll this a bit

---
 src/hunspell/csutil.cxx | 49 ++++++++++++++++++++++++++++---------------------
 1 file changed, 28 insertions(+), 21 deletions(-)

diff --git a/src/hunspell/csutil.cxx b/src/hunspell/csutil.cxx
index ac5cd98..c1666a5 100644
--- a/src/hunspell/csutil.cxx
+++ b/src/hunspell/csutil.cxx
@@ -518,18 +518,20 @@ unsigned char ccase(const struct cs_info* csconv, int nIndex) {
 
 w_char upper_utf(w_char u, int langnum) {
   unsigned short idx = (u.h << 8) + u.l;
-  if (idx != unicodetoupper(idx, langnum)) {
-    u.h = (unsigned char)(unicodetoupper(idx, langnum) >> 8);
-    u.l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF);
+  unsigned short upridx = unicodetoupper(idx, langnum);
+  if (idx != upridx) {
+    u.h = (unsigned char)(upridx >> 8);
+    u.l = (unsigned char)(upridx & 0x00FF);
   }
   return u;
 }
 
 w_char lower_utf(w_char u, int langnum) {
   unsigned short idx = (u.h << 8) + u.l;
-  if (idx != unicodetolower(idx, langnum)) {
-    u.h = (unsigned char)(unicodetolower(idx, langnum) >> 8);
-    u.l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF);
+  unsigned short lwridx = unicodetolower(idx, langnum);
+  if (idx != lwridx) {
+    u.h = (unsigned char)(lwridx >> 8);
+    u.l = (unsigned char)(lwridx & 0x00FF);
   }
   return u;
 }
@@ -551,12 +553,13 @@ std::string& mkallsmall(std::string& s, const struct cs_info* csconv) {
 }
 
 std::vector<w_char>& mkallsmall_utf(std::vector<w_char>& u,
-                                    int langnum) {
+                                          int langnum) {
   for (size_t i = 0; i < u.size(); ++i) {
     unsigned short idx = (u[i].h << 8) + u[i].l;
-    if (idx != unicodetolower(idx, langnum)) {
-      u[i].h = (unsigned char)(unicodetolower(idx, langnum) >> 8);
-      u[i].l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF);
+    unsigned short lwridx = unicodetolower(idx, langnum);
+    if (idx != lwridx) {
+      u[i].h = (unsigned char)(lwridx >> 8);
+      u[i].l = (unsigned char)(lwridx & 0x00FF);
     }
   }
   return u;
@@ -565,9 +568,10 @@ std::vector<w_char>& mkallsmall_utf(std::vector<w_char>& u,
 std::vector<w_char>& mkallcap_utf(std::vector<w_char>& u, int langnum) {
   for (size_t i = 0; i < u.size(); i++) {
     unsigned short idx = (u[i].h << 8) + u[i].l;
-    if (idx != unicodetoupper(idx, langnum)) {
-      u[i].h = (unsigned char)(unicodetoupper(idx, langnum) >> 8);
-      u[i].l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF);
+    unsigned short upridx = unicodetoupper(idx, langnum);
+    if (idx != upridx) {
+      u[i].h = (unsigned char)(upridx >> 8);
+      u[i].l = (unsigned char)(upridx & 0x00FF);
     }
   }
   return u;
@@ -583,9 +587,10 @@ std::string& mkinitcap(std::string& s, const struct cs_info* csconv) {
 std::vector<w_char>& mkinitcap_utf(std::vector<w_char>& u, int langnum) {
   if (!u.empty()) {
     unsigned short idx = (u[0].h << 8) + u[0].l;
-    if (idx != unicodetoupper(idx, langnum)) {
-      u[0].h = (unsigned char)(unicodetoupper(idx, langnum) >> 8);
-      u[0].l = (unsigned char)(unicodetoupper(idx, langnum) & 0x00FF);
+    unsigned short upridx = unicodetoupper(idx, langnum);
+    if (idx != upridx) {
+      u[0].h = (unsigned char)(upridx >> 8);
+      u[0].l = (unsigned char)(upridx & 0x00FF);
     }
   }
   return u;
@@ -601,9 +606,10 @@ std::string& mkinitsmall(std::string& s, const struct cs_info* csconv) {
 std::vector<w_char>& mkinitsmall_utf(std::vector<w_char>& u, int langnum) {
   if (!u.empty()) {
     unsigned short idx = (u[0].h << 8) + u[0].l;
-    if (idx != unicodetolower(idx, langnum)) {
-      u[0].h = (unsigned char)(unicodetolower(idx, langnum) >> 8);
-      u[0].l = (unsigned char)(unicodetolower(idx, langnum) & 0x00FF);
+    unsigned short lwridx = unicodetolower(idx, langnum);
+    if (idx != lwridx) {
+      u[0].h = (unsigned char)(lwridx >> 8);
+      u[0].l = (unsigned char)(lwridx & 0x00FF);
     }
   }
   return u;
@@ -2533,9 +2539,10 @@ int get_captype_utf8(const std::vector<w_char>& word, int langnum) {
   size_t firstcap = 0;
   for (size_t i = 0; i < word.size(); ++i) {
     unsigned short idx = (word[i].h << 8) + word[i].l;
-    if (idx != unicodetolower(idx, langnum))
+    unsigned short lwridx = unicodetolower(idx, langnum);
+    if (idx != lwridx)
       ncap++;
-    if (unicodetoupper(idx, langnum) == unicodetolower(idx, langnum))
+    if (unicodetoupper(idx, langnum) == lwridx)
       nneutral++;
   }
   if (ncap) {
-- 
2.9.3