In perl.git, the branch blead has been updated

<https://perl5.git.perl.org/perl.git/commitdiff/1545ba5b042c208e23333479730479c0acd55325?hp=b6763dcccec0a1fedbc293e6ab6c5b01a33df3dc>

- Log -----------------------------------------------------------------
commit 1545ba5b042c208e23333479730479c0acd55325
Author: Daniel Dragan <bul...@hotmail.com>
Date:   Wed Apr 11 02:15:18 2018 -0400

    fix -DNO_MATHOMS build, mathomed syms were not removed from perldll.def
    
    Commit 3f1866a8f6 assumed "A" flag means a function can't be mathomed. Not
    true. Many funcs were listed in embed.fnc as "A" yet were in mathoms.c.
    This caused a missing symbol link failure on Win32 with -DNO_MATHOMS,
    since the "A" mathomed funcs were now put into perlldll.def while
    previously they were parsed out of mathoms.c by makedef.pl. Revise the
    logic so "b" means instant removal from the export list on a no mathoms
    build.
    
    embed.fnc "b" flag adds were generated from a missing symbol list from my
    linker, some funcs not in my build/platform config might need to be "b"
    flagged in future. Some funcs like ASCII_TO_NEED were already marked "b"
    but still being by mistake exported because they were also "A".
    
    sv_2bool, sv_eq and sv_collxfrm also needed a "p" flag or a Perl_-less
    symbol was declared in proto.h. sv_2bool and sv_collxfrm also failed
    porting/args_assert.t so add those macros to mathoms.c

commit 7723e0077ab2970477de35881407f68179022294
Author: Karl Williamson <k...@cpan.org>
Date:   Sat Apr 14 22:53:14 2018 -0600

    Move utf8_to_uvchr out of mathoms.c
    
    This function can't be in mathoms because of its use in Devel::PPPort.
    I tried fixing that, but the tools just hung, so this commit moves it
    back to utf8.c, while still deprecated.

-----------------------------------------------------------------------

Summary of changes:
 embed.fnc  | 168 ++++++++++++++++++++++++++++-----------------------------
 embed.h    | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 makedef.pl |   4 +-
 mathoms.c  |  32 +----------
 proto.h    | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 utf8.c     |  30 +++++++++++
 6 files changed, 455 insertions(+), 119 deletions(-)

diff --git a/embed.fnc b/embed.fnc
index 641377be08..581ca79ae9 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -358,8 +358,8 @@ Afnp        |void   |sv_catpvf_nocontext|NN SV *const sv|NN 
const char *const pat|...
 Afnp   |void   |sv_setpvf_nocontext|NN SV *const sv|NN const char *const 
pat|...
 Afnp   |void   |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const 
pat|...
 Afnp   |void   |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const 
pat|...
-Afnp   |int    |fprintf_nocontext|NN PerlIO *stream|NN const char *format|...
-Afnp   |int    |printf_nocontext|NN const char *format|...
+Abfnp  |int    |fprintf_nocontext|NN PerlIO *stream|NN const char *format|...
+Abfnp  |int    |printf_nocontext|NN const char *format|...
 #endif
 : Used in pp.c
 p      |SV *   |core_prototype |NULLOK SV *sv|NN const char *name \
@@ -418,7 +418,7 @@ Ap  |void   |dounwind       |I32 cxix
 pmb    |bool|do_aexec  |NULLOK SV* really|NN SV** mark|NN SV** sp
 : Used in pp_sys.c
 p      |bool|do_aexec5 |NULLOK SV* really|NN SV** mark|NN SV** sp|int fd|int 
do_report
-Ap     |int    |do_binmode     |NN PerlIO *fp|int iotype|int mode
+Abp    |int    |do_binmode     |NN PerlIO *fp|int iotype|int mode
 : Used in pp.c
 Ap     |bool   |do_close       |NULLOK GV* gv|bool not_implicit
 : Defined in doio.c, used only in pp_sys.c
@@ -462,7 +462,7 @@ Ap  |void   |do_join        |NN SV *sv|NN SV *delim|NN SV 
**mark|NN SV **sp
 pR     |I32    |do_ncmp        |NN SV *const left|NN SV *const right
 Apmb   |bool   |do_open        |NN GV* gv|NN const char* name|I32 len|int 
as_raw \
                                |int rawmode|int rawperm|NULLOK PerlIO* 
supplied_fp
-Ap     |bool   |do_open9       |NN GV *gv|NN const char *name|I32 len|int 
as_raw \
+Abp    |bool   |do_open9       |NN GV *gv|NN const char *name|I32 len|int 
as_raw \
                                |int rawmode|int rawperm|NULLOK PerlIO 
*supplied_fp \
                                |NN SV *svs|I32 num
 pn     |void   |setfd_cloexec|int fd
@@ -589,7 +589,7 @@ ApR |GV*    |gv_autoload_pv |NULLOK HV* stash|NN const 
char* namepv \
 ApR    |GV*    |gv_autoload_pvn        |NULLOK HV* stash|NN const char* name \
                                         |STRLEN len|U32 flags
 Ap     |void   |gv_check       |NN HV* stash
-Ap     |void   |gv_efullname   |NN SV* sv|NN const GV* gv
+Abp    |void   |gv_efullname   |NN SV* sv|NN const GV* gv
 Apmb   |void   |gv_efullname3  |NN SV* sv|NN const GV* gv|NULLOK const char* 
prefix
 Ap     |void   |gv_efullname4  |NN SV* sv|NN const GV* gv|NULLOK const char* 
prefix|bool keepmain
 Ap     |GV*    |gv_fetchfile   |NN const char* name
@@ -619,7 +619,7 @@ ApM |GV*    |gv_fetchmethod_pv_flags|NN HV* stash|NN const 
char* name \
 ApM    |GV*    |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \
                                |const STRLEN len|U32 flags
 Ap     |GV*    |gv_fetchpv     |NN const char *nambeg|I32 add|const svtype 
sv_type
-Ap     |void   |gv_fullname    |NN SV* sv|NN const GV* gv
+Abp    |void   |gv_fullname    |NN SV* sv|NN const GV* gv
 Apmb   |void   |gv_fullname3   |NN SV* sv|NN const GV* gv|NULLOK const char* 
prefix
 Ap     |void   |gv_fullname4   |NN SV* sv|NN const GV* gv|NULLOK const char* 
prefix|bool keepmain
 : Used in scope.c
@@ -745,28 +745,28 @@ ApR       |I32    |is_lvalue_sub
 : Used in cop.h
 XopR   |I32    |was_lvalue_sub
 ApMRnP |STRLEN |_is_utf8_char_helper|NN const U8 * const s|NN const U8 * 
e|const U32 flags
-ADMpR  |U32    |to_uni_upper_lc|U32 c
-ADMpR  |U32    |to_uni_title_lc|U32 c
-ADMpR  |U32    |to_uni_lower_lc|U32 c
-ADMpR  |bool   |is_uni_alnum   |UV c
-ADMpR  |bool   |is_uni_alnumc  |UV c
-ADMpR  |bool   |is_uni_idfirst |UV c
-ADMpR  |bool   |is_uni_alpha   |UV c
-ADMpPR |bool   |is_uni_ascii   |UV c
-ADMpPR |bool   |is_uni_blank   |UV c
-ADMpPR |bool   |is_uni_space   |UV c
-ADMpPR |bool   |is_uni_cntrl   |UV c
-ADMpR  |bool   |is_uni_graph   |UV c
-ADMpR  |bool   |is_uni_digit   |UV c
-ADMpR  |bool   |is_uni_upper   |UV c
-ADMpR  |bool   |is_uni_lower   |UV c
-ADMpR  |bool   |is_uni_print   |UV c
-ADMpR  |bool   |is_uni_punct   |UV c
-ADMpPR |bool   |is_uni_xdigit  |UV c
+AbDMpR |U32    |to_uni_upper_lc|U32 c
+AbDMpR |U32    |to_uni_title_lc|U32 c
+AbDMpR |U32    |to_uni_lower_lc|U32 c
+AbDMpR |bool   |is_uni_alnum   |UV c
+AbDMpR |bool   |is_uni_alnumc  |UV c
+AbDMpR |bool   |is_uni_idfirst |UV c
+AbDMpR |bool   |is_uni_alpha   |UV c
+AbDMpPR        |bool   |is_uni_ascii   |UV c
+AbDMpPR        |bool   |is_uni_blank   |UV c
+AbDMpPR        |bool   |is_uni_space   |UV c
+AbDMpPR        |bool   |is_uni_cntrl   |UV c
+AbDMpR |bool   |is_uni_graph   |UV c
+AbDMpR |bool   |is_uni_digit   |UV c
+AbDMpR |bool   |is_uni_upper   |UV c
+AbDMpR |bool   |is_uni_lower   |UV c
+AbDMpR |bool   |is_uni_print   |UV c
+AbDMpR |bool   |is_uni_punct   |UV c
+AbDMpPR        |bool   |is_uni_xdigit  |UV c
 AMp    |UV     |to_uni_upper   |UV c|NN U8 *p|NN STRLEN *lenp
 AMp    |UV     |to_uni_title   |UV c|NN U8 *p|NN STRLEN *lenp
