From 70fe9e73555f3354238f7cda5ff0f0c0b75e1d62 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 13 May 2019 17:35:02 -0700 Subject: [PATCH] Fix moreeeeeeeeeee --- src/hb-icu.cc | 28 +++++++++++++++------------- src/hb-subset-plan.cc | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/hb-icu.cc b/src/hb-icu.cc index 99305ae55..d6e8ec7b6 100644 --- a/src/hb-icu.cc +++ b/src/hb-icu.cc @@ -49,6 +49,8 @@ * Functions for using HarfBuzz with the ICU library to provide Unicode data. **/ +/* ICU doesn't do-while(0) around their statements. Ouch! */ +#define HB_ICU_STMT(S) do { S } while (0) hb_script_t hb_icu_script_to_script (UScriptCode script) @@ -183,9 +185,9 @@ hb_icu_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED, len = 0; err = false; - U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), a, err); + HB_ICU_STMT (U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), a, err)); if (err) return false; - U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), b, err); + HB_ICU_STMT (U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), b, err)); if (err) return false; icu_err = U_ZERO_ERROR; @@ -193,7 +195,7 @@ hb_icu_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED, if (U_FAILURE (icu_err)) return false; if (u_countChar32 (normalized, len) == 1) { - U16_GET_UNSAFE (normalized, 0, *ab); + HB_ICU_STMT (U16_GET_UNSAFE (normalized, 0, *ab)); ret = true; } else { ret = false; @@ -221,13 +223,13 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, len = u_countChar32 (decomposed, len); if (len == 1) { - U16_GET_UNSAFE (decomposed, 0, *a); + HB_ICU_STMT (U16_GET_UNSAFE (decomposed, 0, *a)); *b = 0; return *a != ab; } else if (len == 2) { len =0; - U16_NEXT_UNSAFE (decomposed, len, *a); - U16_NEXT_UNSAFE (decomposed, len, *b); + HB_ICU_STMT (U16_NEXT_UNSAFE (decomposed, len, *a)); + HB_ICU_STMT (U16_NEXT_UNSAFE (decomposed, len, *b)); } return true; } @@ -247,7 +249,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, len = 0; err = false; - U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), ab, err); + HB_ICU_STMT (U16_APPEND (utf16, len, ARRAY_LENGTH (utf16), ab, err)); if (err) return false; icu_err = U_ZERO_ERROR; @@ -258,13 +260,13 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, len = u_countChar32 (normalized, len); if (len == 1) { - U16_GET_UNSAFE (normalized, 0, *a); + HB_ICU_STMT (U16_GET_UNSAFE (normalized, 0, *a)); *b = 0; ret = *a != ab; } else if (len == 2) { len =0; - U16_NEXT_UNSAFE (normalized, len, *a); - U16_NEXT_UNSAFE (normalized, len, *b); + HB_ICU_STMT (U16_NEXT_UNSAFE (normalized, len, *a)); + HB_ICU_STMT (U16_NEXT_UNSAFE (normalized, len, *b)); /* Here's the ugly part: if ab decomposes to a single character and * that character decomposes again, we have to detect that and undo @@ -275,7 +277,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, if (U_FAILURE (icu_err)) return false; hb_codepoint_t c; - U16_GET_UNSAFE (recomposed, 0, c); + HB_ICU_STMT (U16_GET_UNSAFE (recomposed, 0, c)); if (c != *a && c != ab) { *a = c; *b = 0; @@ -284,7 +286,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, } else { /* If decomposed to more than two characters, take the last one, * and recompose the rest to get the first component. */ - U16_PREV_UNSAFE (normalized, len, *b); /* Changes len in-place. */ + HB_ICU_STMT (U16_PREV_UNSAFE (normalized, len, *b)); /* Changes len in-place. */ UChar recomposed[18 * 2]; icu_err = U_ZERO_ERROR; len = unorm2_normalize (unorm2_getNFCInstance (&icu_err), normalized, len, recomposed, ARRAY_LENGTH (recomposed), &icu_err); @@ -293,7 +295,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, /* We expect that recomposed has exactly one character now. */ if (unlikely (u_countChar32 (recomposed, len) != 1)) return false; - U16_GET_UNSAFE (recomposed, 0, *a); + HB_ICU_STMT (U16_GET_UNSAFE (recomposed, 0, *a)); ret = true; } diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc index bbbfacb38..6eb78916f 100644 --- a/src/hb-subset-plan.cc +++ b/src/hb-subset-plan.cc @@ -176,7 +176,7 @@ _create_old_gid_to_new_gid_map (const hb_face_t *face, | hb_map ([=] (hb_codepoint_t _) { return hb_pair_t (_, _); }) - | hb_sink (reverse_glyph_map); + | hb_sink (reverse_glyph_map) ; // TODO(grieger): Should we discard glyphs past the max glyph to keep?