diff options
author | Karl Williamson <khw@cpan.org> | 2015-12-08 11:19:40 -0700 |
---|---|---|
committer | Karl Williamson <khw@cpan.org> | 2015-12-08 19:01:28 -0700 |
commit | 8ee1cdcbef0746b5cc4f7c74dffa7a947cb4277a (patch) | |
tree | 9bf25098d5507adb99ae478fbb9ef19528ec9aca /utf8.c | |
parent | a5bf80e0f4a3c6efa6dcf4e8ab514d3134e732e1 (diff) | |
download | perl-8ee1cdcbef0746b5cc4f7c74dffa7a947cb4277a.tar.gz |
utf8.c: Extract some code into macros
This is in preparation for a future commit, where they will be used in
more than one place.
Diffstat (limited to 'utf8.c')
-rw-r--r-- | utf8.c | 46 |
1 files changed, 28 insertions, 18 deletions
@@ -103,6 +103,29 @@ For details, see the description for L</uvchr_to_utf8_flags>. =cut */ +#define HANDLE_UNICODE_SURROGATE(uv, flags) \ + STMT_START { \ + if (flags & UNICODE_WARN_SURROGATE) { \ + Perl_ck_warner_d(aTHX_ packWARN(WARN_SURROGATE), \ + "UTF-16 surrogate U+%04"UVXf, uv); \ + } \ + if (flags & UNICODE_DISALLOW_SURROGATE) { \ + return NULL; \ + } \ + } STMT_END; + +#define HANDLE_UNICODE_NONCHAR(uv, flags) \ + STMT_START { \ + if (flags & UNICODE_WARN_NONCHAR) { \ + Perl_ck_warner_d(aTHX_ packWARN(WARN_NONCHAR), \ + "Unicode non-character U+%04"UVXf" is not " \ + "recommended for open interchange", uv); \ + } \ + if (flags & UNICODE_DISALLOW_NONCHAR) { \ + return NULL; \ + } \ + } STMT_END; + U8 * Perl_uvoffuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags) { @@ -120,14 +143,11 @@ Perl_uvoffuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags) /* The first problematic code point is the first surrogate */ if (uv >= UNICODE_SURROGATE_FIRST) { - if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) { - if (flags & UNICODE_WARN_SURROGATE) { - Perl_ck_warner_d(aTHX_ packWARN(WARN_SURROGATE), - "UTF-16 surrogate U+%04"UVXf, uv); - } - if (flags & UNICODE_DISALLOW_SURROGATE) { - return NULL; - } + if (UNLIKELY(UNICODE_IS_NONCHAR(uv))) { + HANDLE_UNICODE_NONCHAR(uv, flags); + } + else if (UNLIKELY(UNICODE_IS_SURROGATE(uv))) { + HANDLE_UNICODE_SURROGATE(uv, flags); } else if (UNLIKELY(UNICODE_IS_SUPER(uv))) { if ( UNLIKELY(uv > MAX_NON_DEPRECATED_CP) @@ -155,16 +175,6 @@ Perl_uvoffuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags) return NULL; } } - else if (UNLIKELY(UNICODE_IS_NONCHAR(uv))) { - if (flags & UNICODE_WARN_NONCHAR) { - Perl_ck_warner_d(aTHX_ packWARN(WARN_NONCHAR), - "Unicode non-character U+%04"UVXf" is not recommended for open interchange", - uv); - } - if (flags & UNICODE_DISALLOW_NONCHAR) { - return NULL; - } - } } #if defined(EBCDIC) |