-ADMpR  |bool   |isIDFIRST_lazy |NN const char* p
-ADMpR  |bool   |isALNUM_lazy   |NN const char* p
+AbDMpR |bool   |isIDFIRST_lazy |NN const char* p
+AbDMpR |bool   |isALNUM_lazy   |NN const char* p
 #ifdef PERL_IN_UTF8_C
 snR    |U8     |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp  \
                |const char dummy
@@ -785,23 +785,23 @@ p |UV     |_to_upper_title_latin1|const U8 c|NN U8 *p|NN 
STRLEN *lenp|const char S_o
 AMp    |UV     |to_uni_lower   |UV c|NN U8 *p|NN STRLEN *lenp
 AMmp   |UV     |to_uni_fold    |UV c|NN U8 *p|NN STRLEN *lenp
 AMp    |UV     |_to_uni_fold_flags|UV c|NN U8 *p|NN STRLEN *lenp|U8 flags
-ADMpR  |bool   |is_uni_alnum_lc|UV c
-ADMpR  |bool   |is_uni_alnumc_lc|UV c
-ADMpR  |bool   |is_uni_idfirst_lc|UV c
+AbDMpR |bool   |is_uni_alnum_lc|UV c
+AbDMpR |bool   |is_uni_alnumc_lc|UV c
+AbDMpR |bool   |is_uni_idfirst_lc|UV c
 AMpR   |bool   |_is_uni_perl_idcont|UV c
 AMpR   |bool   |_is_uni_perl_idstart|UV c
-ADMpR  |bool   |is_uni_alpha_lc|UV c
-ADMpPR |bool   |is_uni_ascii_lc|UV c
-ADMpPR |bool   |is_uni_space_lc|UV c
-ADMpPR |bool   |is_uni_blank_lc|UV c
-ADMpPR |bool   |is_uni_cntrl_lc|UV c
-ADMpR  |bool   |is_uni_graph_lc|UV c
-ADMpR  |bool   |is_uni_digit_lc|UV c
-ADMpR  |bool   |is_uni_upper_lc|UV c
-ADMpR  |bool   |is_uni_lower_lc|UV c
-ADMpR  |bool   |is_uni_print_lc|UV c
-ADMpR  |bool   |is_uni_punct_lc|UV c
-ADMpPR |bool   |is_uni_xdigit_lc|UV c
+AbDMpR |bool   |is_uni_alpha_lc|UV c
+AbDMpPR        |bool   |is_uni_ascii_lc|UV c
+AbDMpPR        |bool   |is_uni_space_lc|UV c
+AbDMpPR        |bool   |is_uni_blank_lc|UV c
+AbDMpPR        |bool   |is_uni_cntrl_lc|UV c
+AbDMpR |bool   |is_uni_graph_lc|UV c
+AbDMpR |bool   |is_uni_digit_lc|UV c
+AbDMpR |bool   |is_uni_upper_lc|UV c
+AbDMpR |bool   |is_uni_lower_lc|UV c
+AbDMpR |bool   |is_uni_print_lc|UV c
+AbDMpR |bool   |is_uni_punct_lc|UV c
+AbDMpPR        |bool   |is_uni_xdigit_lc|UV c
 AndmoR |bool   |is_utf8_invariant_string|NN const U8* const s              \
                |STRLEN len
 AnidR  |bool   |is_utf8_invariant_string_loc|NN const U8* const s          \
@@ -820,7 +820,7 @@ AmnpdRP     |bool   |is_invariant_string|NN const U8* const 
s|STRLEN len
 EXnidR |bool   |is_utf8_non_invariant_string|NN const U8* const s          \
                |STRLEN len
 #endif
-AnpdD  |STRLEN |is_utf8_char   |NN const U8 *s
+AbnpdD |STRLEN |is_utf8_char   |NN const U8 *s
 Abmnpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end
 AnmdpR |bool   |is_utf8_string |NN const U8 *s|STRLEN len
 AnidR  |bool   |is_utf8_string_flags                                       \
@@ -868,10 +868,10 @@ AMpR      |bool   |_is_utf8_FOO|U8 classnum|NN const U8 * 
const p             \
                |NN const char * const file|const unsigned line
 AMpR   |bool   |_is_utf8_FOO_with_len|const U8 classnum|NN const U8 *p     \
                |NN const U8 * const e
-ADMpR  |bool   |is_utf8_alnum  |NN const U8 *p
-ADMpR  |bool   |is_utf8_alnumc |NN const U8 *p
-ADMpR  |bool   |is_utf8_idfirst|NN const U8 *p
-ADMpR  |bool   |is_utf8_xidfirst|NN const U8 *p
+AbDMpR |bool   |is_utf8_alnum  |NN const U8 *p
+AbDMpR |bool   |is_utf8_alnumc |NN const U8 *p
+AbDMpR |bool   |is_utf8_idfirst|NN const U8 *p
+AbDMpR |bool   |is_utf8_xidfirst|NN const U8 *p
 AMpR   |bool   |_is_utf8_idcont|NN const U8 *p
 AMpR   |bool   |_is_utf8_idstart|NN const U8 *p
 AMpR   |bool   |_is_utf8_xidcont|NN const U8 *p
@@ -880,25 +880,25 @@ AMpR      |bool   |_is_utf8_perl_idcont_with_len|NN const 
U8 *p               \
                |NN const U8 * const e
 AMpR   |bool   |_is_utf8_perl_idstart_with_len|NN const U8 *p              \
                |NN const U8 * const e
-ADMpR  |bool   |is_utf8_idcont |NN const U8 *p
-ADMpR  |bool   |is_utf8_xidcont        |NN const U8 *p
-ADMpR  |bool   |is_utf8_alpha  |NN const U8 *p
-ADMpR  |bool   |is_utf8_ascii  |NN const U8 *p
-ADMpR  |bool   |is_utf8_blank  |NN const U8 *p
-ADMpR  |bool   |is_utf8_space  |NN const U8 *p
-ADMpR  |bool   |is_utf8_perl_space     |NN const U8 *p
-ADMpR  |bool   |is_utf8_perl_word      |NN const U8 *p
-ADMpR  |bool   |is_utf8_cntrl  |NN const U8 *p
-ADMpR  |bool   |is_utf8_digit  |NN const U8 *p
-ADMpR  |bool   |is_utf8_posix_digit    |NN const U8 *p
-ADMpR  |bool   |is_utf8_graph  |NN const U8 *p
-ADMpR  |bool   |is_utf8_upper  |NN const U8 *p
-ADMpR  |bool   |is_utf8_lower  |NN const U8 *p
-ADMpR  |bool   |is_utf8_print  |NN const U8 *p
-ADMpR  |bool   |is_utf8_punct  |NN const U8 *p
-ADMpR  |bool   |is_utf8_xdigit |NN const U8 *p
+AbDMpR |bool   |is_utf8_idcont |NN const U8 *p
+AbDMpR |bool   |is_utf8_xidcont        |NN const U8 *p
+AbDMpR |bool   |is_utf8_alpha  |NN const U8 *p
+AbDMpR |bool   |is_utf8_ascii  |NN const U8 *p
+AbDMpR |bool   |is_utf8_blank  |NN const U8 *p
+AbDMpR |bool   |is_utf8_space  |NN const U8 *p
+AbDMpR |bool   |is_utf8_perl_space     |NN const U8 *p
+AbDMpR |bool   |is_utf8_perl_word      |NN const U8 *p
+AbDMpR |bool   |is_utf8_cntrl  |NN const U8 *p
+AbDMpR |bool   |is_utf8_digit  |NN const U8 *p
+AbDMpR |bool   |is_utf8_posix_digit    |NN const U8 *p
+AbDMpR |bool   |is_utf8_graph  |NN const U8 *p
+AbDMpR |bool   |is_utf8_upper  |NN const U8 *p
+AbDMpR |bool   |is_utf8_lower  |NN const U8 *p
+AbDMpR |bool   |is_utf8_print  |NN const U8 *p
+AbDMpR |bool   |is_utf8_punct  |NN const U8 *p
+AbDMpR |bool   |is_utf8_xdigit |NN const U8 *p
 AMpR   |bool   |_is_utf8_mark  |NN const U8 *p
-ADMpR  |bool   |is_utf8_mark   |NN const U8 *p
+AbDMpR |bool   |is_utf8_mark   |NN const U8 *p
 #if defined(PERL_CORE) || defined(PERL_EXT)
 EXdpR  |bool   |isSCRIPT_RUN   |NN const U8 *s|NN const U8 *send   \
                                |const bool utf8_target
@@ -1306,7 +1306,7 @@ Ando      |const char*|Perl_langinfo|const nl_item item
 Ando   |const char*|Perl_langinfo|const int item
 #endif
 ApOM   |int    |init_i18nl10n  |int printwarn
