(STRING_CHAR_ADVANCE_UTF8): Sanitize the code.
authorhanda <handa>
Thu, 12 Aug 2010 08:01:28 +0000 (08:01 +0000)
committerhanda <handa>
Thu, 12 Aug 2010 08:01:28 +0000 (08:01 +0000)
(STRING_CHAR_ADVANCE_UTF16): Likewise.

src/character.h

index a3bc37e..de73430 100644 (file)
 #define STRING_CHAR STRING_CHAR_UTF8
 
 
-#define STRING_CHAR_ADVANCE_UTF8(p)                    \
-  (!(*(p) & 0x80) ? *(p)++                             \
-   : !(*(p) & 0x20) ? (((*(p)++ & 0x1F) << 6)          \
-                      | (*(p)++ & 0x3F))               \
-   : !(*(p) & 0x10) ? (((*(p)++ & 0x0F) << 12)         \
-                      | ((*(p)++ & 0x3F) << 6)         \
-                      | (*(p)++ & 0x3F))               \
-   : !(*(p) & 0x08) ? (((*(p)++ & 0x07) << 18)         \
-                      | ((*(p)++ & 0x3F) << 12)        \
-                      | ((*(p)++ & 0x3F) << 6)         \
-                      | (*(p)++ & 0x3F))               \
-   : !(*(p) & 0x04) ? (((*(p)++ & 0x03) << 24)         \
-                      | ((*(p)++ & 0x3F) << 18)        \
-                      | ((*(p)++ & 0x3F) << 12)        \
-                      | ((*(p)++ & 0x3F) << 6)         \
-                      | (*(p)++ & 0x3F))               \
-   : (((*(p)++ & 0x01) << 30)                          \
-      | ((*(p)++ & 0x3F) << 24)                                \
-      | ((*(p)++ & 0x3F) << 18)                                \
-      | ((*(p)++ & 0x3F) << 12)                                \
-      | ((*(p)++ & 0x3F) << 6)                         \
-      | (*(p)++ & 0x3F)))
-
-#define STRING_CHAR_ADVANCE_UTF16(p)                                      \
-  (((unsigned short) (p)[0] < 0xD800 || (unsigned short) (p)[0] >= 0xDC00) \
-   ? *(p)++                                                               \
-   : (((*(p)++ - 0xD800) << 10) + (*(p)++ - 0xDC00) + 0x10000))
+#define STRING_CHAR_ADVANCE_UTF8(p)                            \
+  (!(*(p) & 0x80) ? ((p)++, (p)[-1])                           \
+   : !(*(p) & 0x20) ? ((p) += 2, ((((p)[-2] & 0x1F) << 6)      \
+                                 | ((p)[-1] & 0x3F)))          \
+   : !(*(p) & 0x10) ? ((p) += 3, ((((p)[-3] & 0x0F) << 12)     \
+                                 | (((p)[-2] & 0x3F) << 6)     \
+                                 | ((p)[-1] & 0x3F)))          \
+   : !(*(p) & 0x08) ? ((p) += 4, ((((p)[-4] & 0x07) << 18)     \
+                                 | (((p)[-3] & 0x3F) << 12)    \
+                                 | (((p)[-2] & 0x3F) << 6)     \
+                                 | ((p)[-1] & 0x3F)))          \
+   : !(*(p) & 0x04) ? ((p) += 5, ((((p)[-5] & 0x03) << 24)     \
+                                 | (((p)[-4] & 0x3F) << 18)    \
+                                 | (((p)[-3] & 0x3F) << 12)    \
+                                 | (((p)[-2] & 0x3F) << 6)     \
+                                 | ((p)[-1] & 0x3F)))          \
+   : ((p) += 6, ((((p)[-6] & 0x01) << 30)                      \
+                | (((p)[-5] & 0x3F) << 24)                     \
+                | (((p)[-4] & 0x3F) << 18)                     \
+                | (((p)[-3] & 0x3F) << 12)                     \
+                | (((p)[-2] & 0x3F) << 6)                      \
+                | ((p)[-1] & 0x3F))))
+
+#define STRING_CHAR_ADVANCE_UTF16(p)           \
+  (((p)[0] < 0xD800 ||  (p)[0] >= 0xDC00)      \
+   ? ((p)++, (p)[-1])                          \
+   : ((p) += 2, ((((p)[-2] - 0xD800) << 10) + ((p)[-1] - 0xDC00) + 0x10000)))
 
 #define STRING_CHAR_ADVANCE STRING_CHAR_ADVANCE_UTF8