This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Change 3 functions to be #defines of others
authorKarl Williamson <khw@cpan.org>
Sat, 18 Nov 2017 20:52:44 +0000 (13:52 -0700)
committerKarl Williamson <khw@cpan.org>
Sun, 26 Nov 2017 17:17:29 +0000 (10:17 -0700)
I made these separate functions because I thought it would make faster
code, but I realized that modern compilers should be able to optimize
the more general functions into the same code as the ones removed by
this commit, given that the parameters are known to be 0 at compile
time.

It's easier to maintain one version of a function than two, so this
commit favors that.

embed.fnc
embed.h
inline.h
proto.h

index 181a0a9..6f566da 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -786,11 +786,11 @@ AmnpdRP   |bool   |is_ascii_string|NN const U8* const s|const STRLEN len
 AmnpdRP        |bool   |is_invariant_string|NN const U8* const s|const STRLEN len
 AnpdD  |STRLEN |is_utf8_char   |NN const U8 *s
 Abmnpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end
-AnipdR |bool   |is_utf8_string |NN const U8 *s|const STRLEN len
+AnmdpR |bool   |is_utf8_string |NN const U8 *s|STRLEN len
 AnidR  |bool   |is_utf8_string_flags                                       \
                |NN const U8 *s|STRLEN len|const U32 flags
-AnidR  |bool   |is_strict_utf8_string|NN const U8 *s|const STRLEN len
-AnidR  |bool   |is_c9strict_utf8_string|NN const U8 *s|const STRLEN len
+AnmdpR |bool   |is_strict_utf8_string|NN const U8 *s|STRLEN len
+AnmdpR |bool   |is_c9strict_utf8_string|NN const U8 *s|STRLEN len
 Anpdmb |bool   |is_utf8_string_loc                                         \
                |NN const U8 *s|const STRLEN len|NN const U8 **ep
 Andm   |bool   |is_utf8_string_loc_flags                                   \
diff --git a/embed.h b/embed.h
index 13277fc..5d67b97 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define intro_my()             Perl_intro_my(aTHX)
 #define isALNUM_lazy(a)                Perl_isALNUM_lazy(aTHX_ a)
 #define isIDFIRST_lazy(a)      Perl_isIDFIRST_lazy(aTHX_ a)
-#define is_c9strict_utf8_string        S_is_c9strict_utf8_string
 #define is_c9strict_utf8_string_loclen S_is_c9strict_utf8_string_loclen
 #define is_lvalue_sub()                Perl_is_lvalue_sub(aTHX)
 #define is_safe_syscall(a,b,c,d)       S_is_safe_syscall(aTHX_ a,b,c,d)
-#define is_strict_utf8_string  S_is_strict_utf8_string
 #define is_strict_utf8_string_loclen   S_is_strict_utf8_string_loclen
 #define is_uni_alnum(a)                Perl_is_uni_alnum(aTHX_ a)
 #define is_uni_alnum_lc(a)     Perl_is_uni_alnum_lc(aTHX_ a)
 #define is_utf8_print(a)       Perl_is_utf8_print(aTHX_ a)
 #define is_utf8_punct(a)       Perl_is_utf8_punct(aTHX_ a)
 #define is_utf8_space(a)       Perl_is_utf8_space(aTHX_ a)
-#define is_utf8_string         Perl_is_utf8_string
 #define is_utf8_string_flags   S_is_utf8_string_flags
 #define is_utf8_string_loclen  Perl_is_utf8_string_loclen
 #define is_utf8_string_loclen_flags    S_is_utf8_string_loclen_flags
index 0ce02e6..aa8798e 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -484,27 +484,7 @@ C<L</is_utf8_fixed_width_buf_loclen_flags>>,
 =cut
 */
 
-PERL_STATIC_INLINE bool
-Perl_is_utf8_string(const U8 *s, const STRLEN len)
-{
-    /* This is now marked pure in embed.fnc, because isUTF8_CHAR now is pure.
-     * Be aware of possible changes to that */
-
-    const U8* const send = s + (len ? len : strlen((const char *)s));
-    const U8* x = s;
-
-    PERL_ARGS_ASSERT_IS_UTF8_STRING;
-
-    while (x < send) {
-        const STRLEN cur_len = isUTF8_CHAR(x, send);
-        if (UNLIKELY(! cur_len)) {
-            return FALSE;
-        }
-        x += cur_len;
-    }
-
-    return TRUE;
-}
+#define is_utf8_string(s, len)  is_utf8_string_loclen(s, len, NULL, NULL)
 
 /*
 =for apidoc is_strict_utf8_string
@@ -542,24 +522,7 @@ C<L</is_c9strict_utf8_string_loclen>>.
 =cut
 */
 