-ApOM   |int    |init_i18nl14n  |int printwarn
+AbpOM  |int    |init_i18nl14n  |int printwarn
 p      |char*  |my_strerror    |const int errnum
 Xpn    |void   |_warn_problematic_locale
 Xp     |void   |set_numeric_underlying
@@ -1317,7 +1317,7 @@ Apdn      |bool   |sync_locale
 ApMn   |void   |thread_locale_init
 ApMn   |void   |thread_locale_term
 ApdO   |void   |require_pv     |NN const char* pv
-Apd    |void   |pack_cat       |NN SV *cat|NN const char *pat|NN const char 
*patend \
+Abpd   |void   |pack_cat       |NN SV *cat|NN const char *pat|NN const char 
*patend \
                                |NN SV **beglist|NN SV **endlist|NN SV 
***next_in_list|U32 flags
 Apd    |void   |packlist       |NN SV *cat|NN const char *pat|NN const char 
*patend|NN SV **beglist|NN SV **endlist
 #if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
@@ -1459,10 +1459,10 @@ Ap      |void   |save_I8        |NN I8* bytep
 Ap     |void   |save_int       |NN int* intp
 Ap     |void   |save_item      |NN SV* item
 Ap     |void   |save_iv        |NN IV *ivp
-Ap     |void   |save_list      |NN SV** sarg|I32 maxsarg
-Ap     |void   |save_long      |NN long* longp
+Abp    |void   |save_list      |NN SV** sarg|I32 maxsarg
+Abp    |void   |save_long      |NN long* longp
 Apmb   |void   |save_mortalizesv|NN SV* sv
-Ap     |void   |save_nogv      |NN GV* gv
+Abp    |void   |save_nogv      |NN GV* gv
 : Used in SAVEFREOP(), used in gv.c, op.c, perl.c, pp_ctl.c, pp_sort.c
 Apmb   |void   |save_op
 Ap     |SV*    |save_scalar    |NN GV* gv
@@ -1516,7 +1516,7 @@ Ap        |I32    |start_subparse |I32 is_format|U32 flags
 Xp     |void   |init_named_cv  |NN CV *cv|NN OP *nameop
 : Used in pp_ctl.c
 p      |void   |sub_crush_depth|NN CV* cv
-Amd    |bool   |sv_2bool       |NN SV *const sv
+Apbmd  |bool   |sv_2bool       |NN SV *const sv
 Apd    |bool   |sv_2bool_flags |NN SV *sv|I32 flags
 Apd    |CV*    |sv_2cv         |NULLOK SV* sv|NN HV **const st|NN GV **const 
gvp \
                                |const I32 lref
@@ -1534,15 +1534,15 @@ Apmb    |char*  |sv_2pv         |NN SV *sv|NULLOK 
STRLEN *lp
 Apd    |char*  |sv_2pv_flags   |NN SV *const sv|NULLOK STRLEN *const lp|const 
I32 flags
 Apd    |char*  |sv_2pvutf8     |NN SV *sv|NULLOK STRLEN *const lp
 Apd    |char*  |sv_2pvbyte     |NN SV *sv|NULLOK STRLEN *const lp
-Ap     |char*  |sv_pvn_nomg    |NN SV* sv|NULLOK STRLEN* lp
+Abp    |char*  |sv_pvn_nomg    |NN SV* sv|NULLOK STRLEN* lp
 Apmb   |UV     |sv_2uv         |NN SV *sv
 Apd    |UV     |sv_2uv_flags   |NN SV *const sv|const I32 flags
-Apd    |IV     |sv_iv          |NN SV* sv
-Apd    |UV     |sv_uv          |NN SV* sv
-Apd    |NV     |sv_nv          |NN SV* sv
-Apd    |char*  |sv_pvn         |NN SV *sv|NN STRLEN *lp
-Apd    |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *lp
-Apd    |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *lp
+Abpd   |IV     |sv_iv          |NN SV* sv
+Abpd   |UV     |sv_uv          |NN SV* sv
+Abpd   |NV     |sv_nv          |NN SV* sv
+Abpd   |char*  |sv_pvn         |NN SV *sv|NN STRLEN *lp
+Abpd   |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *lp
+Abpd   |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *lp
 Apd    |I32    |sv_true        |NULLOK SV *const sv
 #if defined(PERL_IN_SV_C)
 sd     |void   |sv_add_arena   |NN char *const ptr|const U32 size \
@@ -1578,7 +1578,7 @@ Aopd      |I32    |sv_cmp_locale  |NULLOK SV *const 
sv1|NULLOK SV *const sv2
 Apd    |I32    |sv_cmp_locale_flags    |NULLOK SV *const sv1 \
                                |NULLOK SV *const sv2|const U32 flags
 #if defined(USE_LOCALE_COLLATE)
-Amd    |char*  |sv_collxfrm    |NN SV *const sv|NN STRLEN *const nxp
+Apbmd  |char*  |sv_collxfrm    |NN SV *const sv|NN STRLEN *const nxp
 Apd    |char*  |sv_collxfrm_flags      |NN SV *const sv|NN STRLEN *const 
nxp|I32 const flags
 #endif
 Apd    |int    |getcwd_sv      |NN SV* sv
@@ -1595,7 +1595,7 @@ ApdR      |bool   |sv_does_sv     |NN SV* sv|NN SV* 
namesv|U32 flags
 ApdR   |bool   |sv_does_pv     |NN SV* sv|NN const char *const name|U32 flags
 ApdR   |bool   |sv_does_pvn    |NN SV* sv|NN const char *const name|const 
STRLEN len \
                                 |U32 flags
-Amd    |I32    |sv_eq          |NULLOK SV* sv1|NULLOK SV* sv2
+Apbmd  |I32    |sv_eq          |NULLOK SV* sv1|NULLOK SV* sv2
 Apd    |I32    |sv_eq_flags    |NULLOK SV* sv1|NULLOK SV* sv2|const U32 flags
 Apd    |void   |sv_free        |NULLOK SV *const sv
 poMX   |void   |sv_free2       |NN SV *const sv|const U32 refcnt
@@ -1826,7 +1826,7 @@ pn        |bool   |translate_substr_offsets|STRLEN 
curlen|IV pos1_iv \
 #if defined(UNLINK_ALL_VERSIONS)
 Ap     |I32    |unlnk          |NN const char* f
 #endif
-Apd    |SSize_t|unpack_str     |NN const char *pat|NN const char *patend|NN 
const char *s \
+Abpd   |SSize_t|unpack_str     |NN const char *pat|NN const char *patend|NN 
const char *s \
                                |NULLOK const char *strbeg|NN const char 
*strend|NULLOK char **new_s \
                                |I32 ocnt|U32 flags
 Apd    |SSize_t|unpackstring   |NN const char *pat|NN const char *patend|NN 
const char *s \
@@ -1857,8 +1857,8 @@ AMnp      |U8*    |bytes_from_utf8_loc|NN const U8 *s     
                    \
                                    |NULLOK const U8 ** first_unconverted
 ApMd   |U8*    |bytes_to_utf8  |NN const U8 *s|NN STRLEN *lenp
 ApdD   |UV     |utf8_to_uvchr  |NN const U8 *s|NULLOK STRLEN *retlen
-ApdD   |UV     |utf8_to_uvuni  |NN const U8 *s|NULLOK STRLEN *retlen
-ApMD   |UV     |valid_utf8_to_uvuni    |NN const U8 *s|NULLOK STRLEN *retlen
+AbpdD  |UV     |utf8_to_uvuni  |NN const U8 *s|NULLOK STRLEN *retlen
+AbpMD  |UV     |valid_utf8_to_uvuni    |NN const U8 *s|NULLOK STRLEN *retlen
 Aopd   |UV     |utf8_to_uvchr_buf      |NN const U8 *s|NN const U8 
*send|NULLOK STRLEN *retlen
 ApdD   |UV     |utf8_to_uvuni_buf      |NN const U8 *s|NN const U8 
*send|NULLOK STRLEN *retlen
 pM     |bool   |check_utf8_print       |NN const U8 *s|const STRLEN len
@@ -2095,8 +2095,8 @@ Ap        |void   |sys_intern_dup |NN struct 
interp_intern* src|NN struct interp_intern*
 #endif
 
 Amop   |const XOP *    |custom_op_xop  |NN const OP *o
-ApR    |const char *   |custom_op_name |NN const OP *o
-ApR    |const char *   |custom_op_desc |NN const OP *o
+AbpR   |const char *   |custom_op_name |NN const OP *o
+AbpR   |const char *   |custom_op_desc |NN const OP *o
 pRX    |XOPRETANY      |custom_op_get_field    |NN const OP *o|const 
xop_flags_enum field
 Aop    |void   |custom_op_register     |NN Perl_ppaddr_t ppaddr \
                        |NN const XOP *xop
diff --git a/embed.h b/embed.h
index cf7ec3e5e6..2a3f74dee3 100644
--- a/embed.h
+++ b/embed.h
@@ -98,8 +98,12 @@
 #define croak_no_modify                Perl_croak_no_modify
 #define croak_sv(a)            Perl_croak_sv(aTHX_ a)
 #define croak_xs_usage         Perl_croak_xs_usage
+#ifndef NO_MATHOMS
 #define custom_op_desc(a)      Perl_custom_op_desc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define custom_op_name(a)      Perl_custom_op_name(aTHX_ a)
+#endif
 #define cv_clone(a)            Perl_cv_clone(aTHX_ a)
 #define cv_const_sv            Perl_cv_const_sv
 #define cv_get_call_checker(a,b,c)     Perl_cv_get_call_checker(aTHX_ a,b,c)
@@ -123,7 +127,9 @@
 #define die                    Perl_die
 #endif
 #define die_sv(a)              Perl_die_sv(aTHX_ a)
+#ifndef NO_MATHOMS
 #define do_binmode(a,b,c)      Perl_do_binmode(aTHX_ a,b,c)
+#endif
 #define do_close(a,b)          Perl_do_close(aTHX_ a,b)
 #define do_gv_dump(a,b,c,d)    Perl_do_gv_dump(aTHX_ a,b,c,d)
 #define do_gvgv_dump(a,b,c,d)  Perl_do_gvgv_dump(aTHX_ a,b,c,d)
@@ -131,7 +137,9 @@
 #define do_join(a,b,c,d)       Perl_do_join(aTHX_ a,b,c,d)
 #define do_magic_dump(a,b,c,d,e,f,g)   Perl_do_magic_dump(aTHX_ a,b,c,d,e,f,g)
 #define do_op_dump(a,b,c)      Perl_do_op_dump(aTHX_ a,b,c)
+#ifndef NO_MATHOMS
 #define do_open9(a,b,c,d,e,f,g,h,i)    Perl_do_open9(aTHX_ a,b,c,d,e,f,g,h,i)
+#endif
 #define do_openn(a,b,c,d,e,f,g,h,i)    Perl_do_openn(aTHX_ a,b,c,d,e,f,g,h,i)
 #define do_pmop_dump(a,b,c)    Perl_do_pmop_dump(aTHX_ a,b,c)
 #define do_sprintf(a,b,c)      Perl_do_sprintf(aTHX_ a,b,c)
@@ -194,7 +202,9 @@
 #define gv_check(a)            Perl_gv_check(aTHX_ a)
 #define gv_const_sv(a)         Perl_gv_const_sv(aTHX_ a)
 #define gv_dump(a)             Perl_gv_dump(aTHX_ a)
+#ifndef NO_MATHOMS
 #define gv_efullname(a,b)      Perl_gv_efullname(aTHX_ a,b)
+#endif
 #define gv_efullname4(a,b,c,d) Perl_gv_efullname4(aTHX_ a,b,c,d)
 #define gv_fetchfile(a)                Perl_gv_fetchfile(aTHX_ a)
 #define gv_fetchfile_flags(a,b,c)      Perl_gv_fetchfile_flags(aTHX_ a,b,c)
@@ -211,7 +221,9 @@
 #define gv_fetchpv(a,b,c)      Perl_gv_fetchpv(aTHX_ a,b,c)
 #define gv_fetchpvn_flags(a,b,c,d)     Perl_gv_fetchpvn_flags(aTHX_ a,b,c,d)
 #define gv_fetchsv(a,b,c)      Perl_gv_fetchsv(aTHX_ a,b,c)
+#ifndef NO_MATHOMS
 #define gv_fullname(a,b)       Perl_gv_fullname(aTHX_ a,b)
+#endif
 #define gv_fullname4(a,b,c,d)  Perl_gv_fullname4(aTHX_ a,b,c,d)
 #define gv_handler(a,b)                Perl_gv_handler(aTHX_ a,b)
 #define gv_init_pv(a,b,c,d)    Perl_gv_init_pv(aTHX_ a,b,c,d)
@@ -240,75 +252,187 @@
 #define hv_rand_set(a,b)       Perl_hv_rand_set(aTHX_ a,b)
 #define hv_scalar(a)           Perl_hv_scalar(aTHX_ a)
 #define init_i18nl10n(a)       Perl_init_i18nl10n(aTHX_ a)
+#ifndef NO_MATHOMS
 #define init_i18nl14n(a)       Perl_init_i18nl14n(aTHX_ a)
+#endif
 #define init_stacks()          Perl_init_stacks(aTHX)
 #define init_tm(a)             Perl_init_tm(aTHX_ a)
 #define intro_my()             Perl_intro_my(aTHX)
+#ifndef NO_MATHOMS
 #define isALNUM_lazy(a)                Perl_isALNUM_lazy(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define isIDFIRST_lazy(a)      Perl_isIDFIRST_lazy(aTHX_ a)
+#endif
 #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_loclen   S_is_strict_utf8_string_loclen