-PERL_STATIC_INLINE bool
-S_is_strict_utf8_string(const U8 *s, const STRLEN len)
-{
-    const U8* const send = s + (len ? len : strlen((const char *)s));
-    const U8* x = s;
-
-    PERL_ARGS_ASSERT_IS_STRICT_UTF8_STRING;
-
-    while (x < send) {
-        const STRLEN cur_len = isSTRICT_UTF8_CHAR(x, send);
-        if (UNLIKELY(! cur_len)) {
-            return FALSE;
-        }
-        x += cur_len;
-    }
-
-    return TRUE;
-}
+#define is_strict_utf8_string(s, len)  is_strict_utf8_string_loclen(s, len, NULL, NULL)
 
 /*
 =for apidoc is_c9strict_utf8_string
@@ -599,28 +562,7 @@ C<L</is_c9strict_utf8_string_loclen>>.
 =cut
 */
 
-PERL_STATIC_INLINE bool
-S_is_c9strict_utf8_string(const U8 *s, const STRLEN len)
-{
-    const U8* const send = s + (len ? len : strlen((const char *)s));
-    const U8* x = s;
-
-    PERL_ARGS_ASSERT_IS_C9STRICT_UTF8_STRING;
-
-    while (x < send) {
-        const STRLEN cur_len = isC9_STRICT_UTF8_CHAR(x, send);
-        if (UNLIKELY(! cur_len)) {
-            return FALSE;
-        }
-        x += cur_len;
-    }
-
-    return TRUE;
-}
-
-/* The above 3 functions could have been moved into the more general one just
- * below, and made #defines that call it with the right 'flags'.  They are
- * currently kept separate to increase their chances of getting inlined */
+#define is_c9strict_utf8_string(s, len)  is_c9strict_utf8_string_loclen(s, len, NULL, 0)
 
 /*
 =for apidoc is_utf8_string_flags
diff --git a/proto.h b/proto.h
index 02d0183..c7fcd86 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -1379,12 +1379,8 @@ PERL_CALLCONV bool       Perl_isIDFIRST_lazy(pTHX_ const char* p)
                        __attribute__warn_unused_result__
                        __attribute__pure__; */
 
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool        S_is_c9strict_utf8_string(const U8 *s, const STRLEN len)
-                       __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_C9STRICT_UTF8_STRING       \
-       assert(s)
-#endif
+/* PERL_CALLCONV bool  Perl_is_c9strict_utf8_string(const U8 *s, STRLEN len)
+                       __attribute__warn_unused_result__; */
 
 /* PERL_CALLCONV bool  is_c9strict_utf8_string_loc(const U8 *s, const STRLEN len, const U8 **ep); */
 #ifndef PERL_NO_INLINE_FUNCTIONS
@@ -1406,12 +1402,8 @@ PERL_STATIC_INLINE bool  S_is_safe_syscall(pTHX_ const char *pv, STRLEN len, cons
        assert(pv); assert(what); assert(op_name)
 #endif
 
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool        S_is_strict_utf8_string(const U8 *s, const STRLEN len)
-                       __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_STRICT_UTF8_STRING \
-       assert(s)
-#endif
+/* PERL_CALLCONV bool  Perl_is_strict_utf8_string(const U8 *s, STRLEN len)
+                       __attribute__warn_unused_result__; */
 
 /* PERL_CALLCONV bool  is_strict_utf8_string_loc(const U8 *s, const STRLEN len, const U8 **ep); */
 #ifndef PERL_NO_INLINE_FUNCTIONS
@@ -1684,12 +1676,8 @@ PERL_CALLCONV bool       Perl_is_utf8_space(pTHX_ const U8 *p)
 #define PERL_ARGS_ASSERT_IS_UTF8_SPACE \
        assert(p)
 
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool        Perl_is_utf8_string(const U8 *s, const STRLEN len)
-                       __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_STRING        \
-       assert(s)
-#endif
+/* PERL_CALLCONV bool  Perl_is_utf8_string(const U8 *s, STRLEN len)
+                       __attribute__warn_unused_result__; */
 
 #ifndef PERL_NO_INLINE_FUNCTIONS
 PERL_STATIC_INLINE bool        S_is_utf8_string_flags(const U8 *s, STRLEN len, const U32 flags)