+#ifndef NO_MATHOMS
 #define is_uni_alnum(a)                Perl_is_uni_alnum(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_alnum_lc(a)     Perl_is_uni_alnum_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_alnumc(a)       Perl_is_uni_alnumc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_alnumc_lc(a)    Perl_is_uni_alnumc_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_alpha(a)                Perl_is_uni_alpha(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_alpha_lc(a)     Perl_is_uni_alpha_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_ascii(a)                Perl_is_uni_ascii(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_ascii_lc(a)     Perl_is_uni_ascii_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_blank(a)                Perl_is_uni_blank(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_blank_lc(a)     Perl_is_uni_blank_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_cntrl(a)                Perl_is_uni_cntrl(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_cntrl_lc(a)     Perl_is_uni_cntrl_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_digit(a)                Perl_is_uni_digit(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_digit_lc(a)     Perl_is_uni_digit_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_graph(a)                Perl_is_uni_graph(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_graph_lc(a)     Perl_is_uni_graph_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_idfirst(a)      Perl_is_uni_idfirst(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_idfirst_lc(a)   Perl_is_uni_idfirst_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_lower(a)                Perl_is_uni_lower(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_lower_lc(a)     Perl_is_uni_lower_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_print(a)                Perl_is_uni_print(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_print_lc(a)     Perl_is_uni_print_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_punct(a)                Perl_is_uni_punct(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_punct_lc(a)     Perl_is_uni_punct_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_space(a)                Perl_is_uni_space(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_space_lc(a)     Perl_is_uni_space_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_upper(a)                Perl_is_uni_upper(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_upper_lc(a)     Perl_is_uni_upper_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_xdigit(a)       Perl_is_uni_xdigit(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_uni_xdigit_lc(a)    Perl_is_uni_xdigit_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_alnum(a)       Perl_is_utf8_alnum(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_alnumc(a)      Perl_is_utf8_alnumc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_alpha(a)       Perl_is_utf8_alpha(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_ascii(a)       Perl_is_utf8_ascii(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_blank(a)       Perl_is_utf8_blank(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_char           Perl_is_utf8_char
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_cntrl(a)       Perl_is_utf8_cntrl(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_digit(a)       Perl_is_utf8_digit(aTHX_ a)
+#endif
 #define is_utf8_fixed_width_buf_loclen_flags   
S_is_utf8_fixed_width_buf_loclen_flags
+#ifndef NO_MATHOMS
 #define is_utf8_graph(a)       Perl_is_utf8_graph(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_idcont(a)      Perl_is_utf8_idcont(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_idfirst(a)     Perl_is_utf8_idfirst(aTHX_ a)
+#endif
 #define is_utf8_invariant_string_loc   S_is_utf8_invariant_string_loc
+#ifndef NO_MATHOMS
 #define is_utf8_lower(a)       Perl_is_utf8_lower(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_mark(a)                Perl_is_utf8_mark(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_perl_space(a)  Perl_is_utf8_perl_space(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_perl_word(a)   Perl_is_utf8_perl_word(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_posix_digit(a) Perl_is_utf8_posix_digit(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_print(a)       Perl_is_utf8_print(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_punct(a)       Perl_is_utf8_punct(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_space(a)       Perl_is_utf8_space(aTHX_ a)
+#endif
 #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
+#ifndef NO_MATHOMS
 #define is_utf8_upper(a)       Perl_is_utf8_upper(aTHX_ a)
+#endif
 #define is_utf8_valid_partial_char_flags       
S_is_utf8_valid_partial_char_flags
+#ifndef NO_MATHOMS
 #define is_utf8_xdigit(a)      Perl_is_utf8_xdigit(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_xidcont(a)     Perl_is_utf8_xidcont(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define is_utf8_xidfirst(a)    Perl_is_utf8_xidfirst(aTHX_ a)
+#endif
 #define isinfnan               Perl_isinfnan
 #define leave_adjust_stacks(a,b,c,d)   Perl_leave_adjust_stacks(aTHX_ a,b,c,d)
 #define leave_scope(a)         Perl_leave_scope(aTHX_ a)
@@ -443,7 +567,9 @@
 #define op_refcnt_unlock()     Perl_op_refcnt_unlock(aTHX)
 #define op_scope(a)            Perl_op_scope(aTHX_ a)
 #define op_sibling_splice      Perl_op_sibling_splice
+#ifndef NO_MATHOMS
 #define pack_cat(a,b,c,d,e,f,g)        Perl_pack_cat(aTHX_ a,b,c,d,e,f,g)
+#endif
 #define packlist(a,b,c,d,e)    Perl_packlist(aTHX_ a,b,c,d,e)
 #define pad_add_anon(a,b)      Perl_pad_add_anon(aTHX_ a,b)
 #define pad_add_name_pv(a,b,c,d)       Perl_pad_add_name_pv(aTHX_ a,b,c,d)
@@ -542,9 +668,15 @@
 #define save_int(a)            Perl_save_int(aTHX_ a)
 #define save_item(a)           Perl_save_item(aTHX_ a)
 #define save_iv(a)             Perl_save_iv(aTHX_ a)
+#ifndef NO_MATHOMS
 #define save_list(a,b)         Perl_save_list(aTHX_ a,b)
+#endif
+#ifndef NO_MATHOMS
 #define save_long(a)           Perl_save_long(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define save_nogv(a)           Perl_save_nogv(aTHX_ a)
+#endif
 #define save_padsv_and_mortalize(a)    Perl_save_padsv_and_mortalize(aTHX_ a)
 #define save_pptr(a)           Perl_save_pptr(aTHX_ a)
 #define save_pushi32ptr(a,b,c) Perl_save_pushi32ptr(aTHX_ a,b,c)
@@ -630,7 +762,9 @@
 #define sv_insert_flags(a,b,c,d,e,f)   Perl_sv_insert_flags(aTHX_ a,b,c,d,e,f)
 #define sv_isa(a,b)            Perl_sv_isa(aTHX_ a,b)
 #define sv_isobject(a)         Perl_sv_isobject(aTHX_ a)
+#ifndef NO_MATHOMS
 #define sv_iv(a)               Perl_sv_iv(aTHX_ a)
+#endif
 #define sv_len(a)              Perl_sv_len(aTHX_ a)
 #define sv_len_utf8(a)         Perl_sv_len_utf8(aTHX_ a)
 #define sv_magic(a,b,c,d,e)    Perl_sv_magic(aTHX_ a,b,c,d,e)
@@ -641,18 +775,28 @@
 #ifndef NO_MATHOMS
 #define sv_nounlocking(a)      Perl_sv_nounlocking(aTHX_ a)
 #endif
+#ifndef NO_MATHOMS
 #define sv_nv(a)               Perl_sv_nv(aTHX_ a)
+#endif
 #define sv_peek(a)             Perl_sv_peek(aTHX_ a)
 #define sv_pos_b2u(a,b)                Perl_sv_pos_b2u(aTHX_ a,b)
 #define sv_pos_b2u_flags(a,b,c)        Perl_sv_pos_b2u_flags(aTHX_ a,b,c)
 #define sv_pos_u2b(a,b,c)      Perl_sv_pos_u2b(aTHX_ a,b,c)
 #define sv_pos_u2b_flags(a,b,c,d)      Perl_sv_pos_u2b_flags(aTHX_ a,b,c,d)
+#ifndef NO_MATHOMS
 #define sv_pvbyten(a,b)                Perl_sv_pvbyten(aTHX_ a,b)
+#endif
 #define sv_pvbyten_force(a,b)  Perl_sv_pvbyten_force(aTHX_ a,b)
+#ifndef NO_MATHOMS
 #define sv_pvn(a,b)            Perl_sv_pvn(aTHX_ a,b)
+#endif
 #define sv_pvn_force_flags(a,b,c)      Perl_sv_pvn_force_flags(aTHX_ a,b,c)
+#ifndef NO_MATHOMS
 #define sv_pvn_nomg(a,b)       Perl_sv_pvn_nomg(aTHX_ a,b)
+#endif
+#ifndef NO_MATHOMS
 #define sv_pvutf8n(a,b)                Perl_sv_pvutf8n(aTHX_ a,b)
+#endif
 #define sv_pvutf8n_force(a,b)  Perl_sv_pvutf8n_force(aTHX_ a,b)
 #define sv_recode_to_utf8(a,b) Perl_sv_recode_to_utf8(aTHX_ a,b)
 #define sv_ref(a,b,c)          Perl_sv_ref(aTHX_ a,b,c)
@@ -705,7 +849,9 @@
 #define sv_utf8_downgrade(a,b) Perl_sv_utf8_downgrade(aTHX_ a,b)
 #define sv_utf8_encode(a)      Perl_sv_utf8_encode(aTHX_ a)
 #define sv_utf8_upgrade_flags_grow(a,b,c)      
Perl_sv_utf8_upgrade_flags_grow(aTHX_ a,b,c)
+#ifndef NO_MATHOMS
 #define sv_uv(a)               Perl_sv_uv(aTHX_ a)
+#endif
 #define sv_vcatpvf(a,b,c)      Perl_sv_vcatpvf(aTHX_ a,b,c)
 #define sv_vcatpvf_mg(a,b,c)   Perl_sv_vcatpvf_mg(aTHX_ a,b,c)
 #define sv_vcatpvfn(a,b,c,d,e,f,g)     Perl_sv_vcatpvfn(aTHX_ a,b,c,d,e,f,g)
@@ -720,12 +866,20 @@
 #define thread_locale_init     Perl_thread_locale_init
 #define thread_locale_term     Perl_thread_locale_term
 #define to_uni_lower(a,b,c)    Perl_to_uni_lower(aTHX_ a,b,c)
+#ifndef NO_MATHOMS
 #define to_uni_lower_lc(a)     Perl_to_uni_lower_lc(aTHX_ a)
+#endif
 #define to_uni_title(a,b,c)    Perl_to_uni_title(aTHX_ a,b,c)
+#ifndef NO_MATHOMS
 #define to_uni_title_lc(a)     Perl_to_uni_title_lc(aTHX_ a)
+#endif
 #define to_uni_upper(a,b,c)    Perl_to_uni_upper(aTHX_ a,b,c)
+#ifndef NO_MATHOMS
 #define to_uni_upper_lc(a)     Perl_to_uni_upper_lc(aTHX_ a)
+#endif
+#ifndef NO_MATHOMS
 #define unpack_str(a,b,c,d,e,f,g,h)    Perl_unpack_str(aTHX_ a,b,c,d,e,f,g,h)
+#endif
 #define unpackstring(a,b,c,d,e)        Perl_unpackstring(aTHX_ a,b,c,d,e)
 #define unsharepvn(a,b,c)      Perl_unsharepvn(aTHX_ a,b,c)
 #define upg_version(a,b)       Perl_upg_version(aTHX_ a,b)
@@ -737,7 +891,9 @@
 #define utf8_length(a,b)       Perl_utf8_length(aTHX_ a,b)
 #define utf8_to_bytes(a,b)     Perl_utf8_to_bytes(aTHX_ a,b)
 #define utf8_to_uvchr(a,b)     Perl_utf8_to_uvchr(aTHX_ a,b)
+#ifndef NO_MATHOMS
 #define utf8_to_uvuni(a,b)     Perl_utf8_to_uvuni(aTHX_ a,b)
+#endif
 #define utf8_to_uvuni_buf(a,b,c)       Perl_utf8_to_uvuni_buf(aTHX_ a,b,c)
 #define utf8n_to_uvchr_msgs(a,b,c,d,e,f)       Perl_utf8n_to_uvchr_msgs(aTHX_ 
a,b,c,d,e,f)
 #define utf8n_to_uvuni(a,b,c,d)        Perl_utf8n_to_uvuni(aTHX_ a,b,c,d)
@@ -745,7 +901,9 @@
 #define uvuni_to_utf8(a,b)     Perl_uvuni_to_utf8(aTHX_ a,b)
 #define uvuni_to_utf8_flags(a,b,c)     Perl_uvuni_to_utf8_flags(aTHX_ a,b,c)
 #define valid_utf8_to_uvchr    Perl_valid_utf8_to_uvchr
+#ifndef NO_MATHOMS
 #define valid_utf8_to_uvuni(a,b)       Perl_valid_utf8_to_uvuni(aTHX_ a,b)
+#endif
 #define vcmp(a,b)              Perl_vcmp(aTHX_ a,b)
 #define vcroak(a,b)            Perl_vcroak(aTHX_ a,b)
 #define vdeb(a,b)              Perl_vdeb(aTHX_ a,b)
@@ -835,11 +993,15 @@
 #define deb_nocontext          Perl_deb_nocontext
 #define die_nocontext          Perl_die_nocontext
 #define form_nocontext         Perl_form_nocontext
+#ifndef NO_MATHOMS
 #define fprintf_nocontext      Perl_fprintf_nocontext
+#endif
 #define load_module_nocontext  Perl_load_module_nocontext
 #define mess_nocontext         Perl_mess_nocontext
 #define newSVpvf_nocontext     Perl_newSVpvf_nocontext
+#ifndef NO_MATHOMS
 #define printf_nocontext       Perl_printf_nocontext
+#endif
 #define sv_catpvf_mg_nocontext Perl_sv_catpvf_mg_nocontext
 #define sv_catpvf_nocontext    Perl_sv_catpvf_nocontext
 #define sv_setpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext
diff --git a/makedef.pl b/makedef.pl
index f2beb94020..daf6b400fc 100644
--- a/makedef.pl
+++ b/makedef.pl
@@ -731,12 +731,12 @@ unless ($define{'USE_QUADMATH'}) {
 {
     my %seen;
     my ($embed) = setup_embed($ARGS{TARG_DIR});
+    my $excludedre = $define{'NO_MATHOMS'} ? qr/[xmib]/ : qr/[xmi]/;
 
     foreach (@$embed) {
        my ($flags, $retval, $func, @args) = @$_;
        next unless $func;
-       if (   ($flags =~ /[AX]/ && $flags !~ /[xmi]/)
-            || ($flags =~ /b/ && ! $define{'NO_MATHOMS'}))
+       if ($flags =~ /[AX]/ && $flags !~ $excludedre)
         {
            # public API, so export
 
diff --git a/mathoms.c b/mathoms.c
index 295d8c4ea9..ed466c2c71 100644
--- a/mathoms.c
+++ b/mathoms.c
@@ -1081,6 +1081,7 @@ Perl_sv_eq(pTHX_ SV *sv1, SV *sv2)
 char *
 Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
 {
+    PERL_ARGS_ASSERT_SV_COLLXFRM;
     return sv_collxfrm_flags(sv, nxp, SV_GMAGIC);
 }
 
@@ -1100,6 +1101,7 @@ Perl_mem_collxfrm(pTHX_ const char *input_string, STRLEN 
len, STRLEN *xlen)
 bool
 Perl_sv_2bool(pTHX_ SV *const sv)
 {
+    PERL_ARGS_ASSERT_SV_2BOOL;
     return sv_2bool_flags(sv, SV_GMAGIC);
 }
 
@@ -1692,36 +1694,6 @@ Perl_valid_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN 
*retlen)
     return NATIVE_TO_UNI(valid_utf8_to_uvchr(s, retlen));
 }
 
-/*
-=for apidoc utf8_to_uvchr
-
-Returns the native code point of the first character in the string C<s>
-which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
-length, in bytes, of that character.
-
-Some, but not all, UTF-8 malformations are detected, and in fact, some
-malformed input could cause reading beyond the end of the input buffer, which
-is why this function is deprecated.  Use L</utf8_to_uvchr_buf> instead.
-
-If C<s> points to one of the detected malformations, and UTF8 warnings are
-enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
-C<NULL>) to -1.  If those warnings are off, the computed value if well-defined 
(or
-the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
-is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
-next possible position in C<s> that could begin a non-malformed character.
-See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is 
returned.
-
-=cut
-*/
-
-UV
-Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
-{
-    PERL_ARGS_ASSERT_UTF8_TO_UVCHR;
-
-    return utf8_to_uvchr_buf(s, s + UTF8_MAXBYTES, retlen);
-}
-
 /*
 =for apidoc utf8_to_uvuni
 
diff --git a/proto.h b/proto.h
index 3aae77fe0d..57970d697a 100644
--- a/proto.h
+++ b/proto.h
@@ -639,20 +639,24 @@ PERL_CALLCONV_NO_RET void Perl_croak_xs_usage(const CV 
*const cv, const char *co
        assert(cv); assert(params)
 
 PERL_CALLCONV regexp_engine const *    Perl_current_re_engine(pTHX);
+#ifndef NO_MATHOMS
 PERL_CALLCONV const char *     Perl_custom_op_desc(pTHX_ const OP *o)
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CUSTOM_OP_DESC        \
        assert(o)
+#endif
 
 PERL_CALLCONV XOPRETANY        Perl_custom_op_get_field(pTHX_ const OP *o, 
const xop_flags_enum field)
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD   \
        assert(o)
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV const char *     Perl_custom_op_name(pTHX_ const OP *o)
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_CUSTOM_OP_NAME        \
        assert(o)
+#endif
 
 PERL_CALLCONV void     Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, 
const XOP *xop);
 #define PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER    \
@@ -757,9 +761,11 @@ PERL_CALLCONV bool Perl_do_aexec(pTHX_ SV* really, SV** 
mark, SV** sp);
 PERL_CALLCONV bool     Perl_do_aexec5(pTHX_ SV* really, SV** mark, SV** sp, 
int fd, int do_report);
 #define PERL_ARGS_ASSERT_DO_AEXEC5     \
        assert(mark); assert(sp)
+#ifndef NO_MATHOMS
 PERL_CALLCONV int      Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode);
 #define PERL_ARGS_ASSERT_DO_BINMODE    \
        assert(fp)
+#endif
 PERL_CALLCONV bool     Perl_do_close(pTHX_ GV* gv, bool not_implicit);
 PERL_CALLCONV void     Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST 
*padlist, int full);
 #define PERL_ARGS_ASSERT_DO_DUMP_PAD   \
@@ -798,9 +804,11 @@ PERL_CALLCONV bool Perl_do_open(pTHX_ GV* gv, const char* 
name, I32 len, int as_
 PERL_CALLCONV bool     Perl_do_open6(pTHX_ GV *gv, const char *oname, STRLEN 
len, PerlIO *supplied_fp, SV **svp, U32 num);
 #define PERL_ARGS_ASSERT_DO_OPEN6      \
        assert(gv); assert(oname)
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_do_open9(pTHX_ GV *gv, const char *name, I32 len, 
int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num);
 #define PERL_ARGS_ASSERT_DO_OPEN9      \
        assert(gv); assert(name); assert(svs)
+#endif
 PERL_CALLCONV bool     Perl_do_open_raw(pTHX_ GV *gv, const char *oname, 
STRLEN len, int rawmode, int rawperm, Stat_t *statbufp);
 #define PERL_ARGS_ASSERT_DO_OPEN_RAW   \
        assert(gv); assert(oname)
@@ -1076,9 +1084,11 @@ PERL_CALLCONV SV*        Perl_gv_const_sv(pTHX_ GV* gv)
        assert(gv)
 
 PERL_CALLCONV void     Perl_gv_dump(pTHX_ GV* gv);
+#ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_gv_efullname(pTHX_ SV* sv, const GV* gv);
 #define PERL_ARGS_ASSERT_GV_EFULLNAME  \
        assert(sv); assert(gv)
+#endif
 #ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_gv_efullname3(pTHX_ SV* sv, const GV* gv, const 
char* prefix);
 #define PERL_ARGS_ASSERT_GV_EFULLNAME3 \
@@ -1139,9 +1149,11 @@ PERL_CALLCONV GV*        Perl_gv_fetchpvn_flags(pTHX_ 
const char* name, STRLEN len, I32
 PERL_CALLCONV GV*      Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype 
sv_type);
 #define PERL_ARGS_ASSERT_GV_FETCHSV    \
        assert(name)
+#ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_gv_fullname(pTHX_ SV* sv, const GV* gv);
 #define PERL_ARGS_ASSERT_GV_FULLNAME   \
        assert(sv); assert(gv)
+#endif
 #ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_gv_fullname3(pTHX_ SV* sv, const GV* gv, const 
char* prefix);
 #define PERL_ARGS_ASSERT_GV_FULLNAME3  \
@@ -1365,7 +1377,9 @@ PERL_CALLCONV void        Perl_init_constants(pTHX);
 PERL_CALLCONV void     Perl_init_dbargs(pTHX);
 PERL_CALLCONV void     Perl_init_debugger(pTHX);
 PERL_CALLCONV int      Perl_init_i18nl10n(pTHX_ int printwarn);
+#ifndef NO_MATHOMS
 PERL_CALLCONV int      Perl_init_i18nl14n(pTHX_ int printwarn);
+#endif
 PERL_CALLCONV void     Perl_init_named_cv(pTHX_ CV *cv, OP *nameop);
 #define PERL_ARGS_ASSERT_INIT_NAMED_CV \
        assert(cv); assert(nameop)
@@ -1388,17 +1402,21 @@ PERL_CALLCONV OP*       Perl_invert(pTHX_ OP* cmd)
 PERL_CALLCONV bool     Perl_io_close(pTHX_ IO* io, GV *gv, bool not_implicit, 
bool warn_on_fail);
 #define PERL_ARGS_ASSERT_IO_CLOSE      \
        assert(io)
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_isALNUM_lazy(pTHX_ const char* p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ISALNUM_LAZY  \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_isIDFIRST_lazy(pTHX_ const char* p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_ISIDFIRST_LAZY        \
        assert(p)
+#endif
 
 /* PERL_CALLCONV bool  Perl_is_ascii_string(const U8* const s, STRLEN len)
                        __attribute__warn_unused_result__
@@ -1436,187 +1454,263 @@ PERL_STATIC_INLINE bool       
S_is_strict_utf8_string_loclen(const U8 *s, STRLEN len,
 #define PERL_ARGS_ASSERT_IS_STRICT_UTF8_STRING_LOCLEN  \
        assert(s)
 #endif
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_alnum(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_alnum_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_alnumc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_alnumc_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_alpha(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_alpha_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_ascii(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_ascii_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_blank(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_blank_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_cntrl(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_cntrl_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_digit(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_digit_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_graph(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_graph_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_idfirst(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_idfirst_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_lower(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_lower_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_print(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_print_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_punct(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_punct_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_space(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_space_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_upper(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_upper_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_xdigit(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_uni_xdigit_lc(pTHX_ UV c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__
                        __attribute__pure__;
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_alnum(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_ALNUM \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_alnumc(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_ALNUMC        \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_alpha(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_ALPHA \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_ascii(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_ASCII \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_blank(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_BLANK \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV STRLEN   Perl_is_utf8_char(const U8 *s)
                        __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_IS_UTF8_CHAR  \
        assert(s)
+#endif
 
 #ifndef NO_MATHOMS
 PERL_CALLCONV STRLEN   Perl_is_utf8_char_buf(const U8 *buf, const U8 *buf_end);
 #define PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF      \
        assert(buf); assert(buf_end)
 #endif
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_cntrl(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_CNTRL \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_digit(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_DIGIT \
        assert(p)
+#endif
 
 /* PERL_CALLCONV bool  is_utf8_fixed_width_buf_flags(const U8 * const s, 
STRLEN len, const U32 flags); */
 /* PERL_CALLCONV bool  is_utf8_fixed_width_buf_loc_flags(const U8 * const s, 
STRLEN len, const U8 **ep, const U32 flags); */
@@ -1625,23 +1719,29 @@ PERL_STATIC_INLINE bool 
S_is_utf8_fixed_width_buf_loclen_flags(const U8 * const
 #define PERL_ARGS_ASSERT_IS_UTF8_FIXED_WIDTH_BUF_LOCLEN_FLAGS  \
        assert(s)
 #endif
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_graph(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_GRAPH \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_idcont(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_IDCONT        \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_idfirst(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_IDFIRST       \
        assert(p)
+#endif
 
 /* PERL_CALLCONV bool  is_utf8_invariant_string(const U8* const s, STRLEN len)
                        __attribute__warn_unused_result__; */
@@ -1653,53 +1753,69 @@ PERL_STATIC_INLINE bool 
S_is_utf8_invariant_string_loc(const U8* const s, STRLEN
        assert(s)
 #endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_lower(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_LOWER \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_mark(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_MARK  \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_perl_space(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE    \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_perl_word(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD     \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_posix_digit(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT   \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_print(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_PRINT \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_punct(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_PUNCT \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_space(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_SPACE \
        assert(p)
+#endif
 
 /* PERL_CALLCONV bool  Perl_is_utf8_string(const U8 *s, STRLEN len)
                        __attribute__warn_unused_result__; */
@@ -1727,11 +1843,13 @@ PERL_STATIC_INLINE bool 
S_is_utf8_string_loclen_flags(const U8 *s, STRLEN len, c
 #define PERL_ARGS_ASSERT_IS_UTF8_STRING_LOCLEN_FLAGS   \
        assert(s)
 #endif
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_upper(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_UPPER \
        assert(p)
+#endif
 
 /* PERL_CALLCONV bool  is_utf8_valid_partial_char(const U8 * const s, const U8 
* const e)
                        __attribute__warn_unused_result__
@@ -1744,23 +1862,29 @@ PERL_STATIC_INLINE bool 
S_is_utf8_valid_partial_char_flags(const U8 * const s, c
        assert(s); assert(e)
 #endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_xdigit(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_XDIGIT        \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_xidcont(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_XIDCONT       \
        assert(p)
+#endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV bool     Perl_is_utf8_xidfirst(pTHX_ const U8 *p)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
 #define PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST      \
        assert(p)
+#endif
 
 PERL_CALLCONV bool     Perl_isinfnan(NV nv)
                        __attribute__warn_unused_result__
@@ -2461,9 +2585,11 @@ PERL_CALLCONV OP*        Perl_op_unscope(pTHX_ OP* o);
 PERL_CALLCONV void     Perl_optimize_optree(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_OPTIMIZE_OPTREE       \
        assert(o)
+#ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_pack_cat(pTHX_ SV *cat, const char *pat, const 
char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags);
 #define PERL_ARGS_ASSERT_PACK_CAT      \
        assert(cat); assert(pat); assert(patend); assert(beglist); 
assert(endlist); assert(next_in_list)
+#endif
 PERL_CALLCONV void     Perl_package(pTHX_ OP* o);
 #define PERL_ARGS_ASSERT_PACKAGE       \
        assert(o)
@@ -2840,20 +2966,26 @@ PERL_CALLCONV void      Perl_save_item(pTHX_ SV* item);
 PERL_CALLCONV void     Perl_save_iv(pTHX_ IV *ivp);
 #define PERL_ARGS_ASSERT_SAVE_IV       \
        assert(ivp)
+#ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_save_list(pTHX_ SV** sarg, I32 maxsarg);
 #define PERL_ARGS_ASSERT_SAVE_LIST     \
        assert(sarg)
+#endif
+#ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_save_long(pTHX_ long* longp);
 #define PERL_ARGS_ASSERT_SAVE_LONG     \
        assert(longp)
+#endif
 #ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_save_mortalizesv(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_SAVE_MORTALIZESV      \
        assert(sv)
 #endif
+#ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_save_nogv(pTHX_ GV* gv);
 #define PERL_ARGS_ASSERT_SAVE_NOGV     \
        assert(gv)
+#endif
 #ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_save_op(pTHX);
 #endif
@@ -2979,7 +3111,11 @@ PERL_CALLCONV NV Perl_str_to_version(pTHX_ SV *sv)
 PERL_CALLCONV void     Perl_sub_crush_depth(pTHX_ CV* cv);
 #define PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH       \
        assert(cv)
-/* PERL_CALLCONV bool  sv_2bool(pTHX_ SV *const sv); */
+#ifndef NO_MATHOMS
+PERL_CALLCONV bool     Perl_sv_2bool(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_2BOOL      \
+       assert(sv)
+#endif
 PERL_CALLCONV bool     Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags);
 #define PERL_ARGS_ASSERT_SV_2BOOL_FLAGS        \
        assert(sv)
@@ -3169,7 +3305,9 @@ PERL_CALLCONV bool        Perl_sv_does_sv(pTHX_ SV* sv, 
SV* namesv, U32 flags)
        assert(sv); assert(namesv)
 
 PERL_CALLCONV void     Perl_sv_dump(pTHX_ SV* sv);
-/* PERL_CALLCONV I32   sv_eq(pTHX_ SV* sv1, SV* sv2); */
+#ifndef NO_MATHOMS
+PERL_CALLCONV I32      Perl_sv_eq(pTHX_ SV* sv1, SV* sv2);
+#endif
 PERL_CALLCONV I32      Perl_sv_eq_flags(pTHX_ SV* sv1, SV* sv2, const U32 
flags);
 #ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_sv_force_normal(pTHX_ SV *sv);
@@ -3207,9 +3345,11 @@ PERL_CALLCONV int        Perl_sv_isa(pTHX_ SV* sv, const 
char *const name);
 #define PERL_ARGS_ASSERT_SV_ISA        \
        assert(name)
 PERL_CALLCONV int      Perl_sv_isobject(pTHX_ SV* sv);
+#ifndef NO_MATHOMS
 PERL_CALLCONV IV       Perl_sv_iv(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_SV_IV \
        assert(sv)
+#endif
 PERL_CALLCONV STRLEN   Perl_sv_len(pTHX_ SV *const sv);
 PERL_CALLCONV STRLEN   Perl_sv_len_utf8(pTHX_ SV *const sv);
 PERL_CALLCONV STRLEN   Perl_sv_len_utf8_nomg(pTHX_ SV *const sv);
@@ -3243,9 +3383,11 @@ PERL_CALLCONV void       Perl_sv_nosharing(pTHX_ SV *sv);
 #ifndef NO_MATHOMS
 PERL_CALLCONV void     Perl_sv_nounlocking(pTHX_ SV *sv);
 #endif
+#ifndef NO_MATHOMS
 PERL_CALLCONV NV       Perl_sv_nv(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_SV_NV \
        assert(sv)
+#endif
 #ifndef PERL_NO_INLINE_FUNCTIONS
 PERL_STATIC_INLINE bool        S_sv_only_taint_gmagic(SV *sv);
 #define PERL_ARGS_ASSERT_SV_ONLY_TAINT_GMAGIC  \
@@ -3278,15 +3420,19 @@ PERL_CALLCONV char*     Perl_sv_pvbyte(pTHX_ SV *sv)
        assert(sv)
 #endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV char*    Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp);
 #define PERL_ARGS_ASSERT_SV_PVBYTEN    \
        assert(sv); assert(lp)
+#endif
 PERL_CALLCONV char*    Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const 
lp);
 #define PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE      \
        assert(sv)
+#ifndef NO_MATHOMS
 PERL_CALLCONV char*    Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp);
 #define PERL_ARGS_ASSERT_SV_PVN        \
        assert(sv); assert(lp)
+#endif
 #ifndef NO_MATHOMS
 PERL_CALLCONV char*    Perl_sv_pvn_force(pTHX_ SV* sv, STRLEN* lp);
 #define PERL_ARGS_ASSERT_SV_PVN_FORCE  \
@@ -3295,9 +3441,11 @@ PERL_CALLCONV char*      Perl_sv_pvn_force(pTHX_ SV* sv, 
STRLEN* lp);
 PERL_CALLCONV char*    Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN 
*const lp, const I32 flags);
 #define PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS    \
        assert(sv)
+#ifndef NO_MATHOMS
 PERL_CALLCONV char*    Perl_sv_pvn_nomg(pTHX_ SV* sv, STRLEN* lp);
 #define PERL_ARGS_ASSERT_SV_PVN_NOMG   \
        assert(sv)
+#endif
 #ifndef NO_MATHOMS
 PERL_CALLCONV char*    Perl_sv_pvutf8(pTHX_ SV *sv)
                        __attribute__warn_unused_result__;
@@ -3305,9 +3453,11 @@ PERL_CALLCONV char*      Perl_sv_pvutf8(pTHX_ SV *sv)
        assert(sv)
 #endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV char*    Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp);
 #define PERL_ARGS_ASSERT_SV_PVUTF8N    \
        assert(sv); assert(lp)
+#endif
 PERL_CALLCONV char*    Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const 
lp);
 #define PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE      \
        assert(sv)
@@ -3490,9 +3640,11 @@ PERL_CALLCONV STRLEN     
Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I
 #define PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW    \
        assert(sv)
 /* PERL_CALLCONV STRLEN        sv_utf8_upgrade_nomg(pTHX_ SV *sv); */
+#ifndef NO_MATHOMS
 PERL_CALLCONV UV       Perl_sv_uv(pTHX_ SV* sv);
 #define PERL_ARGS_ASSERT_SV_UV \
        assert(sv)
+#endif
 PERL_CALLCONV void     Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const 
pat, va_list *const args);
 #define PERL_ARGS_ASSERT_SV_VCATPVF    \
        assert(sv); assert(pat)
@@ -3545,23 +3697,29 @@ PERL_CALLCONV SSize_t   Perl_tmps_grow_p(pTHX_ SSize_t 
ix);
 PERL_CALLCONV UV       Perl_to_uni_lower(pTHX_ UV c, U8 *p, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_TO_UNI_LOWER  \
        assert(p); assert(lenp)
+#ifndef NO_MATHOMS
 PERL_CALLCONV U32      Perl_to_uni_lower_lc(pTHX_ U32 c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
 PERL_CALLCONV UV       Perl_to_uni_title(pTHX_ UV c, U8 *p, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_TO_UNI_TITLE  \
        assert(p); assert(lenp)
+#ifndef NO_MATHOMS
 PERL_CALLCONV U32      Perl_to_uni_title_lc(pTHX_ U32 c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
 PERL_CALLCONV UV       Perl_to_uni_upper(pTHX_ UV c, U8 *p, STRLEN *lenp);
 #define PERL_ARGS_ASSERT_TO_UNI_UPPER  \
        assert(p); assert(lenp)
+#ifndef NO_MATHOMS
 PERL_CALLCONV U32      Perl_to_uni_upper_lc(pTHX_ U32 c)
                        __attribute__deprecated__
                        __attribute__warn_unused_result__;
+#endif
 
 #ifndef NO_MATHOMS
 PERL_CALLCONV UV       Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN 
*lenp)
@@ -3593,9 +3751,11 @@ PERL_CALLCONV UV Perl_to_utf8_upper(pTHX_ const U8 *p, 
U8* ustrp, STRLEN *lenp)
 
 PERL_CALLCONV bool     Perl_try_amagic_bin(pTHX_ int method, int flags);
 PERL_CALLCONV bool     Perl_try_amagic_un(pTHX_ int method, int flags);
+#ifndef NO_MATHOMS
 PERL_CALLCONV SSize_t  Perl_unpack_str(pTHX_ const char *pat, const char 
*patend, const char *s, const char *strbeg, const char *strend, char **new_s, 
I32 ocnt, U32 flags);
 #define PERL_ARGS_ASSERT_UNPACK_STR    \
        assert(pat); assert(patend); assert(s); assert(strend)
+#endif
 PERL_CALLCONV SSize_t  Perl_unpackstring(pTHX_ const char *pat, const char 
*patend, const char *s, const char *strend, U32 flags);
 #define PERL_ARGS_ASSERT_UNPACKSTRING  \
        assert(pat); assert(patend); assert(s); assert(strend)
@@ -3661,10 +3821,12 @@ PERL_CALLCONV UV        Perl_utf8_to_uvchr(pTHX_ const 
U8 *s, STRLEN *retlen)
 PERL_CALLCONV UV       Perl_utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 
*send, STRLEN *retlen);
 #define PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF     \
        assert(s); assert(send)
+#ifndef NO_MATHOMS
 PERL_CALLCONV UV       Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
                        __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_UTF8_TO_UVUNI \
        assert(s)
+#endif
 
 PERL_CALLCONV UV       Perl_utf8_to_uvuni_buf(pTHX_ const U8 *s, const U8 
*send, STRLEN *retlen)
                        __attribute__deprecated__;
@@ -3708,10 +3870,12 @@ PERL_STATIC_INLINE UV   Perl_valid_utf8_to_uvchr(const 
U8 *s, STRLEN *retlen)
        assert(s)
 #endif
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV UV       Perl_valid_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN 
*retlen)
                        __attribute__deprecated__;
 #define PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI   \
        assert(s)
+#endif
 
 PERL_CALLCONV bool     Perl_validate_proto(pTHX_ SV *name, SV *proto, bool 
warn, bool curstash);
 #define PERL_ARGS_ASSERT_VALIDATE_PROTO        \
@@ -4476,10 +4640,12 @@ PERL_CALLCONV char*     Perl_form_nocontext(const char* 
pat, ...)
 #define PERL_ARGS_ASSERT_FORM_NOCONTEXT        \
        assert(pat)
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV int      Perl_fprintf_nocontext(PerlIO *stream, const char 
*format, ...)
                        __attribute__format__(__printf__,2,3);
 #define PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT     \
        assert(stream); assert(format)
+#endif
 
 PERL_CALLCONV void     Perl_load_module_nocontext(U32 flags, SV* name, SV* 
ver, ...);
 #define PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT \
@@ -4494,10 +4660,12 @@ PERL_CALLCONV SV*       Perl_newSVpvf_nocontext(const 
char *const pat, ...)
 #define PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT    \
        assert(pat)
 
+#ifndef NO_MATHOMS
 PERL_CALLCONV int      Perl_printf_nocontext(const char *format, ...)
                        __attribute__format__(__printf__,1,2);
 #define PERL_ARGS_ASSERT_PRINTF_NOCONTEXT      \
        assert(format)
+#endif
 
 PERL_CALLCONV void     Perl_sv_catpvf_mg_nocontext(SV *const sv, const char 
*const pat, ...)
                        __attribute__format__(__printf__,2,3);
@@ -6232,7 +6400,11 @@ PERL_CALLCONV char*      Perl_mem_collxfrm(pTHX_ const 
char* input_string, STRLEN len
 #define PERL_ARGS_ASSERT_MEM_COLLXFRM  \
        assert(input_string); assert(xlen)
 #endif
-/* PERL_CALLCONV char* sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp); */
+#ifndef NO_MATHOMS
+PERL_CALLCONV char*    Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp);
+#define PERL_ARGS_ASSERT_SV_COLLXFRM   \
+       assert(sv); assert(nxp)
+#endif
 PERL_CALLCONV char*    Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN 
*const nxp, I32 const flags);
 #define PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS     \
        assert(sv); assert(nxp)
diff --git a/utf8.c b/utf8.c
index f7b96384d5..e3e17ff102 100644
--- a/utf8.c
+++ b/utf8.c
@@ -5850,6 +5850,36 @@ Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
     return uvoffuni_to_utf8_flags(d, uv, flags);
 }
 
+/*
+=for apidoc utf8_to_uvchr
+
+Returns the native code point of the first character in the string C<s>
+which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
+length, in bytes, of that character.
+
+Some, but not all, UTF-8 malformations are detected, and in fact, some
+malformed input could cause reading beyond the end of the input buffer, which
+is why this function is deprecated.  Use L</utf8_to_uvchr_buf> instead.
+
+If C<s> points to one of the detected malformations, and UTF8 warnings are
+enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
+C<NULL>) to -1.  If those warnings are off, the computed value if well-defined 
(or
+the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
+is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
+next possible position in C<s> that could begin a non-malformed character.
+See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is 
returned.
+
+=cut
+*/
+
+UV
+Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
+{
+    PERL_ARGS_ASSERT_UTF8_TO_UVCHR;
+
+    return utf8_to_uvchr_buf(s, s + UTF8_MAXBYTES, retlen);
+}
+
 /*
  * ex: set ts=8 sts=4 sw=4 et:
  */

-- 
Perl5 Master Repository

Reply via email to