summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2019-04-20 00:38:41 -0600
committerKarl Williamson <khw@cpan.org>2019-04-20 00:47:52 -0600
commit7a9a905417ad4070ad5d9da33dbf3dd1a6bef7b7 (patch)
tree4e3647620d65c09fab96ca6fbe1b8221f39f5714
parentb2b47eff19267d71facbe007ec203dfeeee4a5c5 (diff)
parent39d7245cccf52966c3621db75e39bbc5ac698c28 (diff)
downloadperl-7a9a905417ad4070ad5d9da33dbf3dd1a6bef7b7.tar.gz
Merge branch 'ppport' into blead
This branch makes Devel::PPPort ready for 5.31 It provides support for a deprecated function, so that it can be removed from blead, and makes the replacement version significantly less likely to read off the end of a buffer (that prospect is why the function is deprecated). It provides support for utf8_to_uvchr_buf(), which is the preferred method for translating from UTF-8, back to 5.6 if we could actually test that far. And it adds a bunch of changes that have been in the pipeline, sometimes for years. The Changes file says: 3.46 - 2019-04-20 * Fix the isFOO character type classification macros to work properly on all versions, as follows: * Fixed isALNUM, isALPHA, isDIGIT, isIDFIRST, isLOWER, and isUPPER on very early perls to not be locale-dependent * Fixed isASCII on early perls to work with signed char arguments * Fixed isCNTRL on early perls to know that DEL is a control * Fixed isSPACE on perls before 5.20 to know that VERTICAL TAB is a space * Added isALPHANUMERIC, synonym for isALNUMC * Added isIDCONT, to match legal non-initial characters in an identifier * Added isOCTAL, to match [0-7] * Added isWORDCHAR, synonym for isALNUM * Make all the character classification isFOO macros work on EBCDIC platforms on all versions * Added isFOO_A synonyms for all character classification isFOO macros * Provide LIKELY/UNLIKELY branch prediction * Provide av_tindex/av_top_index * Provide __ASSERT_ for assertions inside macros * Provide UTF8_SAFE_SKIP * Provide my_strnlen() * Provide utf8_to_uvchr_buf() * Replace utf8_to_uvchr() with a safer version A PR has been issued, and Travis tests green back to 5.10
-rw-r--r--dist/Devel-PPPort/Changes27
-rw-r--r--dist/Devel-PPPort/HACKERS6
-rw-r--r--dist/Devel-PPPort/parts/apidoc.fnc595
-rw-r--r--dist/Devel-PPPort/parts/embed.fnc1326
-rw-r--r--dist/Devel-PPPort/parts/inc/misc681
-rw-r--r--dist/Devel-PPPort/parts/inc/pv_tools10
-rw-r--r--dist/Devel-PPPort/parts/inc/uv120
-rw-r--r--dist/Devel-PPPort/t/misc.t133
-rw-r--r--dist/Devel-PPPort/t/uv.t19
9 files changed, 2072 insertions, 845 deletions
diff --git a/dist/Devel-PPPort/Changes b/dist/Devel-PPPort/Changes
index e7a57b277e..3c2daa3869 100644
--- a/dist/Devel-PPPort/Changes
+++ b/dist/Devel-PPPort/Changes
@@ -1,3 +1,30 @@
+ 3.46 - 2019-04-20
+
+ * Fix the isFOO character type classification macros to work properly on
+ all versions, as follows:
+ * Fixed isALNUM, isALPHA, isDIGIT, isIDFIRST, isLOWER, and isUPPER on
+ very early perls to not be locale-dependent
+ * Fixed isASCII on early perls to work with signed char arguments
+ * Fixed isCNTRL on early perls to know that DEL is a control
+ * Fixed isSPACE on perls before 5.20 to know that VERTICAL TAB is a
+ space
+ * Added isALPHANUMERIC, synonym for isALNUMC
+ * Added isIDCONT, to match legal non-initial characters in an
+ identifier
+ * Added isOCTAL, to match [0-7]
+ * Added isWORDCHAR, synonym for isALNUM
+ * Make all the character classification isFOO macros work on EBCDIC
+ platforms on all versions
+ * Added isFOO_A synonyms for all character classification isFOO
+ macros
+ * Provide LIKELY/UNLIKELY branch prediction
+ * Provide av_tindex/av_top_index
+ * Provide __ASSERT_ for assertions inside macros
+ * Provide UTF8_SAFE_SKIP
+ * Provide my_strnlen()
+ * Provide utf8_to_uvchr_buf()
+ * Replace utf8_to_uvchr() with a safer version
+
3.45 - 2019-03-19
* Restore missing unit tests from the previous release.
diff --git a/dist/Devel-PPPort/HACKERS b/dist/Devel-PPPort/HACKERS
index 285a2e1241..8cd57a95d8 100644
--- a/dist/Devel-PPPort/HACKERS
+++ b/dist/Devel-PPPort/HACKERS
@@ -239,8 +239,10 @@ span multiple lines, like in
STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
(((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
-This usually makes the code more compact and readable. And you
-only have to add C<__UNDEFINED__> to the C<=provided> section.
+This usually makes the code more compact and readable. And you only have to add
+the line C<__UNDEFINED__> to the C<=provides> section to get all macros
+implemented this way to be imported into this section, so they all get
+documented as being provided.
Version checking can be tricky if you want to do it correct.
You can use
diff --git a/dist/Devel-PPPort/parts/apidoc.fnc b/dist/Devel-PPPort/parts/apidoc.fnc
index fe153541b2..1149c06b27 100644
--- a/dist/Devel-PPPort/parts/apidoc.fnc
+++ b/dist/Devel-PPPort/parts/apidoc.fnc
@@ -13,97 +13,139 @@
: source code, but are not contained in F<embed.fnc>.
:
-AmUx|Perl_keyword_plugin_t|PL_keyword_plugin
-AmU|Perl_check_t *|PL_check
-AmU|yy_parser *|PL_parser
-AmU||G_ARRAY
-AmU||G_DISCARD
-AmU||G_EVAL
-AmU||G_NOARGS
-AmU||G_SCALAR
-AmU||G_VOID
-AmU||HEf_SVKEY
-AmU||MARK
-AmU||Nullav
-AmU||Nullch
-AmU||Nullcv
-AmU||Nullhv
-AmU||Nullsv
-AmU||ORIGMARK
-AmU||SP
-AmU||SVt_INVLIST
-AmU||SVt_IV
-AmU||SVt_NULL
-AmU||SVt_NV
-AmU||SVt_PV
-AmU||SVt_PVAV
-AmU||SVt_PVCV
-AmU||SVt_PVFM
-AmU||SVt_PVGV
-AmU||SVt_PVHV
-AmU||SVt_PVIO
-AmU||SVt_PVIV
-AmU||SVt_PVLV
-AmU||SVt_PVMG
-AmU||SVt_PVNV
-AmU||SVt_REGEXP
-AmU||UNDERBAR
-AmU||XCPT_CATCH
-AmU||XCPT_TRY_END
-AmU||XCPT_TRY_START
-AmU||XS
-AmU||XS_EXTERNAL
-AmU||XS_INTERNAL
-AmU||XS_VERSION
-AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
-AmU||svtype
-Ama|SV*|newSVpvs_flags|const char* s|U32 flags
-Ama|SV*|newSVpvs_share|const char* s
-Ama|SV*|newSVpvs|const char* s
-Ama|char*|savepvs|const char* s
-Ama|char*|savesharedpvs|const char* s
-Amn|(whatever)|RETVAL
-Amn|(whatever)|THIS
+Ama|char*|savepvs|"literal string" s
+Ama|char*|savesharedpvs|"literal string" s
+Ama|SV*|newSVpvs_flags|"literal string" s|U32 flags
+Ama|SV*|newSVpvs|"literal string" s
+Ama|SV*|newSVpvs_share|"literal string" s
+Am|AV*|GvAV|GV* gv
+Am|bool|ckWARN2_d|U32 w1|U32 w2
+Am|bool|ckWARN2|U32 w1|U32 w2
+Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
+Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3
+Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
+Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
+Am|bool|ckWARN_d|U32 w
+Am|bool|ckWARN|U32 w
+Am|bool|DO_UTF8|SV* sv
+Am|bool|isALPHA|char ch
+Am|bool|isALPHANUMERIC|char ch
+Am|bool|isASCII|char ch
+Am|bool|isBLANK|char ch
+Am|bool|isCNTRL|char ch
+Am|bool|isDIGIT|char ch
+Am|bool|isGRAPH|char ch
+Am|bool|isIDCONT|char ch
+Am|bool|isIDFIRST|char ch
+Am|bool|isLOWER|char ch
+Am|bool|isOCTAL|char ch
+Am|bool|isPRINT|char ch
+Am|bool|isPSXSPC|char ch
+Am|bool|isPUNCT|char ch
+Am|bool|isSPACE|char ch
+Am|bool|isUPPER|char ch
+Am|bool|isWORDCHAR|char ch
+Am|bool|isXDIGIT|char ch
+Am|bool|memEQ|char* s1|char* s2|STRLEN len
+Am|bool|memNE|char* s1|char* s2|STRLEN len
+Am|bool|OpHAS_SIBLING|OP *o
+Am|bool|OP_TYPE_IS|OP *o|Optype type
+Am|bool|OP_TYPE_IS_OR_WAS|OP *o|Optype type
+Am|bool|strEQ|char* s1|char* s2
+Am|bool|strGE|char* s1|char* s2
+Am|bool|strGT|char* s1|char* s2
+Am|bool|strLE|char* s1|char* s2
+Am|bool|strLT|char* s1|char* s2
+Am|bool|strNE|char* s1|char* s2
+Am|bool|strnEQ|char* s1|char* s2|STRLEN len
+Am|bool|strnNE|char* s1|char* s2|STRLEN len
+Am|bool|SvIOK_notUV|SV* sv
+Am|bool|SvIOK_UV|SV* sv
+Am|bool|SvIsCOW_shared_hash|SV* sv
+Am|bool|SvRXOK|SV* sv
+Am|bool|SvTAINTED|SV* sv
+Am|bool|SvTRUE_nomg|SV* sv
+Am|bool|SvTRUE|SV* sv
+Am|bool|SvUOK|SV* sv
+Am|bool|SvVOK|SV* sv
+Am|bool|UTF8_IS_INVARIANT|char c
+Am|bool|UTF8_IS_NONCHAR|const U8 *s|const U8 *e
+Am|bool|UTF8_IS_SUPER|const U8 *s|const U8 *e
+Am|bool|UTF8_IS_SURROGATE|const U8 *s|const U8 *e
+Am|bool|UVCHR_IS_INVARIANT|UV cp
+Am|char*|HePV|HE* he|STRLEN len
+Am|char*|HvENAME|HV* stash
+Am|char*|HvNAME|HV* stash
+Am|char*|SvEND|SV* sv
+Am|char *|SvGROW|SV* sv|STRLEN len
+Am|char*|SvPVbyte_force|SV* sv|STRLEN len
+Am|char*|SvPVbyte_nolen|SV* sv
+Am|char*|SvPVbyte|SV* sv|STRLEN len
+Am|char*|SvPVbytex_force|SV* sv|STRLEN len
+Am|char*|SvPVbytex|SV* sv|STRLEN len
+Am|char *|SvPVCLEAR|SV* sv
+Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
+Am|char*|SvPV_force|SV* sv|STRLEN len
+Am|char*|SvPV_nolen|SV* sv
+Am|char*|SvPV_nomg_nolen|SV* sv
+Am|char*|SvPV_nomg|SV* sv|STRLEN len
+Am|char*|SvPV|SV* sv|STRLEN len
+Am|char*|SvPVutf8_force|SV* sv|STRLEN len
+Am|char*|SvPVutf8_nolen|SV* sv
+Am|char*|SvPVutf8|SV* sv|STRLEN len
+Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
+Am|char*|SvPVutf8x|SV* sv|STRLEN len
+Am|char*|SvPVX|SV* sv
+Am|char*|SvPVx|SV* sv|STRLEN len
+Am|const char *|OP_DESC|OP *o
+Am|const char *|OP_NAME|OP *o
+Am|CV*|GvCV|GV* gv
+Am|HV *|cop_hints_2hv|const COP *cop|U32 flags
+Am|HV*|CvSTASH|CV* cv
+Am|HV*|GvHV|GV* gv
+Am|HV*|gv_stashpvs|"literal string" name|I32 create
+Am|HV*|SvSTASH|SV* sv
+Am|int|AvFILL|AV* av
+Am|IV|SvIV_nomg|SV* sv
+Am|IV|SvIV|SV* sv
+Am|IV|SvIVx|SV* sv
+Am|IV|SvIVX|SV* sv
+Amn|char*|CLASS
+Amn|char*|POPp
+Amn|char*|POPpbytex
+Amn|char*|POPpx
Amn|HV*|PL_modglobal
Amn|I32|ax
Amn|I32|items
Amn|I32|ix
Amn|IV|POPi
+Amn|long|POPl
+Amn|long|POPul
Amn|NV|POPn
+Amn|peep_t|PL_peepp
+Amn|peep_t|PL_rpeepp
Amn|Perl_ophook_t|PL_opfreehook
Amn|STRLEN|PL_na
-Amn|SV*|POPs
Amn|SV|PL_sv_no
Amn|SV|PL_sv_undef
Amn|SV|PL_sv_yes
+Amn|SV|PL_sv_zero
+Amn|SV*|POPs
Amn|U32|GIMME
Amn|U32|GIMME_V
Amn|UV|POPu
-Amn|char*|CLASS
-Amn|char*|POPp
-Amn|char*|POPpbytex
-Amn|char*|POPpx
-Amn|long|POPl
-Amn|long|POPul
-Amn|peep_t|PL_peepp
-Amn|peep_t|PL_rpeepp
Amn|void|DECLARATION_FOR_LC_NUMERIC_MANIPULATION
-Ams||ENTER
-Ams||FREETMPS
-Ams||LEAVE
-Ams||MULTICALL
-Ams||POP_MULTICALL
-Ams||PUSH_MULTICALL
-Ams||PUTBACK
-Ams||SAVETMPS
-Ams||SPAGAIN
-Ams||XCPT_RETHROW
-Ams||XSRETURN_EMPTY
-Ams||XSRETURN_NO
-Ams||XSRETURN_UNDEF
-Ams||XSRETURN_YES
-Ams||XS_APIVERSION_BOOTCHECK
-Ams||XS_VERSION_BOOTCHECK
+Am|NV|SvNV_nomg|SV* sv
+Am|NV|SvNV|SV* sv
+Am|NV|SvNVx|SV* sv
+Am|NV|SvNVX|SV* sv
+Amn|(whatever)|RETVAL
+Amn|(whatever)|THIS
+Am|OP*|LINKLIST|OP *o
+Am|OP*|OpSIBLING|OP *o
+Am|PADOFFSET|pad_add_name_pvs|"literal string" name|U32 flags|HV *typestash|HV *ourstash
+Am|PADOFFSET|pad_findmy_pvs|"literal string" name|U32 flags
+Am|REGEXP *|SvRX|SV *sv
Ams||dAX
Ams||dAXMARK
Ams||dITEMS
@@ -115,102 +157,55 @@ Ams||dUNDERBAR
Ams||dXCPT
Ams||dXSARGS
Ams||dXSI32
-AmxU|PAD *|PL_comppad
-AmxU|PADNAMELIST *|PL_comppad_name
-AmxU|SV **|PL_curpad
-AmxU|SV *|PL_parser-E<gt>linestr
-AmxU|char *|PL_parser-E<gt>bufend
-AmxU|char *|PL_parser-E<gt>bufptr
-AmxU|char *|PL_parser-E<gt>linestart
-Amx|COPHH *|cophh_copy|COPHH *cophh
-Amx|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
-Amx|COPHH *|cophh_delete_pvs|const COPHH *cophh|const char *key|U32 flags
-Amx|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
-Amx|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
-Amx|COPHH *|cophh_new_empty
-Amx|COPHH *|cophh_store_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags
-Amx|COPHH *|cophh_store_pvs|const COPHH *cophh|const char *key|SV *value|U32 flags
-Amx|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
-Amx|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
-Amx|HV *|cophh_2hv|const COPHH *cophh|U32 flags
-Amx|PAD **|PadlistARRAY|PADLIST padlist
-Amx|PADLIST *|CvPADLIST|CV *cv
-Amx|PADNAME **|PadlistNAMESARRAY|PADLIST padlist
-Amx|PADNAME **|PadnamelistARRAY|PADNAMELIST pnl
-Amx|PADNAMELIST *|PadlistNAMES|PADLIST padlist
-Amx|SSize_t|PadMAX|PAD pad
-Amx|SSize_t|PadlistMAX|PADLIST padlist
-Amx|SSize_t|PadlistNAMESMAX|PADLIST padlist
-Amx|SSize_t|PadnameREFCNT|PADNAME pn
-Amx|SSize_t|PadnamelistMAX|PADNAMELIST pnl
-Amx|SSize_t|PadnamelistREFCNT|PADNAMELIST pnl
-Amx|STRLEN|PadnameLEN|PADNAME pn
-Amx|SV **|PadARRAY|PAD pad
-Amx|SV *|PadnameSV|PADNAME pn
-Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
-Amx|SV *|cophh_fetch_pvs|const COPHH *cophh|const char *key|U32 flags
-Amx|SV *|cophh_fetch_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
-Amx|SV *|cophh_fetch_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
-Amx|SV*|newSVpadname|PADNAME *pn
-Amx|U32|PadlistREFCNT|PADLIST padlist
-Amx|bool|PadnameUTF8|PADNAME pn
-Amx|char *|PadnamePV|PADNAME pn
-Amx|void|BhkDISABLE|BHK *hk|which
-Amx|void|BhkENABLE|BHK *hk|which
-Amx|void|BhkENTRY_set|BHK *hk|which|void *ptr
-Amx|void|PadnameREFCNT_dec|PADNAME pn
-Amx|void|PadnamelistREFCNT_dec|PADNAMELIST pnl
-Amx|void|cophh_free|COPHH *cophh
-Amx|void|lex_stuff_pvs|const char *pv|U32 flags
-Am|AV*|GvAV|GV* gv
-Am|CV*|GvCV|GV* gv
-Am|HV *|cop_hints_2hv|const COP *cop|U32 flags
-Am|HV*|CvSTASH|CV* cv
-Am|HV*|GvHV|GV* gv
-Am|HV*|SvSTASH|SV* sv
-Am|HV*|gv_stashpvs|const char* name|I32 create
-Am|IV|SvIVX|SV* sv
-Am|IV|SvIV_nomg|SV* sv
-Am|IV|SvIVx|SV* sv
-Am|IV|SvIV|SV* sv
-Am|NV|SvNVX|SV* sv
-Am|NV|SvNV_nomg|SV* sv
-Am|NV|SvNVx|SV* sv
-Am|NV|SvNV|SV* sv
-Am|OP*|LINKLIST|OP *o
-Am|OP*|OpSIBLING|OP *o
-Am|PADOFFSET|pad_add_name_pvs|const char *name|U32 flags|HV *typestash|HV *ourstash
-Am|PADOFFSET|pad_findmy_pvs|const char *name|U32 flags
-Am|REGEXP *|SvRX|SV *sv
+Ams||ENTER
+Ams||ENTER_with_name(name)
+Ams||FREETMPS
+Ams||LEAVE
+Ams||LEAVE_with_name(name)
+Ams||MULTICALL
+Ams||POP_MULTICALL
+Ams||PUSH_MULTICALL
+Ams||PUTBACK
+Ams||SAVETMPS
+Ams||SPAGAIN
Am|STRLEN|HeKLEN|HE* he
Am|STRLEN|HvENAMELEN|HV *stash
Am|STRLEN|HvNAMELEN|HV *stash
+Am|STRLEN|isUTF8_CHAR_flags|const U8 *s|const U8 *e| const U32 flags
Am|STRLEN|SvCUR|SV* sv
Am|STRLEN|SvLEN|SV* sv
+Am|STRLEN|UTF8_SAFE_SKIP|char* s|char* e
Am|STRLEN|UTF8SKIP|char* s
Am|STRLEN|UVCHR_SKIP|UV cp
-Am|STRLEN|isUTF8_CHAR|const U8 *s|const U8 *e
Am|SV *|boolSV|bool b
-Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
-Am|SV *|cop_hints_fetch_pvs|const COP *cop|const char *key|U32 flags
Am|SV *|cop_hints_fetch_pv|const COP *cop|const char *key|U32 hash|U32 flags
+Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+Am|SV *|cop_hints_fetch_pvs|const COP *cop|"literal string" key|U32 flags
Am|SV *|cop_hints_fetch_sv|const COP *cop|SV *key|U32 hash|U32 flags
-Am|SV *|sv_setref_pvs|const char* s
-Am|SV**|hv_fetchs|HV* tb|const char* key|I32 lval
-Am|SV**|hv_stores|HV* tb|const char* key|NULLOK SV* val
Am|SV*|GvSV|GV* gv
Am|SV*|HeSVKEY_force|HE* he
-Am|SV*|HeSVKEY_set|HE* he|SV* sv
Am|SV*|HeSVKEY|HE* he
+Am|SV*|HeSVKEY_set|HE* he|SV* sv
Am|SV*|HeVAL|HE* he
+Am|SV**|hv_fetchs|HV* tb|"literal string" key|I32 lval
+Am|SV**|hv_stores|HV* tb|"literal string" key|SV* val
+Am|SV*|newRV_inc|SV* sv
+Am|SV*|newSVpvn_utf8|const char* s|STRLEN len|U32 utf8
Am|SV*|ST|int ix
Am|SV*|SvREFCNT_inc_NN|SV* sv
Am|SV*|SvREFCNT_inc_simple_NN|SV* sv
Am|SV*|SvREFCNT_inc_simple|SV* sv
Am|SV*|SvREFCNT_inc|SV* sv
Am|SV*|SvRV|SV* sv
-Am|SV*|newRV_inc|SV* sv
-Am|SV*|newSVpvn_utf8|NULLOK const char* s|STRLEN len|U32 utf8
+Am|SV *|sv_setref_pvs|"literal string" s
+Am|svtype|SvTYPE|SV* sv
+Ams||XCPT_RETHROW
+Ams||XS_APIVERSION_BOOTCHECK
+Ams||XSRETURN_EMPTY
+Ams||XSRETURN_NO
+Ams||XSRETURN_UNDEF
+Ams||XSRETURN_YES
+Ams||XS_VERSION_BOOTCHECK
Am|U32|HeHASH|HE* he
Am|U32|HeUTF8|HE* he
Am|U32|OP_CLASS|OP *o
@@ -226,6 +221,9 @@ Am|U32|SvOK|SV* sv
Am|U32|SvOOK|SV* sv
Am|U32|SvPOKp|SV* sv
Am|U32|SvPOK|SV* sv
+Am|U32|SvREADONLY_off|SV* sv
+Am|U32|SvREADONLY_on|SV* sv
+Am|U32|SvREADONLY|SV* sv
Am|U32|SvREFCNT|SV* sv
Am|U32|SvROK|SV* sv
Am|U32|SvUTF8|SV* sv
@@ -237,127 +235,125 @@ Am|U8|toLOWER_LC|U8 ch
Am|U8|toLOWER|U8 ch
Am|U8|toTITLE|U8 ch
Am|U8|toUPPER|U8 ch
-Am|UV|SvUVX|SV* sv
+AmU||G_ARRAY
+AmU||G_DISCARD
+AmU||G_EVAL
+AmU||G_NOARGS
+AmU||G_SCALAR
+AmU||G_VOID
+AmU||HEf_SVKEY
+AmU||MARK
+AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
+Am|unsigned char|HvENAMEUTF8|HV *stash
+Am|unsigned char|HvNAMEUTF8|HV *stash
+AmU||Nullav
+AmU||Nullch
+AmU||Nullcv
+AmU||Nullhv
+AmU||Nullsv
+AmU||ORIGMARK
+AmU|Perl_check_t *|PL_check
+AmU|placeholder|BOM_UTF8
+AmU|placeholder|REPLACEMENT_CHARACTER_UTF8
+AmU||SP
+AmU||SVt_INVLIST
+AmU||SVt_IV
+AmU||SVt_NULL
+AmU||SVt_NV
+AmU||SVt_PV
+AmU||SVt_PVAV
+AmU||SVt_PVCV
+AmU||SVt_PVFM
+AmU||SVt_PVGV
+AmU||SVt_PVHV
+AmU||SVt_PVIO
+AmU||SVt_PVIV
+AmU||SVt_PVLV
+AmU||SVt_PVMG
+AmU||SVt_PVNV
+AmU||SVt_REGEXP
+AmU||svtype
+AmU||UNDERBAR
Am|UV|SvUV_nomg|SV* sv
-Am|UV|SvUVx|SV* sv
Am|UV|SvUV|SV* sv
+Am|UV|SvUVx|SV* sv
+Am|UV|SvUVX|SV* sv
+Am|UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
Am|UV|toFOLD_utf8|U8* p|U8* s|STRLEN* lenp
Am|UV|toFOLD_uvchr|UV cp|U8* s|STRLEN* lenp
+Am|UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
Am|UV|toLOWER_utf8|U8* p|U8* s|STRLEN* lenp
Am|UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp
+Am|UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
Am|UV|toTITLE_utf8|U8* p|U8* s|STRLEN* lenp
Am|UV|toTITLE_uvchr|UV cp|U8* s|STRLEN* lenp
+Am|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
Am|UV|toUPPER_utf8|U8* p|U8* s|STRLEN* lenp
Am|UV|toUPPER_uvchr|UV cp|U8* s|STRLEN* lenp
-Am|bool|DO_UTF8|SV* sv
-Am|bool|OP_TYPE_IS_OR_WAS|OP *o|Optype type
-Am|bool|OP_TYPE_IS|OP *o|Optype type
-Am|bool|OpHAS_SIBLING|OP *o
-Am|bool|SvIOK_UV|SV* sv
-Am|bool|SvIOK_notUV|SV* sv
-Am|bool|SvIsCOW_shared_hash|SV* sv
-Am|bool|SvRXOK|SV* sv
-Am|bool|SvTAINTED|SV* sv
-Am|bool|SvTRUE_nomg|SV* sv
-Am|bool|SvTRUE|SV* sv
-Am|bool|SvUOK|SV* sv
-Am|bool|SvVOK|SV* sv
-Am|bool|isALPHANUMERIC|char ch
-Am|bool|isALPHA|char ch
-Am|bool|isASCII|char ch
-Am|bool|isBLANK|char ch
-Am|bool|isCNTRL|char ch
-Am|bool|isDIGIT|char ch
-Am|bool|isGRAPH|char ch
-Am|bool|isIDCONT|char ch
-Am|bool|isIDFIRST|char ch
-Am|bool|isLOWER|char ch
-Am|bool|isOCTAL|char ch
-Am|bool|isPRINT|char ch
-Am|bool|isPSXSPC|char ch
-Am|bool|isPUNCT|char ch
-Am|bool|isSPACE|char ch
-Am|bool|isUPPER|char ch
-Am|bool|isWORDCHAR|char ch
-Am|bool|isXDIGIT|char ch
-Am|bool|memEQ|char* s1|char* s2|STRLEN len
-Am|bool|memNE|char* s1|char* s2|STRLEN len
-Am|bool|strEQ|char* s1|char* s2
-Am|bool|strGE|char* s1|char* s2
-Am|bool|strGT|char* s1|char* s2
-Am|bool|strLE|char* s1|char* s2
-Am|bool|strLT|char* s1|char* s2
-Am|bool|strNE|char* s1|char* s2
-Am|bool|strnEQ|char* s1|char* s2|STRLEN len
-Am|bool|strnNE|char* s1|char* s2|STRLEN len
-Am|char *|SvGROW|SV* sv|STRLEN len
-Am|char*|HePV|HE* he|STRLEN len
-Am|char*|HvENAME|HV* stash
-Am|char*|HvNAME|HV* stash
-Am|char*|SvEND|SV* sv
-Am|char*|SvPVX|SV* sv
-Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
-Am|char*|SvPV_force|SV* sv|STRLEN len
-Am|char*|SvPV_nolen|SV* sv
-Am|char*|SvPV_nomg_nolen|SV* sv
-Am|char*|SvPV_nomg|SV* sv|STRLEN len
-Am|char*|SvPVbyte_force|SV* sv|STRLEN len
-Am|char*|SvPVbyte_nolen|SV* sv
-Am|char*|SvPVbytex_force|SV* sv|STRLEN len
-Am|char*|SvPVbytex|SV* sv|STRLEN len
-Am|char*|SvPVbyte|SV* sv|STRLEN len
-Am|char*|SvPVutf8_force|SV* sv|STRLEN len
-Am|char*|SvPVutf8_nolen|SV* sv
-Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
-Am|char*|SvPVutf8x|SV* sv|STRLEN len
-Am|char*|SvPVutf8|SV* sv|STRLEN len
-Am|char*|SvPVx|SV* sv|STRLEN len
-Am|char*|SvPV|SV* sv|STRLEN len
-Am|const char *|OP_DESC|OP *o
-Am|const char *|OP_NAME|OP *o
-Am|int|AvFILL|AV* av
-Am|svtype|SvTYPE|SV* sv
-Am|unsigned char|HvENAMEUTF8|HV *stash
-Am|unsigned char|HvNAMEUTF8|HV *stash
+AmU||XCPT_CATCH
+AmU||XCPT_TRY_END
+AmU||XCPT_TRY_START
+AmUx|Perl_keyword_plugin_t|PL_keyword_plugin
+AmU||XS
+AmU||XS_EXTERNAL
+AmU||XS_INTERNAL
+AmU||XS_VERSION
+AmU|yy_parser *|PL_parser
Am|void *|CopyD|void* src|void* dest|int nitems|type
-Am|void *|MoveD|void* src|void* dest|int nitems|type
-Am|void *|ZeroD|void* dest|int nitems|type
-Am|void*|HeKEY|HE* he
Am|void|Copy|void* src|void* dest|int nitems|type
Am|void|EXTEND|SP|SSize_t nitems
+Am|void*|HeKEY|HE* he
+Am|void *|MoveD|void* src|void* dest|int nitems|type
Am|void|Move|void* src|void* dest|int nitems|type
+Am|void|mPUSHi|IV iv
+Am|void|mPUSHn|NV nv
+Am|void|mPUSHp|char* str|STRLEN len
+Am|void|mPUSHs|SV* sv
+Am|void|mPUSHu|UV uv
+Am|void|mXPUSHi|IV iv
+Am|void|mXPUSHn|NV nv
+Am|void|mXPUSHp|char* str|STRLEN len
+Am|void|mXPUSHs|SV* sv
+Am|void|mXPUSHu|UV uv
Am|void|Newxc|void* ptr|int nitems|type|cast
-Am|void|Newxz|void* ptr|int nitems|type
Am|void|Newx|void* ptr|int nitems|type
+Am|void|Newxz|void* ptr|int nitems|type
Am|void|OpLASTSIB_set|OP *o|OP *parent
Am|void|OpMAYBESIB_set|OP *o|OP *sib|OP *parent
Am|void|OpMORESIB_set|OP *o|OP *sib
Am|void|PERL_SYS_INIT3|int *argc|char*** argv|char*** env
Am|void|PERL_SYS_INIT|int *argc|char*** argv
Am|void|PERL_SYS_TERM|
-Am|void|PUSHMARK|SP
+Am|void|PoisonFree|void* dest|int nitems|type
+Am|void|PoisonNew|void* dest|int nitems|type
+Am|void|Poison|void* dest|int nitems|type
+Am|void|PoisonWith|void* dest|int nitems|type|U8 byte
Am|void|PUSHi|IV iv
+Am|void|PUSHMARK|SP
Am|void|PUSHmortal
Am|void|PUSHn|NV nv
Am|void|PUSHp|char* str|STRLEN len
Am|void|PUSHs|SV* sv
Am|void|PUSHu|UV uv
-Am|void|PoisonFree|void* dest|int nitems|type
-Am|void|PoisonNew|void* dest|int nitems|type
-Am|void|PoisonWith|void* dest|int nitems|type|U8 byte
-Am|void|Poison|void* dest|int nitems|type
-Am|void|RESTORE_LC_NUMERIC
Am|void|Renewc|void* ptr|int nitems|type|cast
Am|void|Renew|void* ptr|int nitems|type
+Am|void|RESTORE_LC_NUMERIC
+Am|void|Safefree|void* ptr
Am|void|STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
Am|void|STORE_LC_NUMERIC_SET_TO_NEEDED
-Am|void|Safefree|void* ptr
Am|void|StructCopy|type *src|type *dest|type
+Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
+Am|void|sv_catpv_nomg|SV* sv|const char* ptr
+Am|void|sv_catpvs_flags|SV* sv|"literal string" s|I32 flags
+Am|void|sv_catpvs_mg|SV* sv|"literal string" s
+Am|void|sv_catpvs_nomg|SV* sv|"literal string" s
+Am|void|sv_catpvs|SV* sv|"literal string" s
+Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
Am|void|SvCUR_set|SV* sv|STRLEN len
Am|void|SvGETMAGIC|SV* sv
Am|void|SvIOK_off|SV* sv
-Am|void|SvIOK_only_UV|SV* sv
Am|void|SvIOK_only|SV* sv
+Am|void|SvIOK_only_UV|SV* sv
Am|void|SvIOK_on|SV* sv
Am|void|SvIV_set|SV* sv|IV val
Am|void|SvLEN_set|SV* sv|STRLEN len
@@ -368,10 +364,10 @@ Am|void|SvNOK_off|SV* sv
Am|void|SvNOK_only|SV* sv
Am|void|SvNOK_on|SV* sv
Am|void|SvNV_set|SV* sv|NV val
-Am|void|SvOOK_offset|NN SV*sv|STRLEN len
+Am|void|SvOOK_offset|SV*sv|STRLEN len
Am|void|SvPOK_off|SV* sv
-Am|void|SvPOK_only_UTF8|SV* sv
Am|void|SvPOK_only|SV* sv
+Am|void|SvPOK_only_UTF8|SV* sv
Am|void|SvPOK_on|SV* sv
Am|void|SvPV_set|SV* sv|char* val
Am|void|SvREFCNT_dec_NN|SV* sv
@@ -383,13 +379,16 @@ Am|void|SvREFCNT_inc_void|SV* sv
Am|void|SvROK_off|SV* sv
Am|void|SvROK_on|SV* sv
Am|void|SvRV_set|SV* sv|SV* val
-Am|void|SvSETMAGIC|SV* sv
-Am|void|SvSHARE|SV* sv
-Am|void|SvSTASH_set|SV* sv|HV* val
Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
+Am|void|SvSETMAGIC|SV* sv
Am|void|SvSetMagicSV|SV* dsv|SV* ssv
+Am|void|sv_setpvs_mg|SV* sv|"literal string" s
+Am|void|sv_setpvs|SV* sv|"literal string" s
+Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
Am|void|SvSetSV|SV* dsv|SV* ssv
+Am|void|SvSHARE|SV* sv
+Am|void|SvSTASH_set|SV* sv|HV* val
Am|void|SvTAINTED_off|SV* sv
Am|void|SvTAINTED_on|SV* sv
Am|void|SvTAINT|SV* sv
@@ -398,88 +397,116 @@ Am|void|SvUPGRADE|SV* sv|svtype type
Am|void|SvUTF8_off|SV *sv
Am|void|SvUTF8_on|SV *sv
Am|void|SvUV_set|SV* sv|UV val
+Am|void|XopDISABLE|XOP *xop|which
+Am|void|XopENABLE|XOP *xop|which
+Am|void|XopENTRY_set|XOP *xop|which|value
Am|void|XPUSHi|IV iv
Am|void|XPUSHmortal
Am|void|XPUSHn|NV nv
Am|void|XPUSHp|char* str|STRLEN len
Am|void|XPUSHs|SV* sv
Am|void|XPUSHu|UV uv
+Am|void|XSRETURN|int nitems
Am|void|XSRETURN_IV|IV iv
Am|void|XSRETURN_NV|NV nv
Am|void|XSRETURN_PV|char* str
Am|void|XSRETURN_UV|IV uv
-Am|void|XSRETURN|int nitems
Am|void|XST_mIV|int pos|IV iv
Am|void|XST_mNO|int pos
Am|void|XST_mNV|int pos|NV nv
Am|void|XST_mPV|int pos|char* str
Am|void|XST_mUNDEF|int pos
Am|void|XST_mYES|int pos
-Am|void|XopDISABLE|XOP *xop|which
-Am|void|XopENABLE|XOP *xop|which
-Am|void|XopENTRY_set|XOP *xop|which|value
+Am|void *|ZeroD|void* dest|int nitems|type
Am|void|Zero|void* dest|int nitems|type
-Am|void|mPUSHi|IV iv
-Am|void|mPUSHn|NV nv
-Am|void|mPUSHp|char* str|STRLEN len
-Am|void|mPUSHs|SV* sv
-Am|void|mPUSHu|UV uv
-Am|void|mXPUSHi|IV iv
-Am|void|mXPUSHn|NV nv
-Am|void|mXPUSHp|char* str|STRLEN len
-Am|void|mXPUSHs|SV* sv
-Am|void|mXPUSHu|UV uv
-Am|void|sv_catpv_nomg|SV* sv|const char* ptr
-Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
-Am|void|sv_catpvs_flags|SV* sv|const char* s|I32 flags
-Am|void|sv_catpvs_mg|SV* sv|const char* s
-Am|void|sv_catpvs_nomg|SV* sv|const char* s
-Am|void|sv_catpvs|SV* sv|const char* s
-Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
-Am|void|sv_setpvs_mg|SV* sv|const char* s
-Am|void|sv_setpvs|SV* sv|const char* s
-Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
+Amx|bool|PadnameUTF8|PADNAME pn
+Amx|char *|PadnamePV|PADNAME pn
+Amx|COPHH *|cophh_copy|COPHH *cophh
+Amx|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
+Amx|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+Amx|COPHH *|cophh_delete_pvs|const COPHH *cophh|"literal string" key|U32 flags
+Amx|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
+Amx|COPHH *|cophh_new_empty
+Amx|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
+Amx|COPHH *|cophh_store_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags
+Amx|COPHH *|cophh_store_pvs|const COPHH *cophh|"literal string" key|SV *value|U32 flags
+Amx|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
+Amx|HV *|cophh_2hv|const COPHH *cophh|U32 flags
Am||XopENTRYCUSTOM|const OP *o|which
Am||XopENTRY|XOP *xop|which
-mU||LVRET
+Amx|PADLIST *|CvPADLIST|CV *cv
+Amx|PADNAMELIST *|PadlistNAMES|PADLIST padlist
+Amx|PADNAME **|PadlistNAMESARRAY|PADLIST padlist
+Amx|PADNAME **|PadnamelistARRAY|PADNAMELIST pnl
+Amx|PAD **|PadlistARRAY|PADLIST padlist
+Amx|SSize_t|PadlistMAX|PADLIST padlist
+Amx|SSize_t|PadlistNAMESMAX|PADLIST padlist
+Amx|SSize_t|PadMAX|PAD pad
+Amx|SSize_t|PadnamelistMAX|PADNAMELIST pnl
+Amx|SSize_t|PadnamelistREFCNT|PADNAMELIST pnl
+Amx|SSize_t|PadnameREFCNT|PADNAME pn
+Amx|STRLEN|PadnameLEN|PADNAME pn
+Amx|SV *|cophh_fetch_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
+Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+Amx|SV *|cophh_fetch_pvs|const COPHH *cophh|"literal string" key|U32 flags
+Amx|SV *|cophh_fetch_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
+Amx|SV*|newSVpadname|PADNAME *pn
+Amx|SV **|PadARRAY|PAD pad
+Amx|SV *|PadnameSV|PADNAME pn
+Amx|U32|PadlistREFCNT|PADLIST padlist
+AmxU|char *|PL_parser-E<gt>bufend
+AmxU|char *|PL_parser-E<gt>bufptr
+AmxU|char *|PL_parser-E<gt>linestart
+AmxU|PADNAMELIST *|PL_comppad_name
+AmxU|PAD *|PL_comppad
+AmxU|SV **|PL_curpad
+AmxU|SV *|PL_parser-E<gt>linestr
+Amx|void|BhkDISABLE|BHK *hk|which
+Amx|void|BhkENABLE|BHK *hk|which
+Amx|void|BhkENTRY_set|BHK *hk|which|void *ptr
+Amx|void|cophh_free|COPHH *cophh
+Amx|void|lex_stuff_pvs|"literal string" pv|U32 flags
+Amx|void|PadnamelistREFCNT_dec|PADNAMELIST pnl
+Amx|void|PadnameREFCNT_dec|PADNAME pn
+m|bool|CvWEAKOUTSIDE|CV *cv
+m|bool|PadnameIsOUR|PADNAME pn
+m|bool|PadnameIsSTATE|PADNAME pn
+m|bool|PadnameOUTER|PADNAME pn
+m|char *|PAD_COMPNAME_PV|PADOFFSET po
+m|HV *|PAD_COMPNAME_OURSTASH|PADOFFSET po
+m|HV *|PAD_COMPNAME_TYPE|PADOFFSET po
+m|HV *|PadnameOURSTASH
+m|HV *|PadnameTYPE|PADNAME pn
mn|GV *|PL_DBsub
mn|GV*|PL_last_in_gv
mn|GV*|PL_ofsgv
mn|SV *|PL_DBsingle
mn|SV *|PL_DBtrace
mn|SV*|PL_rs
-mn|bool|PL_dowarn
+mn|U8|PL_dowarn
ms||djSP
-mx|U32|BhkFLAGS|BHK *hk
-mx|void *|BhkENTRY|BHK *hk|which
-mx|void|CALL_BLOCK_HOOKS|which|arg
-m|HV *|PAD_COMPNAME_OURSTASH|PADOFFSET po
-m|HV *|PAD_COMPNAME_TYPE|PADOFFSET po
-m|HV *|PadnameOURSTASH
-m|HV *|PadnameTYPE|PADNAME pn
-m|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen
m|STRLEN|PAD_COMPNAME_GEN|PADOFFSET po
+m|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen
+m|struct refcounted_he *|refcounted_he_new_pvs|struct refcounted_he *parent|"literal string" key|SV *value|U32 flags
m|SV *|CX_CURPAD_SV|struct context|PADOFFSET po
m|SV *|PAD_BASE_SV |PADLIST padlist|PADOFFSET po
m|SV *|PAD_SETSV |PADOFFSET po|SV* sv
-m|SV *|PAD_SV |PADOFFSET po
m|SV *|PAD_SVl |PADOFFSET po
-m|SV *|refcounted_he_fetch_pvs|const struct refcounted_he *chain|const char *key|U32 flags
+m|SV *|PAD_SV |PADOFFSET po
+m|SV *|refcounted_he_fetch_pvs|const struct refcounted_he *chain|"literal string" key|U32 flags
m|U32|PAD_COMPNAME_FLAGS|PADOFFSET po
m|U32|SvTHINKFIRST|SV *sv
-m|bool|CvWEAKOUTSIDE|CV *cv
-m|bool|PadnameIsOUR|PADNAME pn
-m|bool|PadnameIsSTATE|PADNAME pn
-m|bool|PadnameOUTER|PADNAME pn
-m|char *|PAD_COMPNAME_PV|PADOFFSET po
-m|struct refcounted_he *|refcounted_he_new_pvs|struct refcounted_he *parent|const char *key|SV *value|U32 flags
+mU||LVRET
m|void|CX_CURPAD_SAVE|struct context
m|void|PAD_CLONE_VARS|PerlInterpreter *proto_perl|CLONE_PARAMS* param
m|void|PAD_RESTORE_LOCAL|PAD *opad
m|void|PAD_SAVE_LOCAL|PAD *opad|PAD *npad
m|void|PAD_SAVE_SETNULLPAD
-m|void|PAD_SET_CUR |PADLIST padlist|I32 n
m|void|PAD_SET_CUR_NOSAVE |PADLIST padlist|I32 n
+m|void|PAD_SET_CUR |PADLIST padlist|I32 n
m|void|SAVECLEARSV |SV **svp
m|void|SAVECOMPPAD
m|void|SAVEPADSV |PADOFFSET po
+mx|U32|BhkFLAGS|BHK *hk
+mx|void *|BhkENTRY|BHK *hk|which
+mx|void|CALL_BLOCK_HOOKS|which|arg
diff --git a/dist/Devel-PPPort/parts/embed.fnc b/dist/Devel-PPPort/parts/embed.fnc
index 1f347c2b83..40c8069d61 100644
--- a/dist/Devel-PPPort/parts/embed.fnc
+++ b/dist/Devel-PPPort/parts/embed.fnc
@@ -1,6 +1,11 @@
: BEGIN{die "You meant to run regen/embed.pl"} # Stop early if fed to perl.
:
: This file is processed by regen/embed.pl and autodoc.pl
+: It is used to declare the interfaces to the functions defined by perl. All
+: non-static functions must have entries here. Static functions need not, but
+: there is benefit to declaring them here, as it generally handles the thread
+: context parameter invisibly, as well as making sure a PERL_ARGS_ASSERT_foo
+: macro is defined, which can save you debugging time.
:
: Lines are of the form:
: flags|return_type|function_name|arg1|arg2|...|argN
@@ -8,6 +13,11 @@
: A line may be continued on another by ending it with a backslash.
: Leading and trailing whitespace will be ignored in each component.
:
+: The default without flags is to declare a function for internal perl-core use
+: only, not visible to XS code nor to Perl extensions. Use the A and E flags to
+: modify this. Most non-static functions should have the 'p' flag to avoid
+: namespace clashes with programs that embed perl.
+:
: flags are single letters with following meanings:
:
: A Available fully everywhere (usually part of the public API):
@@ -23,21 +33,40 @@
: If the function is only exported for use in a public
: macro, see X.
:
-: a Allocates memory a la malloc/calloc. Also implies "R":
+: a Allocates memory a la malloc/calloc. Also implies "R".
+: This should only be on functions which returns 'empty' memory
+: which has no other pointers to it, and which does not contain
+: any pointers to other things. So for example realloc() can't be
+: 'a'.
:
: proto.h: add __attribute__malloc__
:
-: b Binary backward compatibility; has an exported Perl_ implementation
-: but function is also normally a macro (i.e. has the "m" flag as well).
-: Backcompat functions ("b") can be anywhere, but if they are also
-: macros ("m") then they have no proto.h entries so must either be in
-: mathoms.c to get marked EXTERN_C (and skipped for -DNO_MATHOMS builds)
-: or else will require special attention to ensure they are marked
-: EXTERN_C (and then won't be automatically skipped for -DNO_MATHOMS
-: builds).
+: b Binary backward compatibility. This is used for functions which are
+: kept only to not have to change legacy applications that call them. If
+: there are no such legacy applications in a Perl installation for all
+: functions flagged with this, the installation can run Configure with the
+: -Accflags='-DNO_MATHOMS' parameter to not even compile them. If there
+: is a macro form of this function that provides equivalent functionality
+: (using a different implementation), also specify the 'm' flag. The 'b'
+: functions are normally moved to mathoms.c, but if circumstances dictate
+: otherwise, they can be anywhere, provided the whole function is wrapped
+: with
+: #ifndef NO_MATHOMS
+: ...
+: #endif
+:
+: Note that this flag no longer automatically adds a 'Perl_' prefix to the
+: name. Additionally specify 'p' to do that.
+:
+: For functions, like wrappers, whose macro shortcut doesn't call the
+: function, but which, for whatever reason, aren't considered legacy-only,
+: use the 'o' flag
:
+: This flag effectively causes nothing to happen if the perl interpreter
+: is compiled with -DNO_MATHOMS; otherwise these happen:
: add entry to the list of exported symbols;
-: don't define PERL_ARGS_ASSERT_FOO
+: create PERL_ARGS_ASSERT_foo;
+: add embed.h entry (unless overridden by the 'm' flag)
:
: D Function is deprecated:
:
@@ -56,7 +85,7 @@
: 1) must be static to its containing file ("i" or "s" flag); or
: 2) be combined with the "X" flag.
:
-: f Function takes a format string. If the function name /strftime/
+: f Function takes a format string. If the function name =~ qr/strftime/
: then its assumed to take a strftime-style format string as 1st arg;
: otherwise it's assumed to be a printf style format string, varargs
: (hence any entry that would otherwise go in embed.h is suppressed):
@@ -65,9 +94,10 @@
:
: i Static inline: function in source code has a S_ prefix:
:
-: proto.h: function is declared as S_foo rather than foo,
+: proto.h: function is declared as S_foo rather than foo unless the 'p'
+: flag is also given in which case 'Perl_foo' is used,
: PERL_STATIC_INLINE is added to declaration;
-: embed.h: "#define foo S_foo" entries added
+: embed.h: "#define foo S_foo" or Perl_foo entries added
:
: M May change:
:
@@ -76,7 +106,8 @@
:
: m Implemented as a macro:
:
-: suppress proto.h entry (actually, not suppressed, but commented out)
+: suppress proto.h entry unless 'b' also specified (actually, not
+: suppressed, but commented out)
: suppress entry in the list of exported symbols
: suppress embed.h entry
:
@@ -93,10 +124,30 @@
:
: o Has no Perl_foo or S_foo compatibility macro:
:
+: This can be used when you define a macro with this entry's name that
+: doesn't call the function specified by this entry. This is typically
+: done for a function that effectively just wraps another one, and where
+: the macro form calls the underlying function directly. For these, also
+: specify the 'm' flag. Legacy-only functions should instead use 'b'.
+:
: embed.h: suppress "#define foo Perl_foo"
:
-: P Pure function: no effects except the return value;
-: return value depends only on params and/or globals:
+: P Pure function:
+:
+: A pure function has no effects except the return value, and the return
+: value depends only on params and/or globals. This is a hint to the
+: compiler that it can optimize calls to this function out of common
+: subexpressions. Consequently if this flag is wrongly specified, it can
+: lead to subtle bugs that vary by platform, compiler, compiler version,
+: and optimization level. Also, a future commit could easily change a
+: currently-pure function without even noticing this flag. So it should
+: be used sparingly, only for functions that are unlikely to ever become
+: not pure by future commits. It should not be used for static
+: functions, as the compiler already has the information needed to make
+: the 'pure' determination and doesn't need any hint; so it doesn't add
+: value in those cases, and could be dangerous if it causes the compiler
+: to skip doing its own checks. It should not be used on functions that
+: touch SVs, as those can trigger unexpected magic. Also implies "R":
:
: proto.h: add __attribute__pure__
:
@@ -105,7 +156,7 @@
: proto.h: function is declared as Perl_foo rather than foo
: embed.h: "#define foo Perl_foo" entries added
:
-: R Return value must not be ignored (also implied by 'a' flag):
+: R Return value must not be ignored (also implied by 'a' and 'P' flags):
:
: proto.h: add __attribute__warn_unused_result__
:
@@ -123,6 +174,13 @@
:
: (currently no effect)
:
+: W Add a _pDEPTH argument to function prototypes, and an _aDEPTH
+: argument to the function calls. This means that under DEBUGGING
+: a depth argument is added to the functions, which is used for
+: example by the regex engine for debugging and trace output.
+: A non DEBUGGING build will not pass the unused argument.
+: Currently restricted to functions with at least one argument.
+:
: X Explicitly exported:
:
: add entry to the list of exported symbols, unless x or m
@@ -186,7 +244,7 @@ Ano |PerlInterpreter*|perl_clone_using \
Aanop |Malloc_t|malloc |MEM_SIZE nbytes
Aanop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size
-Aanop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
+ARnop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
Anop |Free_t |mfree |Malloc_t where
#if defined(MYMALLOC)
npR |MEM_SIZE|malloced_size |NN void *p
@@ -224,6 +282,7 @@ ApdR |SV** |av_fetch |NN AV *av|SSize_t key|I32 lval
Apd |void |av_fill |NN AV *av|SSize_t fill
ApdR |SSize_t|av_len |NN AV *av
ApdR |AV* |av_make |SSize_t size|NN SV **strp
+p |SV* |av_nonelem |NN AV *av|SSize_t ix
Apd |SV* |av_pop |NN AV *av
ApdoxM |void |av_create_and_push|NN AV **const avp|NN SV *const val
Apd |void |av_push |NN AV *av|NN SV *val
@@ -231,9 +290,7 @@ Apd |void |av_push |NN AV *av|NN SV *val
EXp |void |av_reify |NN AV *av
ApdR |SV* |av_shift |NN AV *av
Apd |SV** |av_store |NN AV *av|SSize_t key|NULLOK SV *val
-#ifndef PERL_NO_INLINE_FUNCTIONS
AidR |SSize_t|av_top_index |NN AV *av
-#endif
AmpdR |SSize_t|av_tindex |NN AV *av
Apd |void |av_undef |NN AV *av
ApdoxM |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
@@ -282,13 +339,14 @@ Anprd |void |croak_xs_usage |NN const CV *const cv \
|NN const char *const params
npr |void |croak_no_mem
nprX |void |croak_popstack
+fnrp |void |croak_caller|NULLOK const char* pat|...
fnprx |void |noperl_die|NN const char* pat|...
#if defined(WIN32)
norx |void |win32_croak_not_implemented|NN const char * fname
#endif
#if defined(PERL_IMPLICIT_CONTEXT)
Afnrp |void |croak_nocontext|NULLOK const char* pat|...
-Afnrp |OP* |die_nocontext |NULLOK const char* pat|...
+Afnrp |OP* |die_nocontext |NULLOK const char* pat|...
Afnp |void |deb_nocontext |NN const char* pat|...
Afnp |char* |form_nocontext |NN const char* pat|...
Anp |void |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|...
@@ -300,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 \
@@ -338,16 +396,21 @@ Afp |void |deb |NN const char* pat|...
Ap |void |vdeb |NN const char* pat|NULLOK va_list* args
Ap |void |debprofdump
EXp |SV* |multideref_stringify |NN const OP* o|NULLOK CV *cv
+EXp |SV* |multiconcat_stringify |NN const OP* o
Ap |I32 |debop |NN const OP* o
Ap |I32 |debstack
Ap |I32 |debstackptrs
pR |SV * |defelem_target |NN SV *sv|NULLOK MAGIC *mg
Anp |char* |delimcpy |NN char* to|NN const char* toend|NN const char* from \
|NN const char* fromend|int delim|NN I32* retlen
+np |char* |delimcpy_no_escape|NN char* to|NN const char* toend \
+ |NN const char* from \
+ |NN const char* fromend|int delim \
+ |NN I32* retlen
: Used in op.c, perl.c
pM |void |delete_eval_scope
-Aprd |OP* |die_sv |NN SV *baseex
-Afrpd |OP* |die |NULLOK const char* pat|...
+Aprd |OP* |die_sv |NN SV *baseex
+Afrpd |OP* |die |NULLOK const char* pat|...
: Used in util.c
pr |void |die_unwind |NN SV* msv
Ap |void |dounwind |I32 cxix
@@ -355,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
@@ -375,9 +438,9 @@ Ap |int |do_spawn_nowait|NN char* cmd
#if !defined(WIN32)
p |bool|do_exec3 |NN const char *incmd|int fd|int do_report
#endif
-p |void |do_execfree
#if defined(PERL_IN_DOIO_C)
s |void |exec_failed |NN const char *cmd|int fd|int do_report
+s |bool |argvout_final |NN MAGIC *mg|NN IO *io|bool not_implicit
#endif
#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
: Defined in doio.c, used only in pp_sys.c
@@ -400,9 +463,34 @@ 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
+pn |void |setfd_inhexec|int fd
+p |void |setfd_cloexec_for_nonsysfd|int fd
+p |void |setfd_inhexec_for_sysfd|int fd
+p |void |setfd_cloexec_or_inhexec_by_sysfdness|int fd
+pR |int |PerlLIO_dup_cloexec|int oldfd
+p |int |PerlLIO_dup2_cloexec|int oldfd|int newfd
+pR |int |PerlLIO_open_cloexec|NN const char *file|int flag
+pR |int |PerlLIO_open3_cloexec|NN const char *file|int flag|int perm
+pnoR |int |my_mkstemp_cloexec|NN char *templte
+#ifdef HAS_PIPE
+pR |int |PerlProc_pipe_cloexec|NN int *pipefd
+#endif
+#ifdef HAS_SOCKET
+pR |int |PerlSock_socket_cloexec|int domain|int type|int protocol
+pR |int |PerlSock_accept_cloexec|int listenfd \
+ |NULLOK struct sockaddr *addr \
+ |NULLOK Sock_size_t *addrlen
+#endif
+#if defined (HAS_SOCKETPAIR) || \
+ (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && \
+ defined(AF_INET) && defined(PF_INET))
+pR |int |PerlSock_socketpair_cloexec|int domain|int type|int protocol \
+ |NN int *pairfd
+#endif
#if defined(PERL_IN_DOIO_C)
s |IO * |openn_setup |NN GV *gv|NN char *mode|NN PerlIO **saveifp \
|NN PerlIO **saveofp|NN int *savefd \
@@ -411,14 +499,15 @@ s |bool |openn_cleanup |NN GV *gv|NN IO *io|NULLOK PerlIO *fp \
|NN char *mode|NN const char *oname \
|NULLOK PerlIO *saveifp|NULLOK PerlIO *saveofp \
|int savefd|char savetype|int writing \
- |bool was_fdopen|NULLOK const char *type
+ |bool was_fdopen|NULLOK const char *type \
+ |NULLOK Stat_t *statbufp
#endif
Ap |bool |do_openn |NN GV *gv|NN const char *oname|I32 len \
|int as_raw|int rawmode|int rawperm \
|NULLOK PerlIO *supplied_fp|NULLOK SV **svp \
|I32 num
Mp |bool |do_open_raw |NN GV *gv|NN const char *oname|STRLEN len \
- |int rawmode|int rawperm
+ |int rawmode|int rawperm|NULLOK Stat_t *statbufp
Mp |bool |do_open6 |NN GV *gv|NN const char *oname|STRLEN len \
|NULLOK PerlIO *supplied_fp|NULLOK SV **svp \
|U32 num
@@ -428,15 +517,15 @@ p |bool |do_print |NULLOK SV* sv|NN PerlIO* fp
pR |OP* |do_readline
: Defined in doio.c, used only in pp_sys.c
p |bool |do_seek |NULLOK GV* gv|Off_t pos|int whence
-Ap |void |do_sprintf |NN SV* sv|I32 len|NN SV** sarg
+Ap |void |do_sprintf |NN SV* sv|SSize_t len|NN SV** sarg
: Defined in doio.c, used only in pp_sys.c
p |Off_t |do_sysseek |NN GV* gv|Off_t pos|int whence
: Defined in doio.c, used only in pp_sys.c
pR |Off_t |do_tell |NN GV* gv
: Defined in doop.c, used only in pp.c
-p |I32 |do_trans |NN SV* sv
+p |Size_t |do_trans |NN SV* sv
: Used in my.c and pp.c
-p |UV |do_vecget |NN SV* sv|SSize_t offset|int size
+p |UV |do_vecget |NN SV* sv|STRLEN offset|int size
: Defined in doop.c, used only in mg.c (with /* XXX slurp this routine */)
p |void |do_vecset |NN SV* sv
: Defined in doop.c, used only in pp.c
@@ -449,6 +538,7 @@ p |void |dump_all_perl |bool justperl
Ap |void |dump_eval
Ap |void |dump_form |NN const GV* gv
Ap |void |gv_dump |NULLOK GV* gv
+Apd |OPclass|op_class |NULLOK const OP *o
Ap |void |op_dump |NN const OP *o
Ap |void |pmop_dump |NULLOK PMOP* pm
Ap |void |dump_packsubs |NN const HV* stash
@@ -459,7 +549,6 @@ Apd |void |fbm_compile |NN SV* sv|U32 flags
ApdR |char* |fbm_instr |NN unsigned char* big|NN unsigned char* bigend \
|NN SV* littlestr|U32 flags
p |CV * |find_lexical_cv|PADOFFSET off
-pR |OP * |parse_subsignature
: Defined in util.c, used only in perl.c
p |char* |find_script |NN const char *scriptname|bool dosearch \
|NULLOK const char *const *const search_ext|I32 flags
@@ -473,7 +562,8 @@ i |void |op_relocate_sv |NN SV** svp|NN PADOFFSET* targp
i |OP* |newMETHOP_internal |I32 type|I32 flags|NULLOK OP* dynamic_meth \
|NULLOK SV* const_meth
: FIXME
-s |OP* |fold_constants |NN OP *o
+s |OP* |fold_constants |NN OP * const o
+s |OP* |traverse_op_tree|NN OP* top|NN OP* o
#endif
Afpd |char* |form |NN const char* pat|...
Ap |char* |vform |NN const char* pat|NULLOK va_list* args
@@ -501,7 +591,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
@@ -531,7 +621,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
@@ -564,14 +654,14 @@ Apd |void |hv_clear |NULLOK HV *hv
: used in SAVEHINTS() and op.c
ApdR |HV * |hv_copy_hints_hv|NULLOK HV *const ohv
Ap |void |hv_delayfree_ent|NN HV *hv|NULLOK HE *entry
-Abmd |SV* |hv_delete |NULLOK HV *hv|NN const char *key|I32 klen \
+Abmdp |SV* |hv_delete |NULLOK HV *hv|NN const char *key|I32 klen \
|I32 flags
-Abmd |SV* |hv_delete_ent |NULLOK HV *hv|NN SV *keysv|I32 flags|U32 hash
-AbmdR |bool |hv_exists |NULLOK HV *hv|NN const char *key|I32 klen
-AbmdR |bool |hv_exists_ent |NULLOK HV *hv|NN SV *keysv|U32 hash
-Abmd |SV** |hv_fetch |NULLOK HV *hv|NN const char *key|I32 klen \
+Abmdp |SV* |hv_delete_ent |NULLOK HV *hv|NN SV *keysv|I32 flags|U32 hash
+AbmdRp |bool |hv_exists |NULLOK HV *hv|NN const char *key|I32 klen
+AbmdRp |bool |hv_exists_ent |NULLOK HV *hv|NN SV *keysv|U32 hash
+Abmdp |SV** |hv_fetch |NULLOK HV *hv|NN const char *key|I32 klen \
|I32 lval
-Abmd |HE* |hv_fetch_ent |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
+Abmdp |HE* |hv_fetch_ent |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
Ap |void* |hv_common |NULLOK HV *hv|NULLOK SV *keysv \
|NULLOK const char* key|STRLEN klen|int flags \
|int action|NULLOK SV *val|U32 hash
@@ -613,18 +703,18 @@ Xpd |struct refcounted_he *|refcounted_he_new_sv \
|U32 hash|NULLOK SV *value|U32 flags
Xpd |void |refcounted_he_free|NULLOK struct refcounted_he *he
Xpd |struct refcounted_he *|refcounted_he_inc|NULLOK struct refcounted_he *he
-Abmd |SV** |hv_store |NULLOK HV *hv|NULLOK const char *key \
+Apbmd |SV** |hv_store |NULLOK HV *hv|NULLOK const char *key \
|I32 klen|NULLOK SV *val|U32 hash
-Abmd |HE* |hv_store_ent |NULLOK HV *hv|NULLOK SV *key|NULLOK SV *val\
+Apbmd |HE* |hv_store_ent |NULLOK HV *hv|NULLOK SV *key|NULLOK SV *val\
|U32 hash
-AbmM |SV** |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \
+ApbmM |SV** |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \
|I32 klen|NULLOK SV *val|U32 hash|int flags
Amd |void |hv_undef |NULLOK HV *hv
poX |void |hv_undef_flags |NULLOK HV *hv|U32 flags
-Am |I32 |ibcmp |NN const char* a|NN const char* b|I32 len
-AnpP |I32 |foldEQ |NN const char* a|NN const char* b|I32 len
-Am |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len
-AnpP |I32 |foldEQ_locale |NN const char* a|NN const char* b|I32 len
+AmP |I32 |ibcmp |NN const char* a|NN const char* b|I32 len
+Ainp |I32 |foldEQ |NN const char* a|NN const char* b|I32 len
+AmP |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len
+Ainp |I32 |foldEQ_locale |NN const char* a|NN const char* b|I32 len
Am |I32 |ibcmp_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \
|bool u1|NN const char *s2|NULLOK char **pe2 \
|UV l2|bool u2
@@ -634,7 +724,7 @@ Amd |I32 |foldEQ_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \
AMp |I32 |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \
|bool u1|NN const char *s2|NULLOK char **pe2 \
|UV l2|bool u2|U32 flags
-AnpP |I32 |foldEQ_latin1 |NN const char* a|NN const char* b|I32 len
+Ainp |I32 |foldEQ_latin1 |NN const char* a|NN const char* b|I32 len
#if defined(PERL_IN_DOIO_C)
sR |bool |ingroup |Gid_t testgid|bool effective
#endif
@@ -647,7 +737,7 @@ p |void |init_debugger
Ap |void |init_stacks
Ap |void |init_tm |NN struct tm *ptm
: Used in perly.y
-AnpPR |char* |instr |NN const char* big|NN const char* little
+AbmnpPR |char* |instr |NN const char* big|NN const char* little
: Used in sv.c
p |bool |io_close |NN IO* io|NULLOK GV *gv \
|bool not_implicit|bool warn_on_fail
@@ -656,36 +746,41 @@ pR |OP* |invert |NULLOK OP* cmd
ApR |I32 |is_lvalue_sub
: Used in cop.h
XopR |I32 |was_lvalue_sub
-#ifndef PERL_NO_INLINE_FUNCTIONS
-AiMRn |STRLEN |_is_utf8_char_slow|NN const U8 *s|NN const U8 *e
-#endif
-ADMpPR |U32 |to_uni_upper_lc|U32 c
-ADMpPR |U32 |to_uni_title_lc|U32 c
-ADMpPR |U32 |to_uni_lower_lc|U32 c
-ADMpPR |bool |is_uni_alnum |UV c
-ADMpPR |bool |is_uni_alnumc |UV c
-ADMpPR |bool |is_uni_idfirst |UV c
-ADMpPR |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
-ADMpPR |bool |is_uni_graph |UV c
-ADMpPR |bool |is_uni_digit |UV c
-ADMpPR |bool |is_uni_upper |UV c
-ADMpPR |bool |is_uni_lower |UV c
-ADMpPR |bool |is_uni_print |UV c
-ADMpPR |bool |is_uni_punct |UV c
-ADMpPR |bool |is_uni_xdigit |UV c
+ApMRnP |STRLEN |_is_utf8_char_helper|NN const U8 * const s|NN const U8 * e|const U32 flags
+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
-ADMpPR |bool |isIDFIRST_lazy |NN const char* p
-ADMpPR |bool |isALNUM_lazy |NN const char* p
+AbDMpR |bool |isIDFIRST_lazy |NN const char* p
+AbDMpR |bool |isALNUM_lazy |NN const char* p
+p |void |init_uniprops
#ifdef PERL_IN_UTF8_C
-snR |U8 |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp
+snR |U8 |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp \
+ |const char dummy
+# ifndef UV_IS_QUAD
+snR |int |is_utf8_cp_above_31_bits|NN const U8 * const s \
+ |NN const U8 * const e \
+ |const bool consider_overlongs
+# endif
#endif
#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-EXp |UV |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags
+EXnp |UV |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags
#endif
#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
p |UV |_to_upper_title_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const char S_or_s
@@ -693,61 +788,130 @@ 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
-ADMpPR |bool |is_uni_alnum_lc|UV c
-ADMpPR |bool |is_uni_alnumc_lc|UV c
-ADMpPR |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
-ADMpPR |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
-ADMpPR |bool |is_uni_graph_lc|UV c
-ADMpPR |bool |is_uni_digit_lc|UV c
-ADMpPR |bool |is_uni_upper_lc|UV c
-ADMpPR |bool |is_uni_lower_lc|UV c
-ADMpPR |bool |is_uni_print_lc|UV c
-ADMpPR |bool |is_uni_punct_lc|UV c
-ADMpPR |bool |is_uni_xdigit_lc|UV c
-AnpdR |bool |is_invariant_string|NN const U8 *s|STRLEN len
-AmpdR |bool |is_ascii_string|NN const U8 *s|STRLEN len
-AnpdD |STRLEN |is_utf8_char |NN const U8 *s
+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 \
+ |STRLEN len \
+ |NULLOK const U8 ** ep
+#ifndef EBCDIC
+AniR |unsigned int|_variant_byte_number|PERL_UINTMAX_T word
+#endif
+#if defined(PERL_CORE) || defined(PERL_EXT)
+EinR |Size_t |variant_under_utf8_count|NN const U8* const s \
+ |NN const U8* const e
+#endif
+AmnpdRP |bool |is_ascii_string|NN const U8* const s|STRLEN len
+AmnpdRP |bool |is_invariant_string|NN const U8* const s|STRLEN len
+#if defined(PERL_CORE) || defined (PERL_EXT)
+EXnidR |bool |is_utf8_non_invariant_string|NN const U8* const s \
+ |STRLEN len
+#endif
+AbnpdD |STRLEN |is_utf8_char |NN const U8 *s
Abmnpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end
-Anpd |bool |is_utf8_string |NN const U8 *s|STRLEN len
-Anpdmb |bool |is_utf8_string_loc|NN const U8 *s|STRLEN len|NULLOK const U8 **ep
-Anpd |bool |is_utf8_string_loclen|NN const U8 *s|STRLEN len|NULLOK const U8 **ep|NULLOK STRLEN *el
+AnidR |Size_t |isUTF8_CHAR|NN const U8 * const s0 \
+ |NN const U8 * const e
+AnidR |Size_t |isSTRICT_UTF8_CHAR |NN const U8 * const s0 \
+ |NN const U8 * const e
+AnidR |Size_t |isC9_STRICT_UTF8_CHAR |NN const U8 * const s0 \
+ |NN const U8 * const e
+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
+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 \
+ |NN const U8 *s|STRLEN len|NN const U8 **ep \
+ |const U32 flags
+Andm |bool |is_strict_utf8_string_loc \
+ |NN const U8 *s|STRLEN len|NN const U8 **ep
+Andm |bool |is_c9strict_utf8_string_loc \
+ |NN const U8 *s|STRLEN len|NN const U8 **ep
+Anipd |bool |is_utf8_string_loclen \
+ |NN const U8 *s|STRLEN len|NULLOK const U8 **ep \
+ |NULLOK STRLEN *el
+Anid |bool |is_utf8_string_loclen_flags \
+ |NN const U8 *s|STRLEN len|NULLOK const U8 **ep \
+ |NULLOK STRLEN *el|const U32 flags
+Anid |bool |is_strict_utf8_string_loclen \
+ |NN const U8 *s|STRLEN len|NULLOK const U8 **ep \
+ |NULLOK STRLEN *el
+Anid |bool |is_c9strict_utf8_string_loclen \
+ |NN const U8 *s|STRLEN len|NULLOK const U8 **ep \
+ |NULLOK STRLEN *el
+Amnd |bool |is_utf8_fixed_width_buf_flags \
+ |NN const U8 * const s|STRLEN len|const U32 flags
+Amnd |bool |is_utf8_fixed_width_buf_loc_flags \
+ |NN const U8 * const s|STRLEN len \
+ |NULLOK const U8 **ep|const U32 flags
+Anid |bool |is_utf8_fixed_width_buf_loclen_flags \
+ |NN const U8 * const s|STRLEN len \
+ |NULLOK const U8 **ep|NULLOK STRLEN *el|const U32 flags
+AmndP |bool |is_utf8_valid_partial_char \
+ |NN const U8 * const s|NN const U8 * const e
+AnidR |bool |is_utf8_valid_partial_char_flags \
+ |NN const U8 * const s|NN const U8 * const e|const U32 flags
AMpR |bool |_is_uni_FOO|const U8 classnum|const UV c
-AMpR |bool |_is_utf8_FOO|const U8 classnum|NN const U8 *p
-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
+AMpR |bool |_is_utf8_FOO|U8 classnum|NN const U8 * const p \
+ |NN const char * const name \
+ |NN const char * const alternative \
+ |const bool use_utf8|const bool use_locale \
+ |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
+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
AMpR |bool |_is_utf8_xidstart|NN const U8 *p
-AMpR |bool |_is_utf8_perl_idcont|NN const U8 *p
-AMpR |bool |_is_utf8_perl_idstart|NN const U8 *p
-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
+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
+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
+#endif
: Used in perly.y
p |OP* |jmaybe |NN OP *o
: Used in pp.c
@@ -756,6 +920,7 @@ pP |I32 |keyword |NN const char *name|I32 len|bool all_keywords
s |void |inplace_aassign |NN OP* o
#endif
Ap |void |leave_scope |I32 base
+p |void |notify_parser_that_changed_to_utf8
: Public lexer API
AMpd |void |lex_start |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags
AMpd |bool |lex_bufutf8
@@ -788,9 +953,7 @@ Ap |void |op_refcnt_lock
Ap |void |op_refcnt_unlock
Apdn |OP* |op_sibling_splice|NULLOK OP *parent|NULLOK OP *start \
|int del_count|NULLOK OP* insert
-#ifdef PERL_OP_PARENT
Apdn |OP* |op_parent|NN OP *o
-#endif
#if defined(PERL_IN_OP_C)
s |OP* |listkids |NULLOK OP* o
#endif
@@ -802,14 +965,18 @@ p |OP* |localize |NN OP *o|I32 lex
ApdR |I32 |looks_like_number|NN SV *const sv
Apd |UV |grok_bin |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C)
-EMpRX |bool |grok_bslash_x |NN char** s|NN UV* uv \
+EMpRX |bool |grok_bslash_x |NN char** s \
+ |NN const char* const send \
+ |NN UV* uv \
|NN const char** error_msg \
|const bool output_warning \
|const bool strict \
|const bool silence_non_portable \
|const bool utf8
EMpRX |char |grok_bslash_c |const char source|const bool output_warning
-EMpRX |bool |grok_bslash_o |NN char** s|NN UV* uv \
+EMpRX |bool |grok_bslash_o |NN char** s \
+ |NN const char* const send \
+ |NN UV* uv \
|NN const char** error_msg \
|const bool output_warning \
|const bool strict \
@@ -817,7 +984,7 @@ EMpRX |bool |grok_bslash_o |NN char** s|NN UV* uv \
|const bool utf8
EMiR |char*|form_short_octal_warning|NN const char * const s \
|const STRLEN len
-EiPRn |I32 |regcurly |NN const char *s
+EiRn |I32 |regcurly |NN const char *s
#endif
Apd |UV |grok_hex |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
Apd |int |grok_infnan |NN const char** sp|NN const char *send
@@ -868,6 +1035,7 @@ p |int |magic_freearylen_p|NN SV* sv|NN MAGIC* mg
p |int |magic_setdbline|NN SV* sv|NN MAGIC* mg
p |int |magic_setdebugvar|NN SV* sv|NN MAGIC* mg
p |int |magic_setdefelem|NN SV* sv|NN MAGIC* mg
+p |int |magic_setnonelem|NN SV* sv|NN MAGIC* mg
p |int |magic_setenv |NN SV* sv|NN MAGIC* mg
dp |int |magic_sethint |NN SV* sv|NN MAGIC* mg
p |int |magic_setisa |NN SV* sv|NN MAGIC* mg
@@ -892,8 +1060,14 @@ pod |SV* |magic_methcall |NN SV *sv|NN const MAGIC *mg \
Ap |I32 * |markstack_grow
#if defined(USE_LOCALE_COLLATE)
p |int |magic_setcollxfrm|NN SV* sv|NN MAGIC* mg
+pb |char* |mem_collxfrm |NN const char* input_string|STRLEN len|NN STRLEN* xlen
: Defined in locale.c, used only in sv.c
-p |char* |mem_collxfrm |NN const char* s|STRLEN len|NN STRLEN* xlen
+# if defined(PERL_IN_LOCALE_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_MATHOMS_C)
+pM |char* |_mem_collxfrm |NN const char* input_string \
+ |STRLEN len \
+ |NN STRLEN* xlen \
+ |bool utf8
+# endif
#endif
Afpd |SV* |mess |NN const char* pat|...
Apd |SV* |mess_sv |NN SV* basemsg|bool consume
@@ -908,12 +1082,14 @@ Apd |int |mg_copy |NN SV *sv|NN SV *nsv|NULLOK const char *key \
|I32 klen
: Defined in mg.c, used only in scope.c
pd |void |mg_localize |NN SV* sv|NN SV* nsv|bool setmagic
+Apd |SV* |sv_string_from_errnum|int errnum|NULLOK SV* tgtsv
ApdRn |MAGIC* |mg_find |NULLOK const SV* sv|int type
ApdRn |MAGIC* |mg_findext |NULLOK const SV* sv|int type|NULLOK const MGVTBL *vtbl
: exported for re.pm
EXpR |MAGIC* |mg_find_mglob |NN SV* sv
Apd |int |mg_free |NN SV* sv
Apd |void |mg_free_type |NN SV* sv|int how
+Apd |void |mg_freeext |NN SV* sv|int how|NULLOK const MGVTBL *vtbl
Apd |int |mg_get |NN SV* sv
ApdD |U32 |mg_length |NN SV* sv
Apdn |void |mg_magical |NN SV* sv
@@ -923,20 +1099,18 @@ Apn |void |mini_mktime |NN struct tm *ptm
AMmd |OP* |op_lvalue |NULLOK OP* o|I32 type
poX |OP* |op_lvalue_flags|NULLOK OP* o|I32 type|U32 flags
p |void |finalize_optree |NN OP* o
+p |void |optimize_optree|NN OP* o
#if defined(PERL_IN_OP_C)
+s |void |optimize_op |NN OP* o
s |void |finalize_op |NN OP* o
-s |void |move_proto_attr|NN OP **proto|NN OP **attrs|NN const GV *name
+s |void |move_proto_attr|NN OP **proto|NN OP **attrs \
+ |NN const GV *name|bool curstash
#endif
: Used in op.c and pp_sys.c
p |int |mode_from_discipline|NULLOK const char* s|STRLEN len
Ap |const char* |moreswitches |NN const char* s
Ap |NV |my_atof |NN const char *s
-#if !defined(HAS_MEMCPY) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY))
-Anp |void* |my_bcopy |NN const void* vfrom|NN void* vto|size_t len
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-Anp |void* |my_bzero |NN void* vloc|size_t len
-#endif
+AnpR |NV |my_strtod |NN const char * const s|NULLOK char ** e
Apr |void |my_exit |U32 status
Apr |void |my_failure_exit
Ap |I32 |my_fflush_all
@@ -945,11 +1119,8 @@ Anp |void |atfork_lock
Anp |void |atfork_unlock
Apmb |I32 |my_lstat
pX |I32 |my_lstat_flags |NULLOK const U32 flags
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-AnpP |int |my_memcmp |NN const void* vs1|NN const void* vs2|size_t len
-#endif
-#if !defined(HAS_MEMSET)
-Anp |void* |my_memset |NN void* vloc|int ch|size_t len
+#if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT))
+Exin |void * |my_memrchr |NN const char * s|const char c|const STRLEN len
#endif
#if !defined(PERL_IMPLICIT_SYS)
Ap |I32 |my_pclose |NULLOK PerlIO* ptr
@@ -962,32 +1133,33 @@ pX |I32 |my_stat_flags |NULLOK const U32 flags
Afp |char * |my_strftime |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
: Used in pp_ctl.c
p |void |my_unexec
-ADMnoPR |UV |NATIVE_TO_NEED |const UV enc|const UV ch
-ADMnoPR |UV |ASCII_TO_NEED |const UV enc|const UV ch
-Apa |OP* |newANONLIST |NULLOK OP* o
-Apa |OP* |newANONHASH |NULLOK OP* o
+AbDMnPR |UV |NATIVE_TO_NEED |const UV enc|const UV ch
+AbDMnPR |UV |ASCII_TO_NEED |const UV enc|const UV ch
+ApR |OP* |newANONLIST |NULLOK OP* o
+ApR |OP* |newANONHASH |NULLOK OP* o
Ap |OP* |newANONSUB |I32 floor|NULLOK OP* proto|NULLOK OP* block
-Apda |OP* |newASSIGNOP |I32 flags|NULLOK OP* left|I32 optype|NULLOK OP* right
-Apda |OP* |newCONDOP |I32 flags|NN OP* first|NULLOK OP* trueop|NULLOK OP* falseop
+ApdR |OP* |newASSIGNOP |I32 flags|NULLOK OP* left|I32 optype|NULLOK OP* right
+ApdR |OP* |newCONDOP |I32 flags|NN OP* first|NULLOK OP* trueop|NULLOK OP* falseop
Apd |CV* |newCONSTSUB |NULLOK HV* stash|NULLOK const char* name|NULLOK SV* sv
Apd |CV* |newCONSTSUB_flags|NULLOK HV* stash \
|NULLOK const char* name|STRLEN len \
|U32 flags|NULLOK SV* sv
Ap |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block
-Apda |OP* |newFOROP |I32 flags|NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont
-Apda |OP* |newGIVENOP |NN OP* cond|NN OP* block|PADOFFSET defsv_off
-Apda |OP* |newLOGOP |I32 optype|I32 flags|NN OP *first|NN OP *other
-Apda |OP* |newLOOPEX |I32 type|NN OP* label
-Apda |OP* |newLOOPOP |I32 flags|I32 debuggable|NULLOK OP* expr|NULLOK OP* block
-Apda |OP* |newNULLLIST
-Apda |OP* |newOP |I32 optype|I32 flags
+ApdR |OP* |newFOROP |I32 flags|NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont
+ApdR |OP* |newGIVENOP |NN OP* cond|NN OP* block|PADOFFSET defsv_off
+ApdR |OP* |newLOGOP |I32 optype|I32 flags|NN OP *first|NN OP *other
+pM |LOGOP* |alloc_LOGOP |I32 type|NULLOK OP *first|NULLOK OP *other
+ApdR |OP* |newLOOPEX |I32 type|NN OP* label
+ApdR |OP* |newLOOPOP |I32 flags|I32 debuggable|NULLOK OP* expr|NULLOK OP* block
+ApdR |OP* |newNULLLIST
+ApdR |OP* |newOP |I32 optype|I32 flags
Ap |void |newPROG |NN OP* o
-Apda |OP* |newRANGE |I32 flags|NN OP* left|NN OP* right
-Apda |OP* |newSLICEOP |I32 flags|NULLOK OP* subscript|NULLOK OP* listop
-Apda |OP* |newSTATEOP |I32 flags|NULLOK char* label|NULLOK OP* o
-Abm |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto \
+ApdR |OP* |newRANGE |I32 flags|NN OP* left|NN OP* right
+ApdR |OP* |newSLICEOP |I32 flags|NULLOK OP* subscript|NULLOK OP* listop
+ApdR |OP* |newSTATEOP |I32 flags|NULLOK char* label|NULLOK OP* o
+Apbm |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto \
|NULLOK OP* block
-p |CV * |newXS_len_flags|NULLOK const char *name|STRLEN len \
+pd |CV * |newXS_len_flags|NULLOK const char *name|STRLEN len \
|NN XSUBADDR_t subaddr\
|NULLOK const char *const filename \
|NULLOK const char *const proto \
@@ -998,57 +1170,59 @@ ApM |CV * |newXS_flags |NULLOK const char *name|NN XSUBADDR_t subaddr\
|NULLOK const char *const proto|U32 flags
Apd |CV* |newXS |NULLOK const char *name|NN XSUBADDR_t subaddr\
|NN const char *filename
-AmdbR |AV* |newAV
-Apa |OP* |newAVREF |NN OP* o
-Apda |OP* |newBINOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
-Apa |OP* |newCVREF |I32 flags|NULLOK OP* o
-Apda |OP* |newGVOP |I32 type|I32 flags|NN GV* gv
+ApmdbR |AV* |newAV
+ApR |OP* |newAVREF |NN OP* o
+ApdR |OP* |newBINOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
+ApR |OP* |newCVREF |I32 flags|NULLOK OP* o
+ApdR |OP* |newGVOP |I32 type|I32 flags|NN GV* gv
Am |GV* |newGVgen |NN const char* pack
-Apa |GV* |newGVgen_flags |NN const char* pack|U32 flags
-Apa |OP* |newGVREF |I32 type|NULLOK OP* o
-ApaR |OP* |newHVREF |NN OP* o
-AmdbR |HV* |newHV
-ApaR |HV* |newHVhv |NULLOK HV *hv
-Apabm |IO* |newIO
-Apda |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
-AMpdan |PADNAME *|newPADNAMEouter|NN PADNAME *outer
-AMpdan |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len
-AMpdan |PADNAMELIST *|newPADNAMELIST|size_t max
+ApR |GV* |newGVgen_flags |NN const char* pack|U32 flags
+ApR |OP* |newGVREF |I32 type|NULLOK OP* o
+ApR |OP* |newHVREF |NN OP* o
+ApmdbR |HV* |newHV
+ApR |HV* |newHVhv |NULLOK HV *hv
+ApRbm |IO* |newIO
+ApdR |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
+AMpdRn |PADNAME *|newPADNAMEouter|NN PADNAME *outer
+AMpdRn |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len
+AMpdRn |PADNAMELIST *|newPADNAMELIST|size_t max
#ifdef USE_ITHREADS
-Apda |OP* |newPADOP |I32 type|I32 flags|NN SV* sv
-#endif
-Apda |OP* |newPMOP |I32 type|I32 flags
-Apda |OP* |newPVOP |I32 type|I32 flags|NULLOK char* pv
-Apa |SV* |newRV |NN SV *const sv
-Apda |SV* |newRV_noinc |NN SV *const tmpRef
-Apda |SV* |newSV |const STRLEN len
-Apa |OP* |newSVREF |NN OP* o
-Apda |OP* |newSVOP |I32 type|I32 flags|NN SV* sv
+ApdR |OP* |newPADOP |I32 type|I32 flags|NN SV* sv
+#endif
+ApdR |OP* |newPMOP |I32 type|I32 flags
+ApdR |OP* |newPVOP |I32 type|I32 flags|NULLOK char* pv
+ApR |SV* |newRV |NN SV *const sv
+ApdR |SV* |newRV_noinc |NN SV *const tmpRef
+ApdR |SV* |newSV |const STRLEN len
+ApR |OP* |newSVREF |NN OP* o
+ApdR |OP* |newSVOP |I32 type|I32 flags|NN SV* sv
ApdR |OP* |newDEFSVOP
-pa |SV* |newSVavdefelem |NN AV *av|SSize_t ix|bool extendible
-Apda |SV* |newSViv |const IV i
-Apda |SV* |newSVuv |const UV u
-Apda |SV* |newSVnv |const NV n
-Apda |SV* |newSVpv |NULLOK const char *const s|const STRLEN len
-Apda |SV* |newSVpvn |NULLOK const char *const s|const STRLEN len
-Apda |SV* |newSVpvn_flags |NULLOK const char *const s|const STRLEN len|const U32 flags
-Apda |SV* |newSVhek |NULLOK const HEK *const hek
-Apda |SV* |newSVpvn_share |NULLOK const char* s|I32 len|U32 hash
-Apda |SV* |newSVpv_share |NULLOK const char* s|U32 hash
-Afpda |SV* |newSVpvf |NN const char *const pat|...
-Apa |SV* |vnewSVpvf |NN const char *const pat|NULLOK va_list *const args
+pR |SV* |newSVavdefelem |NN AV *av|SSize_t ix|bool extendible
+ApdR |SV* |newSViv |const IV i
+ApdR |SV* |newSVuv |const UV u
+ApdR |SV* |newSVnv |const NV n
+ApdR |SV* |newSVpv |NULLOK const char *const s|const STRLEN len
+ApdR |SV* |newSVpvn |NULLOK const char *const buffer|const STRLEN len
+ApdR |SV* |newSVpvn_flags |NULLOK const char *const s|const STRLEN len|const U32 flags
+ApdR |SV* |newSVhek |NULLOK const HEK *const hek
+ApdR |SV* |newSVpvn_share |NULLOK const char* s|I32 len|U32 hash
+ApdR |SV* |newSVpv_share |NULLOK const char* s|U32 hash
+AfpdR |SV* |newSVpvf |NN const char *const pat|...
+ApR |SV* |vnewSVpvf |NN const char *const pat|NULLOK va_list *const args
Apd |SV* |newSVrv |NN SV *const rv|NULLOK const char *const classname
-Apda |SV* |newSVsv |NULLOK SV *const old
-Apda |SV* |newSV_type |const svtype type
-Apda |OP* |newUNOP |I32 type|I32 flags|NULLOK OP* first
-Apda |OP* |newUNOP_AUX |I32 type|I32 flags|NULLOK OP* first \
+ApmbdR |SV* |newSVsv |NULLOK SV *const old
+ApmdR |SV* |newSVsv_nomg |NULLOK SV *const old
+ApR |SV* |newSVsv_flags |NULLOK SV *const old|I32 flags
+ApdR |SV* |newSV_type |const svtype type
+ApdR |OP* |newUNOP |I32 type|I32 flags|NULLOK OP* first
+ApdR |OP* |newUNOP_AUX |I32 type|I32 flags|NULLOK OP* first \
|NULLOK UNOP_AUX_item *aux
-Apda |OP* |newWHENOP |NULLOK OP* cond|NN OP* block
-Apda |OP* |newWHILEOP |I32 flags|I32 debuggable|NULLOK LOOP* loop \
+ApdR |OP* |newWHENOP |NULLOK OP* cond|NN OP* block
+ApdR |OP* |newWHILEOP |I32 flags|I32 debuggable|NULLOK LOOP* loop \
|NULLOK OP* expr|NULLOK OP* block|NULLOK OP* cont \
|I32 has_my
-Apda |OP* |newMETHOP |I32 type|I32 flags|NN OP* dynamic_meth
-Apda |OP* |newMETHOP_named|I32 type|I32 flags|NN SV* const_meth
+ApdR |OP* |newMETHOP |I32 type|I32 flags|NN OP* dynamic_meth
+ApdR |OP* |newMETHOP_named|I32 type|I32 flags|NN SV* const_meth
Apd |CV* |rv2cv_op_cv |NN OP *cvop|U32 flags
Apd |OP* |ck_entersub_args_list|NN OP *entersubop
Apd |OP* |ck_entersub_args_proto|NN OP *entersubop|NN GV *namegv|NN SV *protosv
@@ -1056,12 +1230,14 @@ Apd |OP* |ck_entersub_args_proto_or_list|NN OP *entersubop|NN GV *namegv|NN SV *
po |OP* |ck_entersub_args_core|NN OP *entersubop|NN GV *namegv \
|NN SV *protosv
Apd |void |cv_get_call_checker|NN CV *cv|NN Perl_call_checker *ckfun_p|NN SV **ckobj_p
+Apd |void |cv_get_call_checker_flags|NN CV *cv|U32 gflags|NN Perl_call_checker *ckfun_p|NN SV **ckobj_p|NN U32 *ckflags_p
Apd |void |cv_set_call_checker|NN CV *cv|NN Perl_call_checker ckfun|NN SV *ckobj
Apd |void |cv_set_call_checker_flags|NN CV *cv \
|NN Perl_call_checker ckfun \
- |NN SV *ckobj|U32 flags
+ |NN SV *ckobj|U32 ckflags
Apd |void |wrap_op_checker|Optype opcode|NN Perl_check_t new_checker|NN Perl_check_t *old_checker_p
-Apa |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
+AMpd |void |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p
+ApR |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
Ap |char* |scan_vstring |NN const char *s|NN const char *const e \
|NN SV *sv
Apd |const char* |scan_version |NN const char *s|NN SV *rv|bool qv
@@ -1077,8 +1253,13 @@ Apd |SV* |vstringify |NN SV *vs
Apd |int |vcmp |NN SV *lhv|NN SV *rhv
: Used in pp_hot.c and pp_sys.c
p |PerlIO*|nextargv |NN GV* gv|bool nomagicopen
-AnpP |char* |ninstr |NN const char* big|NN const char* bigend \
+#ifdef HAS_MEMMEM
+AdnopP |char* |ninstr |NN const char* big|NN const char* bigend \
|NN const char* little|NN const char* lend
+#else
+AdnpP |char* |ninstr |NN const char* big|NN const char* bigend \
+ |NN const char* little|NN const char* lend
+#endif
Apd |void |op_free |NULLOK OP* arg
Mp |OP* |op_unscope |NULLOK OP* o
#ifdef PERL_CORE
@@ -1118,7 +1299,7 @@ Ap |void |call_atexit |ATEXIT_t fn|NULLOK void *ptr
ApdO |I32 |call_argv |NN const char* sub_name|I32 flags|NN char** argv
ApdO |I32 |call_method |NN const char* methname|I32 flags
ApdO |I32 |call_pv |NN const char* sub_name|I32 flags
-ApdO |I32 |call_sv |NN SV* sv|VOL I32 flags
+ApdO |I32 |call_sv |NN SV* sv|volatile I32 flags
Ap |void |despatch_signals
Ap |OP * |doref |NN OP *o|I32 type|bool set_op_ref
ApdO |SV* |eval_pv |NN const char* p|I32 croak_on_error
@@ -1128,25 +1309,25 @@ ApdO |AV* |get_av |NN const char *name|I32 flags
ApdO |HV* |get_hv |NN const char *name|I32 flags
ApdO |CV* |get_cv |NN const char* name|I32 flags
Apd |CV* |get_cvn_flags |NN const char* name|STRLEN len|I32 flags
-#ifdef WIN32
-ApPM |char* |my_setlocale |int category|NULLOK const char* locale
+Ando |const char*|Perl_setlocale|const int category|NULLOK const char* locale
+#if defined(HAS_NL_LANGINFO) && defined(PERL_LANGINFO_H)
+Ando |const char*|Perl_langinfo|const nl_item item
#else
-AmPM |char* |my_setlocale |int category|NULLOK const char* locale
+Ando |const char*|Perl_langinfo|const int item
#endif
ApOM |int |init_i18nl10n |int printwarn
-ApOM |int |init_i18nl14n |int printwarn
-ApM |char* |my_strerror |const int errnum
-ApOM |void |new_collate |NULLOK const char* newcoll
-ApOM |void |new_ctype |NN const char* newctype
-EXpMn |void |_warn_problematic_locale
-ApOM |void |new_numeric |NULLOK const char* newcoll
-Ap |void |set_numeric_local
-Ap |void |set_numeric_radix
-Ap |void |set_numeric_standard
-ApM |bool |_is_in_locale_category|const bool compiling|const int category
-Apd |void |sync_locale
+AbpOM |int |init_i18nl14n |int printwarn
+p |char* |my_strerror |const int errnum
+Xpn |void |_warn_problematic_locale
+Xp |void |set_numeric_underlying
+Xp |void |set_numeric_standard
+Xp |bool |_is_in_locale_category|const bool compiling|const int category
+Apdn |void |switch_to_global_locale
+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)
@@ -1154,22 +1335,19 @@ s |void |pidgone |Pid_t pid|int status
#endif
: Used in perly.y
p |OP* |pmruntime |NN OP *o|NN OP *expr|NULLOK OP *repl \
- |bool isreg|I32 floor
+ |UV flags|I32 floor
#if defined(PERL_IN_OP_C)
s |OP* |pmtrans |NN OP* o|NN OP* expr|NN OP* repl
#endif
Ap |void |pop_scope
Ap |void |push_scope
-Amb |OP* |ref |NULLOK OP* o|I32 type
+Apmb |OP* |ref |NULLOK OP* o|I32 type
#if defined(PERL_IN_OP_C)
s |OP* |refkids |NULLOK OP* o|I32 type
#endif
Ap |void |regdump |NN const regexp* r
-ApM |SV* |regclass_swash |NULLOK const regexp *prog \
- |NN const struct regnode *node|bool doinit \
- |NULLOK SV **listsvp|NULLOK SV **altsvp
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
-AMpR |SV* |_new_invlist_C_array|NN const UV* const list
+EXpR |SV* |_new_invlist_C_array|NN const UV* const list
EXMp |bool |_invlistEQ |NN SV* const a|NN SV* const b|const bool complement_b
#endif
Ap |I32 |pregexec |NN REGEXP * const prog|NN char* stringarg \
@@ -1178,7 +1356,7 @@ Ap |I32 |pregexec |NN REGEXP * const prog|NN char* stringarg \
Ap |void |pregfree |NULLOK REGEXP* r
Ap |void |pregfree2 |NN REGEXP *rx
: FIXME - is anything in re using this now?
-EXp |REGEXP*|reg_temp_copy |NULLOK REGEXP* ret_x|NN REGEXP* rx
+EXp |REGEXP*|reg_temp_copy |NULLOK REGEXP* dsv|NN REGEXP* ssv
Ap |void |regfree_internal|NN REGEXP *const rx
#if defined(USE_ITHREADS)
Ap |void* |regdupe_internal|NN REGEXP * const r|NN CLONE_PARAMS* param
@@ -1190,7 +1368,7 @@ p |REGEXP*|re_op_compile |NULLOK SV ** const patternp \
|NN const regexp_engine* eng \
|NULLOK REGEXP *old_re \
|NULLOK bool *is_bare_re \
- |U32 rx_flags|U32 pm_flags
+ |const U32 rx_flags|const U32 pm_flags
Ap |REGEXP*|re_compile |NN SV * const pattern|U32 orig_rx_flags
Ap |char* |re_intuit_start|NN REGEXP * const rx \
|NULLOK SV* sv \
@@ -1205,16 +1383,16 @@ Ap |I32 |regexec_flags |NN REGEXP *const rx|NN char *stringarg \
|SSize_t minend|NN SV *sv \
|NULLOK void *data|U32 flags
ApR |regnode*|regnext |NULLOK regnode* p
-EXp |SV*|reg_named_buff |NN REGEXP * const rx|NULLOK SV * const key \
+EXp |SV*|reg_named_buff |NN REGEXP * const rx|NULLOK SV * const key \
|NULLOK SV * const value|const U32 flags
-EXp |SV*|reg_named_buff_iter |NN REGEXP * const rx|NULLOK const SV * const lastkey \
+EXp |SV*|reg_named_buff_iter |NN REGEXP * const rx|NULLOK const SV * const lastkey \
|const U32 flags
-Ap |SV*|reg_named_buff_fetch |NN REGEXP * const rx|NN SV * const namesv|const U32 flags
-Ap |bool|reg_named_buff_exists |NN REGEXP * const rx|NN SV * const key|const U32 flags
-Ap |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags
-Ap |SV*|reg_named_buff_nextkey |NN REGEXP * const rx|const U32 flags
-Ap |SV*|reg_named_buff_scalar |NN REGEXP * const rx|const U32 flags
-Ap |SV*|reg_named_buff_all |NN REGEXP * const rx|const U32 flags
+Ap |SV*|reg_named_buff_fetch |NN REGEXP * const rx|NN SV * const namesv|const U32 flags
+Ap |bool|reg_named_buff_exists |NN REGEXP * const rx|NN SV * const key|const U32 flags
+Ap |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags
+Ap |SV*|reg_named_buff_nextkey |NN REGEXP * const rx|const U32 flags
+Ap |SV*|reg_named_buff_scalar |NN REGEXP * const rx|const U32 flags
+Ap |SV*|reg_named_buff_all |NN REGEXP * const rx|const U32 flags
: FIXME - is anything in re using this now?
EXp |void|reg_numbered_buff_fetch|NN REGEXP * const rx|const I32 paren|NULLOK SV * const sv
@@ -1227,7 +1405,7 @@ EXp |I32|reg_numbered_buff_length|NN REGEXP * const rx|NN const SV * const sv|co
EXp |SV*|reg_qr_package|NN REGEXP * const rx
Anp |void |repeatcpy |NN char* to|NN const char* from|I32 len|IV count
-AnpP |char* |rninstr |NN const char* big|NN const char* bigend \
+AdnpP |char* |rninstr |NN const char* big|NN const char* bigend \
|NN const char* little|NN const char* lend
Ap |Sighandler_t|rsignal |int i|Sighandler_t t
: Used in pp_sys.c
@@ -1288,10 +1466,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
@@ -1331,7 +1509,7 @@ AMpd |OP* |op_scope |NULLOK OP* o
: Only used by perl.c/miniperl.c, but defined in caretx.c
px |void |set_caret_X
Apd |void |setdefout |NN GV* gv
-Ap |HEK* |share_hek |NN const char* str|I32 len|U32 hash
+Ap |HEK* |share_hek |NN const char* str|SSize_t len|U32 hash
#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
: Used in perl.c
np |Signal_t |sighandler |int sig|NULLOK siginfo_t *info|NULLOK void *uap
@@ -1342,9 +1520,10 @@ Anp |Signal_t |csighandler |int sig
#endif
Ap |SV** |stack_grow |NN SV** sp|NN SV** p|SSize_t n
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
@@ -1352,25 +1531,25 @@ Apd |IO* |sv_2io |NN SV *const sv
#if defined(PERL_IN_SV_C)
s |bool |glob_2number |NN GV* const gv
#endif
-Amb |IV |sv_2iv |NN SV *sv
+Apmb |IV |sv_2iv |NN SV *sv
Apd |IV |sv_2iv_flags |NN SV *const sv|const I32 flags
Apd |SV* |sv_2mortal |NULLOK SV *const sv
Apd |NV |sv_2nv_flags |NN SV *const sv|const I32 flags
: Used in pp.c, pp_hot.c, sv.c
pMd |SV* |sv_2num |NN SV *const sv
-Amb |char* |sv_2pv |NN SV *sv|NULLOK STRLEN *lp
+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
-Amb |UV |sv_2uv |NN SV *sv
+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 \
@@ -1388,8 +1567,8 @@ Afpd |void |sv_catpvf |NN SV *const sv|NN const char *const pat|...
Apd |void |sv_vcatpvf |NN SV *const sv|NN const char *const pat \
|NULLOK va_list *const args
Apd |void |sv_catpv |NN SV *const sv|NULLOK const char* ptr
-Amdb |void |sv_catpvn |NN SV *dsv|NN const char *sstr|STRLEN len
-Amdb |void |sv_catsv |NN SV *dstr|NULLOK SV *sstr
+Apmdb |void |sv_catpvn |NN SV *dsv|NN const char *sstr|STRLEN len
+Apmdb |void |sv_catsv |NN SV *dstr|NULLOK SV *sstr
Apd |void |sv_chop |NN SV *const sv|NULLOK const char *const ptr
: Used only in perl.c
pd |I32 |sv_clean_all
@@ -1406,13 +1585,13 @@ 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
Apd |void |sv_dec |NULLOK SV *const sv
Apd |void |sv_dec_nomg |NULLOK SV *const sv
-Ap |void |sv_dump |NN SV* sv
+Ap |void |sv_dump |NULLOK SV* sv
ApdR |bool |sv_derived_from|NN SV* sv|NN const char *const name
ApdR |bool |sv_derived_from_sv|NN SV* sv|NN SV *namesv|U32 flags
ApdR |bool |sv_derived_from_pv|NN SV* sv|NN const char *const name|U32 flags
@@ -1423,7 +1602,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
@@ -1433,11 +1612,11 @@ Apd |char* |sv_gets |NN SV *const sv|NN PerlIO *const fp|I32 append
Apd |char* |sv_grow |NN SV *const sv|STRLEN newlen
Apd |void |sv_inc |NULLOK SV *const sv
Apd |void |sv_inc_nomg |NULLOK SV *const sv
-Amdb |void |sv_insert |NN SV *const bigstr|const STRLEN offset \
+Apmdb |void |sv_insert |NN SV *const bigstr|const STRLEN offset \
|const STRLEN len|NN const char *const little \
|const STRLEN littlelen
Apd |void |sv_insert_flags|NN SV *const bigstr|const STRLEN offset|const STRLEN len \
- |NN const char *const little|const STRLEN littlelen|const U32 flags
+ |NN const char *little|const STRLEN littlelen|const U32 flags
Apd |int |sv_isa |NULLOK SV* sv|NN const char *const name
Apd |int |sv_isobject |NULLOK SV* sv
Apd |STRLEN |sv_len |NULLOK SV *const sv
@@ -1448,13 +1627,11 @@ Apd |void |sv_magic |NN SV *const sv|NULLOK SV *const obj|const int how \
Apd |MAGIC *|sv_magicext |NN SV *const sv|NULLOK SV *const obj|const int how \
|NULLOK const MGVTBL *const vtbl|NULLOK const char *const name \
|const I32 namlen
-#ifndef PERL_NO_INLINE_FUNCTIONS
Ein |bool |sv_only_taint_gmagic|NN SV *sv
-#endif
: exported for re.pm
EXp |MAGIC *|sv_magicext_mglob|NN SV *sv
-ApdbamR |SV* |sv_mortalcopy |NULLOK SV *const oldsv
-XpaR |SV* |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags
+ApdbmR |SV* |sv_mortalcopy |NULLOK SV *const oldsv
+XpR |SV* |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags
ApdR |SV* |sv_newmortal
Apd |SV* |sv_newref |NULLOK SV *const sv
Ap |char* |sv_peek |NULLOK SV* sv
@@ -1464,7 +1641,7 @@ Apd |STRLEN |sv_pos_u2b_flags|NN SV *const sv|STRLEN uoffset \
Apd |void |sv_pos_b2u |NULLOK SV *const sv|NN I32 *const offsetp
Apd |STRLEN |sv_pos_b2u_flags|NN SV *const sv|STRLEN const offset \
|U32 flags
-Amdb |char* |sv_pvn_force |NN SV* sv|NULLOK STRLEN* lp
+Apmdb |char* |sv_pvn_force |NN SV* sv|NULLOK STRLEN* lp
Apd |char* |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp
Apd |char* |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const lp
Apd |char* |sv_recode_to_utf8 |NN SV* sv|NN SV *encoding
@@ -1492,9 +1669,10 @@ Apd |SV* |sv_setref_pvn |NN SV *const rv|NULLOK const char *const classname \
|NN const char *const pv|const STRLEN n
Apd |void |sv_setpv |NN SV *const sv|NULLOK const char *const ptr
Apd |void |sv_setpvn |NN SV *const sv|NULLOK const char *const ptr|const STRLEN len
+Apd |char *|sv_setpv_bufsize|NN SV *const sv|const STRLEN cur|const STRLEN len
Xp |void |sv_sethek |NN SV *const sv|NULLOK const HEK *const hek
-Amdb |void |sv_setsv |NN SV *dstr|NULLOK SV *sstr
-Amdb |void |sv_taint |NN SV* sv
+Apmdb |void |sv_setsv |NN SV *dstr|NULLOK SV *sstr
+Apmdb |void |sv_taint |NN SV* sv
ApdR |bool |sv_tainted |NN SV *const sv
Apd |int |sv_unmagic |NN SV *const sv|const int type
Apd |int |sv_unmagicext |NN SV *const sv|const int type|NULLOK MGVTBL *vtbl
@@ -1506,34 +1684,34 @@ Apdmb |void |sv_usepvn |NN SV* sv|NULLOK char* ptr|STRLEN len
Apd |void |sv_usepvn_flags|NN SV *const sv|NULLOK char* ptr|const STRLEN len\
|const U32 flags
Apd |void |sv_vcatpvfn |NN SV *const sv|NN const char *const pat|const STRLEN patlen \
- |NULLOK va_list *const args|NULLOK SV **const svargs|const I32 svmax \
+ |NULLOK va_list *const args|NULLOK SV **const svargs|const Size_t sv_count \
|NULLOK bool *const maybe_tainted
Apd |void |sv_vcatpvfn_flags|NN SV *const sv|NN const char *const pat|const STRLEN patlen \
- |NULLOK va_list *const args|NULLOK SV **const svargs|const I32 svmax \
+ |NULLOK va_list *const args|NULLOK SV **const svargs|const Size_t sv_count \
|NULLOK bool *const maybe_tainted|const U32 flags
Apd |void |sv_vsetpvfn |NN SV *const sv|NN const char *const pat|const STRLEN patlen \
|NULLOK va_list *const args|NULLOK SV **const svargs \
- |const I32 svmax|NULLOK bool *const maybe_tainted
+ |const Size_t sv_count|NULLOK bool *const maybe_tainted
ApR |NV |str_to_version |NN SV *sv
-ApRM |SV* |swash_init |NN const char* pkg|NN const char* name|NN SV* listsv|I32 minbits|I32 none
-ApM |UV |swash_fetch |NN SV *swash|NN const U8 *ptr|bool do_utf8
+EXpRM |SV* |swash_init |NN const char* pkg|NN const char* name|NN SV* listsv|I32 minbits|I32 none
+EXpM |UV |swash_fetch |NN SV *swash|NN const U8 *ptr|bool do_utf8
#ifdef PERL_IN_REGCOMP_C
EiMR |SV* |add_cp_to_invlist |NULLOK SV* invlist|const UV cp
-EsM |void |_append_range_to_invlist |NN SV* const invlist|const UV start|const UV end
-EiMRn |UV* |_invlist_array_init |NN SV* const invlist|const bool will_have_0
-EsM |void |invlist_extend |NN SV* const invlist|const UV len
-EiMRn |UV |invlist_max |NN SV* const invlist
-EiM |void |invlist_set_len|NN SV* const invlist|const UV len|const bool offset
EiMRn |bool |invlist_is_iterating|NN SV* const invlist
#ifndef PERL_EXT_RE_BUILD
+EiMRn |UV* |_invlist_array_init |NN SV* const invlist|const bool will_have_0
+EiMRn |UV |invlist_max |NN SV* const invlist
+EsM |void |_append_range_to_invlist |NN SV* const invlist|const UV start|const UV end
+EsM |void |invlist_extend |NN SV* const invlist|const UV len
EsM |void |invlist_replace_list_destroys_src|NN SV *dest|NN SV *src
EiMRn |IV* |get_invlist_previous_index_addr|NN SV* invlist
+EiM |void |invlist_set_len|NN SV* const invlist|const UV len|const bool offset
EiMn |void |invlist_set_previous_index|NN SV* const invlist|const IV index
EiMRn |IV |invlist_previous_index|NN SV* const invlist
EiMn |void |invlist_trim |NN SV* invlist
EiM |void |invlist_clear |NN SV* invlist
+sM |void |initialize_invlist_guts|NN SV* invlist|const Size_t initial_size
#endif
-EiMR |SV* |invlist_clone |NN SV* const invlist
EiMRn |STRLEN*|get_invlist_iter_addr |NN SV* invlist
EiMn |void |invlist_iterinit|NN SV* invlist
EsMRn |bool |invlist_iternext|NN SV* invlist|NN UV* start|NN UV* end
@@ -1543,6 +1721,7 @@ EMRs |SV* |_make_exactf_invlist |NN RExC_state_t *pRExC_state \
|NN regnode *node
EsMR |SV* |invlist_contents|NN SV* const invlist \
|const bool traditional_style
+EsRn |bool |new_regcurly |NN const char *s|NN const char *e
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
EXmM |void |_invlist_intersection |NN SV* const a|NN SV* const b|NN SV** i
@@ -1556,34 +1735,28 @@ EXpM |void |_invlist_union_maybe_complement_2nd \
EXmM |void |_invlist_subtract|NN SV* const a|NN SV* const b|NN SV** result
EXpM |void |_invlist_invert|NN SV* const invlist
EXMpR |SV* |_new_invlist |IV initial_size
-EXMpR |SV* |_swash_to_invlist |NN SV* const swash
-EXMpR |SV* |_add_range_to_invlist |NULLOK SV* invlist|const UV start|const UV end
+EXMpR |SV* |_add_range_to_invlist |NULLOK SV* invlist|UV start|UV end
EXMpR |SV* |_setup_canned_invlist|const STRLEN size|const UV element0|NN UV** other_elements_ptr
-EXMpn |void |_invlist_populate_swatch |NN SV* const invlist|const UV start|const UV end|NN U8* swatch
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_TOKE_C)
-EXp |SV* |_core_swash_init|NN const char* pkg|NN const char* name \
- |NN SV* listsv|I32 minbits|I32 none \
- |NULLOK SV* invlist|NULLOK U8* const flags_p
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_SV_C)
+EMpX |SV* |invlist_clone |NN SV* const invlist|NULLOK SV* newlist
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
EiMRn |UV* |invlist_array |NN SV* const invlist
+EiMRn |bool |is_invlist |NULLOK SV* const invlist
EiMRn |bool* |get_invlist_offset_addr|NN SV* invlist
EiMRn |UV |_invlist_len |NN SV* const invlist
EMiRn |bool |_invlist_contains_cp|NN SV* const invlist|const UV cp
-EXpMRn |IV |_invlist_search |NN SV* const invlist|const UV cp
-EXMpR |SV* |_get_swash_invlist|NN SV* const swash
-EXMpR |HV* |_swash_inversion_hash |NN SV* const swash
+EXpMRn |SSize_t|_invlist_search |NN SV* const invlist|const UV cp
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-ApM |SV* |_get_regclass_nonbitmap_data \
+EXpM |SV* |_get_regclass_nonbitmap_data \
|NULLOK const regexp *prog \
|NN const struct regnode *node \
|bool doinit \
|NULLOK SV **listsvp \
|NULLOK SV **lonly_utf8_locale \
|NULLOK SV **output_invlist
-EXp |void|_load_PL_utf8_foldclosures|
#endif
#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C)
EXMp |void |_invlist_dump |NN PerlIO *file|I32 level \
@@ -1592,33 +1765,64 @@ EXMp |void |_invlist_dump |NN PerlIO *file|I32 level \
#endif
Ap |void |taint_env
Ap |void |taint_proper |NULLOK const char* f|NN const char *const s
-ApdD |UV |to_utf8_case |NN const U8 *p \
- |NN U8* ustrp \
- |NULLOK STRLEN *lenp \
- |NN SV **swashp \
- |NN const char *normal| \
- NULLOK const char *special
+EpM |char * |_byte_dump_string \
+ |NN const U8 * const start \
+ |const STRLEN len \
+ |const bool format
#if defined(PERL_IN_UTF8_C)
+inR |int |does_utf8_overflow|NN const U8 * const s \
+ |NN const U8 * e \
+ |const bool consider_overlongs
+inR |int |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s \
+ |const STRLEN len
+inR |int |isFF_OVERLONG |NN const U8 * const s|const STRLEN len
+sMR |char * |unexpected_non_continuation_text \
+ |NN const U8 * const s \
+ |STRLEN print_len \
+ |const STRLEN non_cont_byte_pos \
+ |const STRLEN expect_len
+s |void |warn_on_first_deprecated_use \
+ |NN const char * const name \
+ |NN const char * const alternative \
+ |const bool use_locale \
+ |NN const char * const file \
+ |const unsigned line
+s |U32 |check_and_deprecate \
+ |NN const U8 * p \
+ |NN const U8 ** e \
+ |const unsigned type \
+ |const bool use_locale \
+ |NN const char * const file \
+ |const unsigned line
s |UV |_to_utf8_case |const UV uv1 \
- |NN const U8 *p \
+ |NULLOK const U8 *p \
|NN U8* ustrp \
- |NULLOK STRLEN *lenp \
- |NN SV **swashp \
- |NN const char *normal \
- |NULLOK const char *special
-#endif
-Abmd |UV |to_utf8_lower |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp |UV |_to_utf8_lower_flags |NN const U8 *p|NN U8* ustrp \
- |NULLOK STRLEN *lenp|bool flags
-Abmd |UV |to_utf8_upper |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp |UV |_to_utf8_upper_flags |NN const U8 *p|NN U8* ustrp \
- |NULLOK STRLEN *lenp|bool flags
-Abmd |UV |to_utf8_title |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp |UV |_to_utf8_title_flags |NN const U8 *p|NN U8* ustrp \
- |NULLOK STRLEN *lenp|bool flags
-Abmd |UV |to_utf8_fold |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp |UV |_to_utf8_fold_flags|NN const U8 *p|NN U8* ustrp \
- |NULLOK STRLEN *lenp|U8 flags
+ |NN STRLEN *lenp \
+ |NN SV *invlist \
+ |NN const int * const invmap \
+ |NULLOK const unsigned int * const * const aux_tables \
+ |NULLOK const U8 * const aux_table_lengths \
+ |NN const char * const normal
+s |UV |turkic_fc |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+s |UV |turkic_lc |NN const U8 * const p0|NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+s |UV |turkic_uc |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+#endif
+ApbmdD |UV |to_utf8_lower |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
+AMp |UV |_to_utf8_lower_flags|NN const U8 *p|NULLOK const U8* e \
+ |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags \
+ |NN const char * const file|const int line
+ApbmdD |UV |to_utf8_upper |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
+AMp |UV |_to_utf8_upper_flags |NN const U8 *p|NULLOK const U8 *e \
+ |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags \
+ |NN const char * const file|const int line
+ApbmdD |UV |to_utf8_title |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
+AMp |UV |_to_utf8_title_flags |NN const U8 *p|NULLOK const U8* e \
+ |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags \
+ |NN const char * const file|const int line
+ApbmdD |UV |to_utf8_fold |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
+AMp |UV |_to_utf8_fold_flags|NN const U8 *p|NULLOK const U8 *e \
+ |NN U8* ustrp|NULLOK STRLEN *lenp|U8 flags \
+ |NN const char * const file|const int line
#if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C)
pn |bool |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
|bool pos1_is_uv|IV len_iv \
@@ -1628,45 +1832,80 @@ pn |bool |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
#if defined(UNLINK_ALL_VERSIONS)
Ap |I32 |unlnk |NN const char* f
#endif
-Apd |I32 |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 |I32 |unpackstring |NN const char *pat|NN const char *patend|NN const char *s \
+Apd |SSize_t|unpackstring |NN const char *pat|NN const char *patend|NN const char *s \
|NN const char *strend|U32 flags
Ap |void |unsharepvn |NULLOK const char* sv|I32 len|U32 hash
: Used in gv.c, hv.c
p |void |unshare_hek |NULLOK HEK* hek
: Used in perly.y
p |void |utilize |int aver|I32 floor|NULLOK OP* version|NN OP* idop|NULLOK OP* arg
-Ap |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
-Ap |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
-AdpPR |STRLEN |utf8_length |NN const U8* s|NN const U8 *e
-ApdPR |IV |utf8_distance |NN const U8 *a|NN const U8 *b
-ApdPRn |U8* |utf8_hop |NN const U8 *s|SSize_t off
-ApMd |U8* |utf8_to_bytes |NN U8 *s|NN STRLEN *len
+ApM |void |_force_out_malformed_utf8_message \
+ |NN const U8 *const p|NN const U8 * const e|const U32 flags \
+ |const bool die_here
+EXp |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
+EXp |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
+AdpR |STRLEN |utf8_length |NN const U8* s|NN const U8 *e
+AipdR |IV |utf8_distance |NN const U8 *a|NN const U8 *b
+AipdRn |U8* |utf8_hop |NN const U8 *s|SSize_t off
+AipdRn |U8* |utf8_hop_back|NN const U8 *s|SSize_t off|NN const U8 *start
+AipdRn |U8* |utf8_hop_forward|NN const U8 *s|SSize_t off|NN const U8 *end
+AipdRn |U8* |utf8_hop_safe |NN const U8 *s|SSize_t off|NN const U8 *start|NN const U8 *end
+ApMd |U8* |utf8_to_bytes |NN U8 *s|NN STRLEN *lenp
Apd |int |bytes_cmp_utf8 |NN const U8 *b|STRLEN blen|NN const U8 *u \
|STRLEN ulen
-ApMd |U8* |bytes_from_utf8|NN const U8 *s|NN STRLEN *len|NULLOK bool *is_utf8
-ApMd |U8* |bytes_to_utf8 |NN const U8 *s|NN STRLEN *len
+AModp |U8* |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NN bool *is_utf8p
+AMnp |U8* |bytes_from_utf8_loc|NN const U8 *s \
+ |NN STRLEN *lenp \
+ |NN bool *is_utf8p \
+ |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
-Amd |UV |utf8_to_uvchr_buf |NN const U8 *s|NN const U8 *send|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
-Adp |UV |utf8n_to_uvchr |NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
-ApM |UV |valid_utf8_to_uvchr |NN const U8 *s|NULLOK STRLEN *retlen
-
+Adnop |UV |utf8n_to_uvchr |NN const U8 *s \
+ |STRLEN curlen \
+ |NULLOK STRLEN *retlen \
+ |const U32 flags
+Adnop |UV |utf8n_to_uvchr_error|NN const U8 *s \
+ |STRLEN curlen \
+ |NULLOK STRLEN *retlen \
+ |const U32 flags \
+ |NULLOK U32 * errors
+AMndi |UV |utf8n_to_uvchr_msgs|NN const U8 *s \
+ |STRLEN curlen \
+ |NULLOK STRLEN *retlen \
+ |const U32 flags \
+ |NULLOK U32 * errors \
+ |NULLOK AV ** msgs
+AMnp |UV |_utf8n_to_uvchr_msgs_helper \
+ |NN const U8 *s \
+ |STRLEN curlen \
+ |NULLOK STRLEN *retlen \
+ |const U32 flags \
+ |NULLOK U32 * errors \
+ |NULLOK AV ** msgs
+AipnR |UV |valid_utf8_to_uvchr |NN const U8 *s|NULLOK STRLEN *retlen
Ap |UV |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
Adm |U8* |uvchr_to_utf8 |NN U8 *d|UV uv
Ap |U8* |uvuni_to_utf8 |NN U8 *d|UV uv
Adm |U8* |uvchr_to_utf8_flags |NN U8 *d|UV uv|UV flags
-Apd |U8* |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|UV flags
+AdmM |U8* |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
+Apod |U8* |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|const UV flags
+ApM |U8* |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV uv|const UV flags|NULLOK HV** msgs
Ap |U8* |uvuni_to_utf8_flags |NN U8 *d|UV uv|UV flags
Apd |char* |pv_uni_display |NN SV *dsv|NN const U8 *spv|STRLEN len|STRLEN pvlim|UV flags
ApdR |char* |sv_uni_display |NN SV *dsv|NN SV *ssv|STRLEN pvlim|UV flags
+EXpR |Size_t |_inverse_folds |const UV cp \
+ |NN unsigned int * first_folds_to \
+ |NN const unsigned int ** remaining_folds_to
: Used by Data::Alias
EXp |void |vivify_defelem |NN SV* sv
: Used in pp.c
@@ -1679,7 +1918,7 @@ Ap |U32 |seed
Xpno |double |drand48_r |NN perl_drand48_t *random_state
Xpno |void |drand48_init_r |NN perl_drand48_t *random_state|U32 seed
: Only used in perl.c
-p |void |get_hash_seed |NN unsigned char * const seed_buffer
+p |void |get_hash_seed |NN unsigned char * const seed_buffer
: Used in doio.c, pp_hot.c, pp_sys.c
p |void |report_evil_fh |NULLOK const GV *gv
: Used in doio.c, pp_hot.c, pp_sys.c
@@ -1707,13 +1946,11 @@ Apd |bool |dump_c_backtrace|NN PerlIO* fp|int max_depth|int skip
: FIXME
p |void |watch |NN char** addr
Am |I32 |whichsig |NN const char* sig
-Ap |I32 |whichsig_sv |NN SV* sigsv
-Ap |I32 |whichsig_pv |NN const char* sig
-Ap |I32 |whichsig_pvn |NN const char* sig|STRLEN len
-#ifndef PERL_NO_INLINE_FUNCTIONS
+Ap |I32 |whichsig_sv |NN SV* sigsv
+Ap |I32 |whichsig_pv |NN const char* sig
+Ap |I32 |whichsig_pvn |NN const char* sig|STRLEN len
: used to check for NULs in pathnames and other names
AiR |bool |is_safe_syscall|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
-#endif
#ifdef PERL_CORE
inR |bool |should_warn_nl|NN const char *pv
#endif
@@ -1721,8 +1958,10 @@ inR |bool |should_warn_nl|NN const char *pv
p |void |write_to_stderr|NN SV* msv
: Used in op.c
p |int |yyerror |NN const char *const s
+p |void |yyquit
+pr |void |abort_execution|NN const char * const msg|NN const char * const name
p |int |yyerror_pv |NN const char *const s|U32 flags
-p |int |yyerror_pvn |NN const char *const s|STRLEN len|U32 flags
+p |int |yyerror_pvn |NULLOK const char *const s|STRLEN len|U32 flags
: Used in perly.y, and by Data::Alias
EXp |int |yylex
p |void |yyunlex
@@ -1743,7 +1982,7 @@ Ap |int |get_mstats |NN perl_mstats_t *buf|int buflen|int level
#endif
Anpa |Malloc_t|safesysmalloc |MEM_SIZE nbytes
Anpa |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
-Anpa |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
+AnpR |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
Anp |Free_t |safesysfree |Malloc_t where
Asrnx |void |croak_memory_wrap
#if defined(PERL_GLOBAL_STRUCT)
@@ -1777,7 +2016,7 @@ Apd |char* |pv_escape |NULLOK SV *dsv|NN char const * const str\
|const STRLEN count|const STRLEN max\
|NULLOK STRLEN * const escaped\
|const U32 flags
-Apd |char* |pv_pretty |NN SV *dsv|NN char const * const str\
+Apd |char* |pv_pretty |NN SV *dsv|NN char const * const str\
|const STRLEN count|const STRLEN max\
|NULLOK char const * const start_color\
|NULLOK char const * const end_color\
@@ -1802,24 +2041,25 @@ Ap |void |reginitcolors
ApdRmb |char* |sv_2pv_nolen |NN SV* sv
ApdRmb |char* |sv_2pvutf8_nolen|NN SV* sv
ApdRmb |char* |sv_2pvbyte_nolen|NN SV* sv
-AmdbR |char* |sv_pv |NN SV *sv
-AmdbR |char* |sv_pvutf8 |NN SV *sv
-AmdbR |char* |sv_pvbyte |NN SV *sv
-Amdb |STRLEN |sv_utf8_upgrade|NN SV *sv
+ApmdbR |char* |sv_pv |NN SV *sv
+ApmdbR |char* |sv_pvutf8 |NN SV *sv
+ApmdbR |char* |sv_pvbyte |NN SV *sv
+Apmdb |STRLEN |sv_utf8_upgrade|NN SV *sv
Amd |STRLEN |sv_utf8_upgrade_nomg|NN SV *sv
-ApdM |bool |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok
+Apd |bool |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok
Apd |void |sv_utf8_encode |NN SV *const sv
-ApdM |bool |sv_utf8_decode |NN SV *const sv
+Apd |bool |sv_utf8_decode |NN SV *const sv
Apdmb |void |sv_force_normal|NN SV *sv
Apd |void |sv_force_normal_flags|NN SV *const sv|const U32 flags
pX |SSize_t|tmps_grow_p |SSize_t ix
Apd |SV* |sv_rvweaken |NN SV *const sv
-AnpPMd |SV* |sv_get_backrefs|NN SV *const sv
+Apd |SV* |sv_rvunweaken |NN SV *const sv
+AnpMd |SV* |sv_get_backrefs|NN SV *const sv
: This is indirectly referenced by globals.c. This is somewhat annoying.
p |int |magic_killbackrefs|NN SV *sv|NN MAGIC *mg
Ap |OP* |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
Am |CV* |newATTRSUB |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
-pX |CV* |newATTRSUB_x |I32 floor|NULLOK OP *o|NULLOK OP *proto \
+pdX |CV* |newATTRSUB_x |I32 floor|NULLOK OP *o|NULLOK OP *proto \
|NULLOK OP *attrs|NULLOK OP *block \
|bool o_is_gv
Ap |CV * |newMYSUB |I32 floor|NN OP *o|NULLOK OP *proto \
@@ -1830,7 +2070,7 @@ p |OP * |my_attrs |NN OP *o|NULLOK OP *attrs
#if defined(USE_ITHREADS)
ApR |PERL_CONTEXT*|cx_dup |NULLOK PERL_CONTEXT* cx|I32 ix|I32 max|NN CLONE_PARAMS* param
ApR |PERL_SI*|si_dup |NULLOK PERL_SI* si|NN CLONE_PARAMS* param
-Apa |ANY* |ss_dup |NN PerlInterpreter* proto_perl|NN CLONE_PARAMS* param
+ApR |ANY* |ss_dup |NN PerlInterpreter* proto_perl|NN CLONE_PARAMS* param
ApR |void* |any_dup |NULLOK void* v|NN const PerlInterpreter* proto_perl
ApR |HE* |he_dup |NULLOK const HE* e|bool shared|NN CLONE_PARAMS* param
ApR |HEK* |hek_dup |NULLOK HEK* e|NN CLONE_PARAMS* param
@@ -1852,7 +2092,7 @@ ApR |SV* |sv_dup_inc |NULLOK const SV *const sstr \
Ap |void |rvpv_dup |NN SV *const dstr|NN const SV *const sstr|NN CLONE_PARAMS *const param
Ap |yy_parser*|parser_dup |NULLOK const yy_parser *const proto|NN CLONE_PARAMS *const param
#endif
-Apa |PTR_TBL_t*|ptr_table_new
+ApR |PTR_TBL_t*|ptr_table_new
ApR |void* |ptr_table_fetch|NN PTR_TBL_t *const tbl|NULLOK const void *const sv
Ap |void |ptr_table_store|NN PTR_TBL_t *const tbl|NULLOK const void *const oldsv \
|NN void *const newsv
@@ -1867,9 +2107,9 @@ Ap |void |sys_intern_dup |NN struct interp_intern* src|NN struct interp_intern*
# endif
#endif
-AmopP |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
+Amop |const XOP * |custom_op_xop |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
@@ -1877,41 +2117,38 @@ Aop |void |custom_op_register |NN Perl_ppaddr_t ppaddr \
Adp |void |sv_nosharing |NULLOK SV *sv
Adpbm |void |sv_nolocking |NULLOK SV *sv
Adp |bool |sv_destroyable |NULLOK SV *sv
-#ifdef NO_MATHOMS
-Adpbm |void |sv_nounlocking |NULLOK SV *sv
-#else
Adpb |void |sv_nounlocking |NULLOK SV *sv
-#endif
Adp |int |nothreadhook
p |void |init_constants
#if defined(PERL_IN_DOOP_C)
-sR |I32 |do_trans_simple |NN SV * const sv
-sR |I32 |do_trans_count |NN SV * const sv
-sR |I32 |do_trans_complex |NN SV * const sv
-sR |I32 |do_trans_simple_utf8 |NN SV * const sv
-sR |I32 |do_trans_count_utf8 |NN SV * const sv
-sR |I32 |do_trans_complex_utf8 |NN SV * const sv
+sR |Size_t |do_trans_simple |NN SV * const sv
+sR |Size_t |do_trans_count |NN SV * const sv
+sR |Size_t |do_trans_complex |NN SV * const sv
+sR |Size_t |do_trans_simple_utf8 |NN SV * const sv
+sR |Size_t |do_trans_count_utf8 |NN SV * const sv
+sR |Size_t |do_trans_complex_utf8 |NN SV * const sv
#endif
#if defined(PERL_IN_GV_C)
s |void |gv_init_svtype |NN GV *gv|const svtype sv_type
s |void |gv_magicalize_isa |NN GV *gv
-s |bool|parse_gv_stash_name|NN HV **stash|NN GV **gv \
+s |bool|parse_gv_stash_name|NN HV **stash|NN GV **gv \
|NN const char **name|NN STRLEN *len \
|NN const char *nambeg|STRLEN full_len \
|const U32 is_utf8|const I32 add
-s |bool|find_default_stash|NN HV **stash|NN const char *name \
+s |bool|find_default_stash|NN HV **stash|NN const char *name \
|STRLEN len|const U32 is_utf8|const I32 add \
|const svtype sv_type
-s |bool|gv_magicalize|NN GV *gv|NN HV *stash|NN const char *name \
- |STRLEN len|bool addmg \
+s |bool|gv_magicalize|NN GV *gv|NN HV *stash|NN const char *name \
+ |STRLEN len \
|const svtype sv_type
-s |void|maybe_multimagic_gv|NN GV *gv|NN const char *name|const svtype sv_type
-s |bool|gv_is_in_main|NN const char *name|STRLEN len \
+s |void|maybe_multimagic_gv|NN GV *gv|NN const char *name|const svtype sv_type
+s |bool|gv_is_in_main|NN const char *name|STRLEN len \
|const U32 is_utf8
-s |HV* |require_tie_mod|NN GV *gv|NN const char *varpv|NN SV* namesv \
- |NN const char *methpv|const U32 flags
+s |void |require_tie_mod|NN GV *gv|NN const char varname \
+ |NN const char * name|STRLEN len \
+ |const U32 flags
#endif
#if defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C)
@@ -1920,13 +2157,13 @@ po |SV* |hfree_next_entry |NN HV *hv|NN STRLEN *indexp
#if defined(PERL_IN_HV_C)
s |void |hsplit |NN HV *hv|STRLEN const oldsize|STRLEN newsize
-s |void |hv_free_entries |NN HV *hv
+s |void |hv_free_entries|NN HV *hv
s |SV* |hv_free_ent_ret|NN HV *hv|NN HE *entry
-sa |HE* |new_he
+sR |HE* |new_he
sanR |HEK* |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
sn |void |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
s |void |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash
-sR |HEK* |share_hek_flags|NN const char *str|I32 len|U32 hash|int flags
+sR |HEK* |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags
rs |void |hv_notallowed |int flags|NN const char *key|I32 klen|NN const char *msg
in |U32|ptr_hash|PTRV u
s |struct xpvhv_aux*|hv_auxinit|NN HV *hv
@@ -1939,7 +2176,7 @@ sM |void |clear_placeholders |NN HV *hv|U32 items
#if defined(PERL_IN_MG_C)
s |void |save_magic_flags|I32 mgs_ix|NN SV *sv|U32 flags
--s |int |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN SV *meth
+s |int |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN SV *meth
s |SV* |magic_methcall1|NN SV *sv|NN const MAGIC *mg \
|NN SV *meth|U32 flags \
|int n|NULLOK SV *val
@@ -1982,7 +2219,7 @@ s |bool |process_special_blocks |I32 floor \
s |void |clear_special_blocks |NN const char *const fullname\
|NN GV *const gv|NN CV *const cv
#endif
-Xpa |void* |Slab_Alloc |size_t sz
+XpR |void* |Slab_Alloc |size_t sz
Xp |void |Slab_Free |NN void *op
#if defined(PERL_DEBUG_READONLY_OPS)
# if defined(PERL_CORE)
@@ -2038,17 +2275,17 @@ pRxo |GV* |softref2xv |NN SV *const sv|NN const char *const what \
#endif
#if defined(PERL_IN_PP_PACK_C)
-s |I32 |unpack_rec |NN struct tempsym* symptr|NN const char *s \
+s |SSize_t|unpack_rec |NN struct tempsym* symptr|NN const char *s \
|NN const char *strbeg|NN const char *strend|NULLOK const char **new_s
s |SV ** |pack_rec |NN SV *cat|NN struct tempsym* symptr|NN SV **beglist|NN SV **endlist
s |SV* |mul128 |NN SV *sv|U8 m
-s |I32 |measure_struct |NN struct tempsym* symptr
+s |SSize_t|measure_struct |NN struct tempsym* symptr
s |bool |next_symbol |NN struct tempsym* symptr
sR |SV* |is_an_int |NN const char *s|STRLEN l
s |int |div128 |NN SV *pnum|NN bool *done
s |const char *|group_end |NN const char *patptr|NN const char *patend \
|char ender
-sR |const char *|get_num |NN const char *patptr|NN I32 *lenptr
+sR |const char *|get_num |NN const char *patptr|NN SSize_t *lenptr
ns |bool |need_utf8 |NN const char *pat|NN const char *patend
ns |char |first_symbol |NN const char *pat|NN const char *patend
sR |char * |sv_exp_grow |NN SV *sv|STRLEN needed
@@ -2057,7 +2294,7 @@ snR |char * |my_bytes_to_utf8|NN const U8 *start|STRLEN len|NN char *dest \
#endif
#if defined(PERL_IN_PP_CTL_C)
-sR |OP* |docatch |NULLOK OP *o
+sR |OP* |docatch |Perl_ppaddr_t firstpp
sR |OP* |dofindlabel |NN OP *o|NN const char *label|STRLEN len \
|U32 flags|NN OP **opstack|NN OP **oplimit
s |MAGIC *|doparseform |NN SV *sv
@@ -2101,7 +2338,6 @@ s |I32 |amagic_cmp_locale|NN SV *const str1|NN SV *const str2
s |I32 |sortcv |NN SV *const a|NN SV *const b
s |I32 |sortcv_xsub |NN SV *const a|NN SV *const b
s |I32 |sortcv_stacked |NN SV *const a|NN SV *const b
-s |void |qsortsvu |NULLOK SV** array|size_t num_elts|NN SVCOMPARE_t compare
#endif
#if defined(PERL_IN_PP_SYS_C)
@@ -2109,7 +2345,7 @@ s |OP* |doform |NN CV *cv|NN GV *gv|NULLOK OP *retop
# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
sR |int |dooneliner |NN const char *cmd|NN const char *filename
# endif
-s |SV * |space_join_names_mortal|NN char *const *array
+s |SV * |space_join_names_mortal|NULLOK char *const *array
#endif
p |OP * |tied_method|NN SV *methname|NN SV **sp \
|NN SV *const sv|NN const MAGIC *const mg \
@@ -2121,72 +2357,77 @@ Ep |void |regprop |NULLOK const regexp *prog|NN SV* sv|NN const regnode* o|NULLO
Ep |int |re_printf |NN const char *fmt|...
#endif
#if defined(PERL_IN_REGCOMP_C)
-Es |regnode*|reg |NN RExC_state_t *pRExC_state \
+Es |regnode_offset|reg |NN RExC_state_t *pRExC_state \
|I32 paren|NN I32 *flagp|U32 depth
-Es |regnode*|regnode_guts |NN RExC_state_t *pRExC_state \
+Es |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state \
|const U8 op \
|const STRLEN extra_len \
|NN const char* const name
-Es |regnode*|reganode |NN RExC_state_t *pRExC_state|U8 op \
+Es |void |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size
+Es |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \
|U32 arg
-Es |regnode*|reg2Lanode |NN RExC_state_t *pRExC_state \
+Es |regnode_offset|reg2Lanode|NN RExC_state_t *pRExC_state \
|const U8 op \
|const U32 arg1 \
|const I32 arg2
-Es |regnode*|regatom |NN RExC_state_t *pRExC_state \
+Es |regnode_offset|regatom |NN RExC_state_t *pRExC_state \
|NN I32 *flagp|U32 depth
-Es |regnode*|regbranch |NN RExC_state_t *pRExC_state \
+Es |regnode_offset|regbranch |NN RExC_state_t *pRExC_state \
|NN I32 *flagp|I32 first|U32 depth
Es |void |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \
|NN regnode* const node \
|NULLOK SV* const cp_list \
- |NULLOK SV* const runtime_defns \
- |NULLOK SV* const only_utf8_locale_list \
- |NULLOK SV* const swash \
- |const bool has_user_defined_property
-Es |void |output_or_return_posix_warnings \
+ |NULLOK SV* const runtime_defns \
+ |NULLOK SV* const only_utf8_locale_list
+Es |void |output_posix_warnings \
|NN RExC_state_t *pRExC_state \
- |NN AV* posix_warnings \
- |NULLOK AV** return_posix_warnings
+ |NN AV* posix_warnings
Es |AV* |add_multi_match|NULLOK AV* multi_char_matches \
|NN SV* multi_string \
|const STRLEN cp_count
-Es |regnode*|regclass |NN RExC_state_t *pRExC_state \
+Es |regnode_offset|regclass|NN RExC_state_t *pRExC_state \
|NN I32 *flagp|U32 depth|const bool stop_at_1 \
|bool allow_multi_fold \
|const bool silence_non_portable \
|const bool strict \
|bool optimizable \
- |NULLOK SV** ret_invlist \
- |NULLOK AV** return_posix_warnings
+ |NULLOK SV** ret_invlist
Es |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \
|NN SV** invlist
-Ei |regnode*|handle_named_backref|NN RExC_state_t *pRExC_state \
+Ei |regnode_offset|handle_named_backref|NN RExC_state_t *pRExC_state \
|NN I32 *flagp \
|NN char * parse_start \
|char ch
-EsnP |unsigned int|regex_set_precedence|const U8 my_operator
-Es |regnode*|handle_regex_sets|NN RExC_state_t *pRExC_state \
+EsnR |unsigned int|regex_set_precedence|const U8 my_operator
+Es |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \
|NULLOK SV ** return_invlist \
|NN I32 *flagp|U32 depth \
|NN char * const oregcomp_parse
+Es |void |set_regex_pv |NN RExC_state_t *pRExC_state|NN REGEXP *Rx
+#if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING)
+Es |void |dump_regex_sets_structures \
+ |NN RExC_state_t *pRExC_state \
+ |NN AV * stack \
+ |const IV fence|NN AV * fence_stack
+#endif
Es |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
-Es |regnode*|reg_node |NN RExC_state_t *pRExC_state|U8 op
-Es |UV |reg_recode |const U8 value|NN SV **encp
-Es |regnode*|regpiece |NN RExC_state_t *pRExC_state \
+Es |regnode_offset|reg_node|NN RExC_state_t *pRExC_state|U8 op
+Es |regnode_offset|regpiece|NN RExC_state_t *pRExC_state \
|NN I32 *flagp|U32 depth
Es |bool |grok_bslash_N |NN RExC_state_t *pRExC_state \
- |NULLOK regnode** nodep \
+ |NULLOK regnode_offset* nodep \
|NULLOK UV *code_point_p \
|NULLOK int* cp_count \
|NN I32 *flagp \
|const bool strict \
|const U32 depth
Es |void |reginsert |NN RExC_state_t *pRExC_state \
- |U8 op|NN regnode *opnd|U32 depth
-Es |void |regtail |NN RExC_state_t * pRExC_state \
- |NN const regnode * const p \
- |NN const regnode * const val \
+ |const U8 op \
+ |const regnode_offset operand \
+ |const U32 depth
+Es |bool |regtail |NN RExC_state_t * pRExC_state \
+ |NN const regnode_offset p \
+ |NN const regnode_offset val \
|const U32 depth
Es |SV * |reg_scan_name |NN RExC_state_t *pRExC_state \
|U32 flags
@@ -2194,9 +2435,6 @@ Es |U32 |join_exact |NN RExC_state_t *pRExC_state \
|NN regnode *scan|NN UV *min_subtract \
|NN bool *unfolded_multi_char \
|U32 flags|NULLOK regnode *val|U32 depth
-Ei |void |alloc_maybe_populate_EXACT|NN RExC_state_t *pRExC_state \
- |NN regnode *node|NN I32 *flagp|STRLEN len \
- |UV code_point|bool downgradable
Ein |U8 |compute_EXACTish|NN RExC_state_t *pRExC_state
Es |void |nextchar |NN RExC_state_t *pRExC_state
Es |void |skip_to_be_ignored_text|NN RExC_state_t *pRExC_state \
@@ -2243,6 +2481,7 @@ Es |SSize_t|study_chunk |NN RExC_state_t *pRExC_state \
|I32 stopparen|U32 recursed_depth \
|NULLOK regnode_ssc *and_withp \
|U32 flags|U32 depth
+EsR |SV * |get_ANYOFM_contents|NN const regnode * n
EsRn |U32 |add_data |NN RExC_state_t* const pRExC_state \
|NN const char* const s|const U32 n
rs |void |re_croak2 |bool utf8|NN const char* pat1|NN const char* pat2|...
@@ -2258,15 +2497,34 @@ Es |I32 |make_trie |NN RExC_state_t *pRExC_state \
|U32 word_count|U32 flags|U32 depth
Es |regnode *|construct_ahocorasick_from_trie|NN RExC_state_t *pRExC_state \
|NN regnode *source|U32 depth
-EnPs |const char *|cntrl_to_mnemonic|const U8 c
-EnPs |int |edit_distance |NN const UV *src \
+EnsR |const char *|cntrl_to_mnemonic|const U8 c
+EnsR |int |edit_distance |NN const UV *src \
|NN const UV *tgt \
|const STRLEN x \
|const STRLEN y \
|const SSize_t maxDistance
+EpX |SV * |parse_uniprop_string|NN const char * const name \
+ |const Size_t name_len \
+ |const bool is_utf8 \
+ |const bool to_fold \
+ |const bool runtime \
+ |const bool deferrable \
+ |NN bool * user_defined_ptr \
+ |NN SV * msg \
+ |const STRLEN level
+EXp |SV * |handle_user_defined_property|NN const char * name \
+ |const STRLEN name_len \
+ |const bool is_utf8 \
+ |const bool to_fold \
+ |const bool runtime \
+ |const bool deferrable \
+ |NN SV* contents \
+ |NN bool *user_defined_ptr \
+ |NN SV * msg \
+ |const STRLEN level
# ifdef DEBUGGING
Ep |int |re_indentf |NN const char *fmt|U32 depth|...
-Es |void |regdump_intflags|NULLOK const char *lead| const U32 flags
+Es |void |regdump_intflags|NULLOK const char *lead| const U32 flags
Es |void |regdump_extflags|NULLOK const char *lead| const U32 flags
Es |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
|NN const regnode *node \
@@ -2275,10 +2533,11 @@ Es |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
|NN SV* sv|I32 indent|U32 depth
Es |void |put_code_point |NN SV* sv|UV c
Es |bool |put_charclass_bitmap_innards|NN SV* sv \
- |NN char* bitmap \
+ |NULLOK char* bitmap \
|NULLOK SV* nonbitmap_invlist \
|NULLOK SV* only_utf8_locale_invlist\
- |NULLOK const regnode * const node
+ |NULLOK const regnode * const node \
+ |const bool force_as_is_display
Es |SV* |put_charclass_bitmap_innards_common \
|NN SV* invlist \
|NULLOK SV* posixes \
@@ -2300,34 +2559,47 @@ Es |void |dump_trie_interim_list|NN const struct _reg_trie_data *trie\
Es |void |dump_trie_interim_table|NN const struct _reg_trie_data *trie\
|NULLOK HV* widecharmap|NN AV *revcharmap\
|U32 next_alloc|U32 depth
-Es |U8 |regtail_study |NN RExC_state_t *pRExC_state \
- |NN regnode *p|NN const regnode *val|U32 depth
+Es |bool |regtail_study |NN RExC_state_t *pRExC_state \
+ |NN regnode_offset p|NN const regnode_offset val|U32 depth
# endif
#endif
+#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
+EXRpM |bool |isFOO_lc |const U8 classnum|const U8 character
+#endif
+
+#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C)
+ERp |bool |_is_grapheme |NN const U8 * strbeg|NN const U8 * s|NN const U8 *strend|const UV cp
+#endif
+
#if defined(PERL_IN_REGEXEC_C)
-ERs |bool |isFOO_lc |const U8 classnum|const U8 character
-ERs |bool |isFOO_utf8_lc |const U8 classnum|NN const U8* character
+ERs |bool |isFOO_utf8_lc |const U8 classnum|NN const U8* character|NN const U8* e
+ERns |U8 * |find_next_masked|NN U8 * s \
+ |NN const U8 * send \
+ |const U8 byte|const U8 mask
+ERns |U8 *|find_span_end |NN U8* s|NN const U8 * send|const U8 span_byte
+ERns |U8 *|find_span_end_mask|NN U8 * s|NN const U8 * send \
+ |const U8 span_byte|const U8 mask
ERs |SSize_t|regmatch |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
-ERs |I32 |regrepeat |NN regexp *prog|NN char **startposp \
+WERs |I32 |regrepeat |NN regexp *prog|NN char **startposp \
|NN const regnode *p \
+ |NN char *loceol \
|NN regmatch_info *const reginfo \
- |I32 max \
- |int depth
+ |I32 max
ERs |bool |regtry |NN regmatch_info *reginfo|NN char **startposp
ERs |bool |reginclass |NULLOK regexp * const prog \
|NN const regnode * const n \
|NN const U8 * const p \
|NN const U8 * const p_end \
|bool const utf8_target
-Es |CHECKPOINT|regcppush |NN const regexp *rex|I32 parenfloor\
+WEs |CHECKPOINT|regcppush |NN const regexp *rex|I32 parenfloor\
|U32 maxopenparen
-Es |void |regcppop |NN regexp *rex\
- |NN U32 *maxopenparen_p
+WEs |void |regcppop |NN regexp *rex|NN U32 *maxopenparen_p
+WEs |void |regcp_restore |NN regexp *rex|I32 ix|NN U32 *maxopenparen_p
ERsn |U8* |reghop3 |NN U8 *s|SSize_t off|NN const U8 *lim
ERsn |U8* |reghop4 |NN U8 *s|SSize_t off|NN const U8 *llim \
|NN const U8 *rlim
-ERsn |U8* |reghopmaybe3 |NN U8 *s|SSize_t off|NN const U8 *lim
+ERsn |U8* |reghopmaybe3 |NN U8 *s|SSize_t off|NN const U8 * const lim
ERs |char* |find_byclass |NN regexp * prog|NN const regnode *c \
|NN char *s|NN const char *strend \
|NULLOK regmatch_info *reginfo
@@ -2335,7 +2607,14 @@ Es |void |to_utf8_substr |NN regexp * prog
Es |bool |to_byte_substr |NN regexp * prog
ERsn |I32 |reg_check_named_buff_matched |NN const regexp *rex \
|NN const regnode *scan
-EinR |bool |isGCB |const GCB_enum before|const GCB_enum after
+EsR |bool |isGCB |const GCB_enum before \
+ |const GCB_enum after \
+ |NN const U8 * const strbeg \
+ |NN const U8 * const curpos \
+ |const bool utf8_target
+EsR |GCB_enum|backup_one_GCB|NN const U8 * const strbeg \
+ |NN U8 ** curpos \
+ |const bool utf8_target
EsR |bool |isLB |LB_enum before \
|LB_enum after \
|NN const U8 * const strbeg \
@@ -2375,6 +2654,7 @@ EsR |WB_enum|backup_one_WB |NN WB_enum * previous \
|NN const U8 * const strbeg \
|NN U8 ** curpos \
|const bool utf8_target
+Ein |I32 |foldEQ_latin1_s2_folded|NN const char* a|NN const char* b|I32 len
# ifdef DEBUGGING
Es |void |dump_exec_pos |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\
|NN const char *loc_bostr|NN const char *loc_reg_starttry|const bool do_utf8|const U32 depth
@@ -2410,12 +2690,12 @@ poM |void |sv_kill_backrefs |NN SV *const sv|NULLOK AV *const av
#if defined(PERL_IN_SV_C) || defined (PERL_IN_OP_C)
pR |SV * |varname |NULLOK const GV *const gv|const char gvtype \
|PADOFFSET targ|NULLOK const SV *const keyname \
- |I32 aindex|int subscript_type
+ |SSize_t aindex|int subscript_type
#endif
pX |void |sv_del_backref |NN SV *const tsv|NN SV *const sv
#if defined(PERL_IN_SV_C)
-nsR |char * |uiv_2buf |NN char *const buf|const IV iv|UV uv|const int is_uv|NN char **const peob
+niR |char * |uiv_2buf |NN char *const buf|const IV iv|UV uv|const int is_uv|NN char **const peob
i |void |sv_unglob |NN SV *const sv|U32 flags
s |const char *|sv_display |NN SV *const sv|NN char *tmpbuf|STRLEN tmpbuf_size
s |void |not_a_number |NN SV *const sv
@@ -2431,7 +2711,7 @@ s |int |sv_2iuv_non_preserve |NN SV *const sv|I32 numtype
s |int |sv_2iuv_non_preserve |NN SV *const sv
# endif
# endif
-sR |I32 |expect_number |NN char **const pattern
+sR |STRLEN |expect_number |NN const char **const pattern
sn |STRLEN |sv_pos_u2b_forwards|NN const U8 *const start \
|NN const U8 *const send|NN STRLEN *const uoffset \
|NN bool *const at_end
@@ -2460,7 +2740,18 @@ s |void |anonymise_cv_maybe |NN GV *gv|NN CV *cv
: Used in sv.c and hv.c
po |void * |more_bodies |const svtype sv_type|const size_t body_size \
|const size_t arena_size
+EXpR |SV* |get_and_check_backslash_N_name|NN const char* s \
+ |NN const char* const e \
+ |const bool is_utf8 \
+ |NN const char** error_msg
+: For use ONLY in B::Hooks::Parser, by special dispensation
+EXpMR |char* |scan_str |NN char *start|int keep_quoted \
+ |int keep_delims|int re_reparse \
+ |NULLOK char **delimp
+EXpM |char* |scan_word |NN char *s|NN char *dest|STRLEN destlen \
+ |int allow_package|NN STRLEN *slp
+EXpMR |char* |skipspace_flags|NN char *s|U32 flags
#if defined(PERL_IN_TOKE_C)
s |void |check_uni
s |void |force_next |I32 type
@@ -2470,24 +2761,18 @@ s |char* |force_word |NN char *start|int token|int check_keyword \
|int allow_pack
s |SV* |tokeq |NN SV *sv
sR |char* |scan_const |NN char *start
-iR |SV* |get_and_check_backslash_N_name|NN const char* s \
+sR |SV* |get_and_check_backslash_N_name_wrapper|NN const char* s \
|NN const char* const e
sR |char* |scan_formline |NN char *s
sR |char* |scan_heredoc |NN char *s
-s |char* |scan_ident |NN char *s|NN char *dest \
+s |char* |scan_ident |NN char *s|NN char *dest \
|STRLEN destlen|I32 ck_uni
sR |char* |scan_inputsymbol|NN char *start
sR |char* |scan_pat |NN char *start|I32 type
-sR |char* |scan_str |NN char *start|int keep_quoted \
- |int keep_delims|int re_reparse \
- |NULLOK char **delimp
sR |char* |scan_subst |NN char *start
sR |char* |scan_trans |NN char *start
-s |char* |scan_word |NN char *s|NN char *dest|STRLEN destlen \
- |int allow_package|NN STRLEN *slp
s |void |update_debugger_info|NULLOK SV *orig_sv \
|NULLOK const char *const buf|STRLEN len
-sR |char* |skipspace_flags|NN char *s|U32 flags
sR |char* |swallow_bom |NN U8 *s
#ifndef PERL_NO_UTF16_FILTER
s |I32 |utf16_textfilter|int idx|NN SV *sv|int maxlen
@@ -2497,11 +2782,11 @@ s |void |checkcomma |NN const char *s|NN const char *name \
|NN const char *what
s |void |force_ident |NN const char *s|int kind
s |void |force_ident_maybe_lex|char pit
-s |void |incline |NN const char *s
+s |void |incline |NN const char *s|NN const char *end
s |int |intuit_method |NN char *s|NULLOK SV *ioname|NULLOK CV *cv
-s |int |intuit_more |NN char *s
-s |I32 |lop |I32 f|int x|NN char *s
-rs |void |missingterm |NULLOK char *s
+s |int |intuit_more |NN char *s|NN char *e
+s |I32 |lop |I32 f|U8 x|NN char *s
+rs |void |missingterm |NULLOK char *s|STRLEN len
s |void |no_op |NN const char *const what|NULLOK char *s
s |int |pending_ident
sR |I32 |sublex_done
@@ -2510,15 +2795,16 @@ sR |I32 |sublex_start
sR |char * |filter_gets |NN SV *sv|STRLEN append
sR |HV * |find_in_my_stash|NN const char *pkgname|STRLEN len
sR |char * |tokenize_use |int is_use|NN char *s
-so |SV* |new_constant |NULLOK const char *s|STRLEN len \
+so |SV* |new_constant |NULLOK const char *s|STRLEN len \
|NN const char *key|STRLEN keylen|NN SV *sv \
- |NULLOK SV *pv|NULLOK const char *type \
- |STRLEN typelen
-s |int |deprecate_commaless_var_list
+ |NULLOK SV *pv|NULLOK const char *type \
+ |STRLEN typelen \
+ |NULLOK const char ** error_msg
s |int |ao |int toketype
-s |void|parse_ident|NN char **s|NN char **d \
+s |void|parse_ident|NN char **s|NN char **d \
|NN char * const e|int allow_package \
- |bool is_utf8
+ |bool is_utf8|bool check_dollar \
+ |bool tick_warn
# if defined(PERL_CR_FILTER)
s |I32 |cr_textfilter |int idx|NULLOK SV *sv|int maxlen
s |void |strip_return |NN SV *sv
@@ -2528,25 +2814,66 @@ s |int |tokereport |I32 rv|NN const YYSTYPE* lvalp
sf |void |printbuf |NN const char *const fmt|NN const char *const s
# endif
#endif
-EXMp |bool |validate_proto |NN SV *name|NULLOK SV *proto|bool warn
+EXMp |bool |validate_proto |NN SV *name|NULLOK SV *proto|bool warn \
+ |bool curstash
#if defined(PERL_IN_UNIVERSAL_C)
s |bool |isa_lookup |NN HV *stash|NN const char * const name \
|STRLEN len|U32 flags
#endif
-#if defined(USE_LOCALE) && defined(PERL_IN_LOCALE_C)
+#if defined(PERL_IN_LOCALE_C)
+# ifdef USE_LOCALE
+sn |const char*|category_name |const int category
+s |const char*|switch_category_locale_to_template|const int switch_category|const int template_category|NULLOK const char * template_locale
+s |void |restore_switched_locale|const int category|NULLOK const char * const original_locale
+# endif
+# ifdef HAS_NL_LANGINFO
+sn |const char*|my_nl_langinfo|const nl_item item|bool toggle
+# else
+sn |const char*|my_nl_langinfo|const int item|bool toggle
+# endif
+inR |const char *|save_to_buffer|NULLOK const char * string \
+ |NULLOK char **buf \
+ |NN Size_t *buf_size \
+ |const Size_t offset
+# if defined(USE_LOCALE)
s |char* |stdize_locale |NN char* locs
+s |void |new_collate |NULLOK const char* newcoll
+s |void |new_ctype |NN const char* newctype
+s |void |set_numeric_radix|const bool use_locale
+s |void |new_numeric |NULLOK const char* newnum
+# ifdef USE_POSIX_2008_LOCALE
+sn |const char*|emulate_setlocale|const int category \
+ |NULLOK const char* locale \
+ |unsigned int index \
+ |const bool is_index_valid
+# endif
+# ifdef WIN32
+s |char* |win32_setlocale|int category|NULLOK const char* locale
+# endif
+# ifdef DEBUGGING
+s |void |print_collxfrm_input_and_return \
+ |NN const char * const s \
+ |NN const char * const e \
+ |NULLOK const STRLEN * const xlen \
+ |const bool is_utf8
+s |void |print_bytes_for_locale |NN const char * const s \
+ |NN const char * const e \
+ |const bool is_utf8
+snR |char * |setlocale_debug_string |const int category \
+ |NULLOK const char* const locale \
+ |NULLOK const char* const retval
+# endif
+# endif
#endif
-#if defined(USE_LOCALE) \
- && (defined(PERL_IN_LOCALE_C) || defined (PERL_EXT_POSIX))
+#if defined(USE_LOCALE) \
+ && ( defined(PERL_IN_LOCALE_C) \
+ || defined(PERL_IN_MG_C) \
+ || defined (PERL_EXT_POSIX) \
+ || defined (PERL_EXT_LANGINFO))
ApM |bool |_is_cur_LC_category_utf8|int category
-# ifdef DEBUGGING
-AMnPpR |char * |_setlocale_debug_string|const int category \
- |NULLOK const char* const locale \
- |NULLOK const char* const retval
-# endif
#endif
@@ -2569,29 +2896,29 @@ pn |Malloc_t |mem_log_realloc |const UV n|const UV typesize|NN const char *type_
pn |Malloc_t |mem_log_free |Malloc_t oldalloc|NN const char *filename|const int linenumber|NN const char *funcname
#endif
-#if defined(PERL_IN_NUMERIC_C)
-#ifndef USE_QUADMATH
-sn |NV|mulexp10 |NV value|I32 exponent
-#endif
-#endif
-
#if defined(PERL_IN_UTF8_C)
+sR |HV * |new_msg_hv |NN const char * const message \
+ |U32 categories \
+ |U32 flag
sRM |UV |check_locale_boundary_crossing \
|NN const U8* const p \
|const UV result \
|NN U8* const ustrp \
|NN STRLEN *lenp
-iR |bool |is_utf8_common |NN const U8 *const p|NN SV **swash|NN const char * const swashname|NULLOK SV* const invlist
+iR |bool |is_utf8_common |NN const U8 *const p \
+ |NULLOK SV* const invlist
+iR |bool |is_utf8_common_with_len|NN const U8 *const p \
+ |NN const U8 *const e \
+ |NULLOK SV* const invlist
sR |SV* |swatch_get |NN SV* swash|UV start|UV span
sRM |U8* |swash_scan_list_line|NN U8* l|NN U8* const lend|NN UV* min \
|NN UV* max|NN UV* val|const bool wants_value \
|NN const U8* const typestr
#endif
-#ifndef PERL_NO_INLINE_FUNCTIONS
-AiMn |void |append_utf8_from_native_byte|const U8 byte|NN U8** dest
-#endif
+EXiMn |void |append_utf8_from_native_byte|const U8 byte|NN U8** dest
+Apd |void |sv_set_undef |NN SV *sv
Apd |void |sv_setsv_flags |NN SV *dstr|NULLOK SV *sstr|const I32 flags
Apd |void |sv_catpvn_flags|NN SV *const dstr|NN const char *sstr|const STRLEN len \
|const I32 flags
@@ -2601,10 +2928,11 @@ Apd |void |sv_catsv_flags |NN SV *const dsv|NULLOK SV *const ssv|const I32 flags
Apmd |STRLEN |sv_utf8_upgrade_flags|NN SV *const sv|const I32 flags
Ap |STRLEN |sv_utf8_upgrade_flags_grow|NN SV *const sv|const I32 flags|STRLEN extra
Apd |char* |sv_pvn_force_flags|NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags
-pmb |void |sv_copypv |NN SV *const dsv|NN SV *const ssv
+Apmb |void |sv_copypv |NN SV *const dsv|NN SV *const ssv
Apmd |void |sv_copypv_nomg |NN SV *const dsv|NN SV *const ssv
Apd |void |sv_copypv_flags |NN SV *const dsv|NN SV *const ssv|const I32 flags
-Ap |char* |my_atof2 |NN const char *s|NN NV* value
+Apo |char* |my_atof2 |NN const char *orig|NN NV* value
+Ap |char* |my_atof3 |NN const char *orig|NN NV* value|const STRLEN len
Apn |int |my_socketpair |int family|int type|int protocol|int fd[2]
Apn |int |my_dirfd |NULLOK DIR* dir
#ifdef PERL_ANY_COW
@@ -2655,7 +2983,7 @@ s |void |deb_stack_n |NN SV** stack_base|I32 stack_min \
#endif
: pad API
-Apda |PADLIST*|pad_new |int flags
+ApdR |PADLIST*|pad_new |int flags
#ifdef DEBUGGING
pnX |void|set_padlist| NN CV * cv | NULLOK PADLIST * padlist
#endif
@@ -2703,7 +3031,7 @@ sd |void |pad_reset
#endif
AMpd |void |pad_tidy |padtidy_type type
pd |void |pad_free |PADOFFSET po
-pd |void |do_dump_pad |I32 level|NN PerlIO *file|NULLOK PADLIST *padlist|int full
+pd |void |do_dump_pad |I32 level|NN PerlIO *file|NULLOK PADLIST *padlist|int full
#if defined(PERL_IN_PAD_C)
# if defined(DEBUGGING)
sd |void |cv_dump |NN const CV *cv|NN const char *title
@@ -2744,11 +3072,13 @@ Apod |void |hv_assert |NN HV *hv
#endif
ApdR |SV* |hv_scalar |NN HV *hv
+p |void |hv_pushkv |NN HV *hv|U32 flags
+ApdRM |SV* |hv_bucket_ratio|NN HV *hv
ApoR |I32* |hv_riter_p |NN HV *hv
ApoR |HE** |hv_eiter_p |NN HV *hv
Apo |void |hv_riter_set |NN HV *hv|I32 riter
Apo |void |hv_eiter_set |NN HV *hv|NULLOK HE *eiter
-Ap |void |hv_rand_set |NN HV *hv|U32 new_xhv_rand
+Ap |void |hv_rand_set |NN HV *hv|U32 new_xhv_rand
Ap |void |hv_name_set |NN HV *hv|NULLOK const char *name|U32 len|U32 flags
p |void |hv_ename_add |NN HV *hv|NN const char *name|U32 len \
|U32 flags
@@ -2770,7 +3100,7 @@ p |SV* |magic_scalarpack|NN HV *hv|NN MAGIC *mg
#if defined(PERL_IN_SV_C)
s |SV * |find_hash_subscript|NULLOK const HV *const hv \
|NN const SV *const val
-s |I32 |find_array_subscript|NULLOK const AV *const av \
+s |SSize_t|find_array_subscript|NULLOK const AV *const av \
|NN const SV *const val
sMd |SV* |find_uninit_var|NULLOK const OP *const obase \
|NULLOK const SV *const uninit_sv|bool match \
@@ -2791,16 +3121,14 @@ Apbm |GV* |gv_SVadd |NULLOK GV *gv
#if defined(PERL_IN_UTIL_C)
s |bool |ckwarn_common |U32 w
#endif
-Apo |bool |ckwarn |U32 w
-Apo |bool |ckwarn_d |U32 w
+ApoP |bool |ckwarn |U32 w
+ApoP |bool |ckwarn_d |U32 w
: FIXME - exported for ByteLoader - public or private?
-XEopMa |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \
+XEopMR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \
|NN const char *const bits|STRLEN size
-#ifndef SPRINTF_RETURNS_STRLEN
-Apnod |int |my_sprintf |NN char *buffer|NN const char *pat|...
-#endif
-
+: DON'T REMOVE THE my_sprintf LINE.
+Apnod |int |my_sprintf |NN char *buffer|NN const char *pat|...
Apnodf |int |my_snprintf |NN char *buffer|const Size_t len|NN const char *format|...
Apnod |int |my_vsnprintf |NN char *buffer|const Size_t len|NN const char *format|va_list ap
#ifdef USE_QUADMATH
@@ -2816,7 +3144,7 @@ px |void |my_clearenv
Apo |void* |my_cxt_init |NN const char *my_cxt_key|size_t size
Apo |int |my_cxt_index |NN const char *my_cxt_key
#else
-Apo |void* |my_cxt_init |NN int *index|size_t size
+Apo |void* |my_cxt_init |NN int *indexp|size_t size
#endif
#endif
#if defined(PERL_IN_UTIL_C)
@@ -2831,10 +3159,21 @@ Apnod |Size_t |my_strlcat |NULLOK char *dst|NULLOK const char *src|Size_t size
#endif
#ifndef HAS_STRLCPY
-Apnod |Size_t |my_strlcpy |NULLOK char *dst|NULLOK const char *src|Size_t size
+Apnod |Size_t |my_strlcpy |NULLOK char *dst|NULLOK const char *src|Size_t size
+#endif
+
+#ifndef HAS_STRNLEN
+Apnod |Size_t |my_strnlen |NN const char *str|Size_t maxlen
#endif
-Apdn |bool |isinfnan |NV nv
+#ifndef HAS_MKOSTEMP
+pno |int |my_mkostemp |NN char *templte|int flags
+#endif
+#ifndef HAS_MKSTEMP
+pno |int |my_mkstemp |NN char *templte
+#endif
+
+APpdn |bool |isinfnan |NV nv
p |bool |isinfnansv |NN SV *sv
#if !defined(HAS_SIGNBIT)
@@ -2896,7 +3235,7 @@ xpo |int |keyword_plugin_standard|NN char* keyword_ptr|STRLEN keyword_len|NN OP*
# if defined(PERL_IN_SV_C)
s |void |unreferenced_to_tmp_stack|NN AV *const unreferenced
# endif
-Aanop |CLONE_PARAMS *|clone_params_new|NN PerlInterpreter *const from \
+ARnop |CLONE_PARAMS *|clone_params_new|NN PerlInterpreter *const from \
|NN PerlInterpreter *const to
Anop |void |clone_params_del|NN CLONE_PARAMS *param
#endif
@@ -2915,7 +3254,6 @@ Ei |STRLEN |sv_or_pv_pos_u2b|NN SV *sv|NN const char *pv|STRLEN pos \
|NULLOK STRLEN *lenp
#endif
-EMpPX |SV* |_get_encoding
Ap |void |clear_defarray |NN AV* av|bool abandon
ApM |void |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \
@@ -2947,10 +3285,12 @@ AiM |void |cx_popgiven |NN PERL_CONTEXT *cx
#endif
#ifdef USE_DTRACE
-XEop |void |dtrace_probe_call |NN CV *cv|bool is_call
-XEop |void |dtrace_probe_load |NN const char *name|bool is_loading
-XEop |void |dtrace_probe_op |NN const OP *op
-XEop |void |dtrace_probe_phase|enum perl_phase phase
+XEop |void |dtrace_probe_call |NN CV *cv|bool is_call
+XEop |void |dtrace_probe_load |NN const char *name|bool is_loading
+XEop |void |dtrace_probe_op |NN const OP *op
+XEop |void |dtrace_probe_phase|enum perl_phase phase
#endif
+XEop |STRLEN*|dup_warnings |NULLOK STRLEN* warnings
+
: ex: set ts=8 sts=4 sw=4 noet:
diff --git a/dist/Devel-PPPort/parts/inc/misc b/dist/Devel-PPPort/parts/inc/misc
index a8802a49d0..e0c6974813 100644
--- a/dist/Devel-PPPort/parts/inc/misc
+++ b/dist/Devel-PPPort/parts/inc/misc
@@ -12,45 +12,29 @@
=provides
__UNDEFINED__
-PERL_UNUSED_DECL
+END_EXTERN_C
+EXTERN_C
+INT2PTR
+MUTABLE_PTR
+NVTYPE
+PERL_GCC_BRACE_GROUPS_FORBIDDEN
+PERLIO_FUNCS_CAST
+PERLIO_FUNCS_DECL
PERL_UNUSED_ARG
-PERL_UNUSED_VAR
PERL_UNUSED_CONTEXT
+PERL_UNUSED_DECL
PERL_UNUSED_RESULT
-PERL_GCC_BRACE_GROUPS_FORBIDDEN
+PERL_UNUSED_VAR
PERL_USE_GCC_BRACE_GROUPS
-PERLIO_FUNCS_DECL
-PERLIO_FUNCS_CAST
-NVTYPE
-INT2PTR
-PTRV
-NUM2PTR
-PERL_HASH
-PTR2IV
-PTR2UV
-PTR2NV
PTR2ul
+PTRV
START_EXTERN_C
-END_EXTERN_C
-EXTERN_C
-STMT_START
STMT_END
+STMT_START
+SvRX
UTF8_MAXBYTES
WIDEST_UTYPE
XSRETURN
-HeUTF8
-C_ARRAY_LENGTH
-C_ARRAY_END
-SvRX
-SvRXOK
-cBOOL
-OpHAS_SIBLING
-OpSIBLING
-OpMORESIB_set
-OpLASTSIB_set
-OpMAYBESIB_set
-MUTABLE_PTR
-MUTABLE_SV
=implementation
@@ -62,6 +46,12 @@ __UNDEFINED__ OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL)
__UNDEFINED__ OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib))
__UNDEFINED__ HEf_SVKEY -2
+#if defined(DEBUGGING) && !defined(__COVERITY__)
+__UNDEFINED__ __ASSERT_(statement) assert(statement),
+#else
+__UNDEFINED__ __ASSERT_(statement)
+#endif
+
#ifndef SvRX
#if { NEED SvRX }
@@ -215,6 +205,9 @@ __UNDEFINED__ DEFSV_set(sv) (DEFSV = (sv))
/* Older perls (<=5.003) lack AvFILLp */
__UNDEFINED__ AvFILLp AvFILL
+__UNDEFINED__ av_tindex AvFILL
+__UNDEFINED__ av_top_index AvFILL
+
__UNDEFINED__ ERRSV get_sv("@",FALSE)
/* Hint: gv_stashpvn
@@ -302,26 +295,6 @@ typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
#endif
-__UNDEFINED__ isPSXSPC(c) (isSPACE(c) || (c) == '\v')
-__UNDEFINED__ isBLANK(c) ((c) == ' ' || (c) == '\t')
-#ifdef EBCDIC
-__UNDEFINED__ isALNUMC(c) isalnum(c)
-__UNDEFINED__ isASCII(c) isascii(c)
-__UNDEFINED__ isCNTRL(c) iscntrl(c)
-__UNDEFINED__ isGRAPH(c) isgraph(c)
-__UNDEFINED__ isPRINT(c) isprint(c)
-__UNDEFINED__ isPUNCT(c) ispunct(c)
-__UNDEFINED__ isXDIGIT(c) isxdigit(c)
-#else
-# if { VERSION < 5.10.0 }
-/* Hint: isPRINT
- * The implementation in older perl versions includes all of the
- * isSPACE() characters, which is wrong. The version provided by
- * Devel::PPPort always overrides a present buggy version.
- */
-# undef isPRINT
-# endif
-
#ifndef WIDEST_UTYPE
# ifdef QUADKIND
# ifdef U64TYPE
@@ -334,14 +307,196 @@ __UNDEFINED__ isXDIGIT(c) isxdigit(c)
# endif
#endif
-__UNDEFINED__ isALNUMC(c) (isALPHA(c) || isDIGIT(c))
+#ifdef EBCDIC
+
+/* This is the first version where these macros are fully correct. Relying on
+ * the C library functions, as earlier releases did, causes problems with
+ * locales */
+# if { VERSION < 5.22.0 }
+# undef isALNUM
+# undef isALNUM_A
+# undef isALNUMC
+# undef isALNUMC_A
+# undef isALPHA
+# undef isALPHA_A
+# undef isALPHANUMERIC
+# undef isALPHANUMERIC_A
+# undef isASCII
+# undef isASCII_A
+# undef isBLANK
+# undef isBLANK_A
+# undef isCNTRL
+# undef isCNTRL_A
+# undef isDIGIT
+# undef isDIGIT_A
+# undef isGRAPH
+# undef isGRAPH_A
+# undef isIDCONT
+# undef isIDCONT_A
+# undef isIDFIRST
+# undef isIDFIRST_A
+# undef isLOWER
+# undef isLOWER_A
+# undef isOCTAL
+# undef isOCTAL_A
+# undef isPRINT
+# undef isPRINT_A
+# undef isPSXSPC
+# undef isPSXSPC_A
+# undef isPUNCT
+# undef isPUNCT_A
+# undef isSPACE
+# undef isSPACE_A
+# undef isUPPER
+# undef isUPPER_A
+# undef isWORDCHAR
+# undef isWORDCHAR_A
+# undef isXDIGIT
+# undef isXDIGIT_A
+# endif
+
+__UNDEFINED__ isASCII(c) (isCNTRL(c) || isPRINT(c))
+
+ /* The below is accurate for all EBCDIC code pages supported by
+ * all the versions of Perl overridden by this */
+__UNDEFINED__ isCNTRL(c) ( (c) == '\0' || (c) == '\a' || (c) == '\b' \
+ || (c) == '\f' || (c) == '\n' || (c) == '\r' \
+ || (c) == '\t' || (c) == '\v' \
+ || ((c) <= 3 && (c) >= 1) /* SOH, STX, ETX */ \
+ || (c) == 7 /* U+7F DEL */ \
+ || ((c) <= 0x13 && (c) >= 0x0E) /* SO, SI */ \
+ /* DLE, DC[1-3] */ \
+ || (c) == 0x18 /* U+18 CAN */ \
+ || (c) == 0x19 /* U+19 EOM */ \
+ || ((c) <= 0x1F && (c) >= 0x1C) /* [FGRU]S */ \
+ || (c) == 0x26 /* U+17 ETB */ \
+ || (c) == 0x27 /* U+1B ESC */ \
+ || (c) == 0x2D /* U+05 ENQ */ \
+ || (c) == 0x2E /* U+06 ACK */ \
+ || (c) == 0x32 /* U+16 SYN */ \
+ || (c) == 0x37 /* U+04 EOT */ \
+ || (c) == 0x3C /* U+14 DC4 */ \
+ || (c) == 0x3D /* U+15 NAK */ \
+ || (c) == 0x3F /* U+1A SUB */ \
+ )
+/* The ordering of the tests in this and isUPPER are to exclude most characters
+ * early */
+__UNDEFINED__ isLOWER(c) ( (c) >= 'a' && (c) <= 'z' \
+ && ( (c) <= 'i' \
+ || ((c) >= 'j' && (c) <= 'r') \
+ || (c) >= 's'))
+__UNDEFINED__ isUPPER(c) ( (c) >= 'A' && (c) <= 'Z' \
+ && ( (c) <= 'I' \
+ || ((c) >= 'J' && (c) <= 'R') \
+ || (c) >= 'S'))
+
+#else /* Above is EBCDIC; below is ASCII */
+
+# if { VERSION < 5.4.0 }
+/* The implementation of these in older perl versions can give wrong results if
+ * the C program locale is set to other than the C locale */
+# undef isALNUM
+# undef isALNUM_A
+# undef isALPHA
+# undef isALPHA_A
+# undef isDIGIT
+# undef isDIGIT_A
+# undef isIDFIRST
+# undef isIDFIRST_A
+# undef isLOWER
+# undef isLOWER_A
+# undef isUPPER
+# undef isUPPER_A
+# endif
+
+# if { VERSION < 5.8.0 }
+/* Hint: isCNTRL
+ * Earlier perls omitted DEL */
+# undef isCNTRL
+# endif
+
+# if { VERSION < 5.10.0 }
+/* Hint: isPRINT
+ * The implementation in older perl versions includes all of the
+ * isSPACE() characters, which is wrong. The version provided by
+ * Devel::PPPort always overrides a present buggy version.
+ */
+# undef isPRINT
+# undef isPRINT_A
+# endif
+
+# if { VERSION < 5.14.0 }
+/* Hint: isASCII
+ * The implementation in older perl versions always returned true if the
+ * parameter was a signed char
+ */
+# undef isASCII
+# undef isASCII_A
+# endif
+
+# if { VERSION < 5.20.0 }
+/* Hint: isSPACE
+ * The implementation in older perl versions didn't include \v */
+# undef isSPACE
+# undef isSPACE_A
+# endif
+
__UNDEFINED__ isASCII(c) ((WIDEST_UTYPE) (c) <= 127)
__UNDEFINED__ isCNTRL(c) ((WIDEST_UTYPE) (c) < ' ' || (c) == 127)
-__UNDEFINED__ isGRAPH(c) (isALNUM(c) || isPUNCT(c))
-__UNDEFINED__ isPRINT(c) (((c) >= 32 && (c) < 127))
-__UNDEFINED__ isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126))
-__UNDEFINED__ isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
-#endif
+__UNDEFINED__ isLOWER(c) ((c) >= 'a' && (c) <= 'z')
+__UNDEFINED__ isUPPER(c) ((c) <= 'Z' && (c) >= 'A')
+#endif /* Below are definitions common to EBCDIC and ASCII */
+
+__UNDEFINED__ isALNUM(c) isWORDCHAR(c)
+__UNDEFINED__ isALNUMC(c) isALPHANUMERIC(c)
+__UNDEFINED__ isALPHA(c) (isUPPER(c) || isLOWER(c))
+__UNDEFINED__ isALPHANUMERIC(c) (isALPHA(c) || isDIGIT(c))
+__UNDEFINED__ isBLANK(c) ((c) == ' ' || (c) == '\t')
+__UNDEFINED__ isDIGIT(c) ((c) <= '9' && (c) >= '0')
+__UNDEFINED__ isGRAPH(c) (isWORDCHAR(c) || isPUNCT(c))
+__UNDEFINED__ isIDCONT(c) isWORDCHAR(c)
+__UNDEFINED__ isIDFIRST(c) (isALPHA(c) || (c) == '_')
+__UNDEFINED__ isOCTAL(c) (((WIDEST_UTYPE)((c)) & ~7) == '0')
+__UNDEFINED__ isPRINT(c) (isGRAPH(c) || (c) == ' ')
+__UNDEFINED__ isPSXSPC(c) isSPACE(c)
+__UNDEFINED__ isPUNCT(c) ( (c) == '-' || (c) == '!' || (c) == '"' \
+ || (c) == '#' || (c) == '$' || (c) == '%' \
+ || (c) == '&' || (c) == '\'' || (c) == '(' \
+ || (c) == ')' || (c) == '*' || (c) == '+' \
+ || (c) == ',' || (c) == '.' || (c) == '/' \
+ || (c) == ':' || (c) == ';' || (c) == '<' \
+ || (c) == '=' || (c) == '>' || (c) == '?' \
+ || (c) == '@' || (c) == '[' || (c) == '\\' \
+ || (c) == ']' || (c) == '^' || (c) == '_' \
+ || (c) == '`' || (c) == '{' || (c) == '|' \
+ || (c) == '}' || (c) == '~')
+__UNDEFINED__ isSPACE(c) ( isBLANK(c) || (c) == '\n' || (c) == '\r' \
+ || (c) == '\v' || (c) == '\f')
+__UNDEFINED__ isWORDCHAR(c) (isALPHANUMERIC(c) || (c) == '_')
+__UNDEFINED__ isXDIGIT(c) ( isDIGIT(c) \
+ || ((c) >= 'a' && (c) <= 'f') \
+ || ((c) >= 'A' && (c) <= 'F'))
+
+__UNDEFINED__ isALNUM_A isALNUM
+__UNDEFINED__ isALNUMC_A isALNUMC
+__UNDEFINED__ isALPHA_A isALPHA
+__UNDEFINED__ isALPHANUMERIC_A isALPHANUMERIC
+__UNDEFINED__ isASCII_A isASCII
+__UNDEFINED__ isBLANK_A isBLANK
+__UNDEFINED__ isCNTRL_A isCNTRL
+__UNDEFINED__ isDIGIT_A isDIGIT
+__UNDEFINED__ isGRAPH_A isGRAPH
+__UNDEFINED__ isIDCONT_A isIDCONT
+__UNDEFINED__ isIDFIRST_A isIDFIRST
+__UNDEFINED__ isLOWER_A isLOWER
+__UNDEFINED__ isOCTAL_A isOCTAL
+__UNDEFINED__ isPRINT_A isPRINT
+__UNDEFINED__ isPSXSPC_A isPSXSPC
+__UNDEFINED__ isPUNCT_A isPUNCT
+__UNDEFINED__ isSPACE_A isSPACE
+__UNDEFINED__ isUPPER_A isUPPER
+__UNDEFINED__ isWORDCHAR_A isWORDCHAR
+__UNDEFINED__ isXDIGIT_A isXDIGIT
/* Until we figure out how to support this in older perls... */
#if { VERSION >= 5.8.0 }
@@ -355,6 +510,9 @@ __UNDEFINED__ HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \
__UNDEFINED__ C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0]))
__UNDEFINED__ C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a))
+__UNDEFINED__ LIKELY(x) (x)
+__UNDEFINED__ UNLIKELY(x) (x)
+
#ifndef MUTABLE_PTR
#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
# define MUTABLE_PTR(p) ({ void *_p = (p); _p; })
@@ -694,7 +852,289 @@ check_c_array()
mXPUSHi(C_ARRAY_LENGTH(x)); /* 4 */
mXPUSHi(*(C_ARRAY_END(x)-1)); /* 13 */
-=tests plan => 48
+bool
+test_isBLANK(UV ord)
+ CODE:
+ RETVAL = isBLANK(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isBLANK_A(UV ord)
+ CODE:
+ RETVAL = isBLANK_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isUPPER(UV ord)
+ CODE:
+ RETVAL = isUPPER(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isUPPER_A(UV ord)
+ CODE:
+ RETVAL = isUPPER_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isLOWER(UV ord)
+ CODE:
+ RETVAL = isLOWER(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isLOWER_A(UV ord)
+ CODE:
+ RETVAL = isLOWER_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isALPHA(UV ord)
+ CODE:
+ RETVAL = isALPHA(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isALPHA_A(UV ord)
+ CODE:
+ RETVAL = isALPHA_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isWORDCHAR(UV ord)
+ CODE:
+ RETVAL = isWORDCHAR(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isWORDCHAR_A(UV ord)
+ CODE:
+ RETVAL = isWORDCHAR_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isALPHANUMERIC(UV ord)
+ CODE:
+ RETVAL = isALPHANUMERIC(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isALPHANUMERIC_A(UV ord)
+ CODE:
+ RETVAL = isALPHANUMERIC_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isALNUM(UV ord)
+ CODE:
+ RETVAL = isALNUM(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isALNUM_A(UV ord)
+ CODE:
+ RETVAL = isALNUM_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isDIGIT(UV ord)
+ CODE:
+ RETVAL = isDIGIT(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isDIGIT_A(UV ord)
+ CODE:
+ RETVAL = isDIGIT_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isOCTAL(UV ord)
+ CODE:
+ RETVAL = isOCTAL(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isOCTAL_A(UV ord)
+ CODE:
+ RETVAL = isOCTAL_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isIDFIRST(UV ord)
+ CODE:
+ RETVAL = isIDFIRST(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isIDFIRST_A(UV ord)
+ CODE:
+ RETVAL = isIDFIRST_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isIDCONT(UV ord)
+ CODE:
+ RETVAL = isIDCONT(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isIDCONT_A(UV ord)
+ CODE:
+ RETVAL = isIDCONT_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isSPACE(UV ord)
+ CODE:
+ RETVAL = isSPACE(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isSPACE_A(UV ord)
+ CODE:
+ RETVAL = isSPACE_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isASCII(UV ord)
+ CODE:
+ RETVAL = isASCII(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isASCII_A(UV ord)
+ CODE:
+ RETVAL = isASCII_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isCNTRL(UV ord)
+ CODE:
+ RETVAL = isCNTRL(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isCNTRL_A(UV ord)
+ CODE:
+ RETVAL = isCNTRL_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isPRINT(UV ord)
+ CODE:
+ RETVAL = isPRINT(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isPRINT_A(UV ord)
+ CODE:
+ RETVAL = isPRINT_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isGRAPH(UV ord)
+ CODE:
+ RETVAL = isGRAPH(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isGRAPH_A(UV ord)
+ CODE:
+ RETVAL = isGRAPH_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isPUNCT(UV ord)
+ CODE:
+ RETVAL = isPUNCT(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isPUNCT_A(UV ord)
+ CODE:
+ RETVAL = isPUNCT_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isXDIGIT(UV ord)
+ CODE:
+ RETVAL = isXDIGIT(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isXDIGIT_A(UV ord)
+ CODE:
+ RETVAL = isXDIGIT_A(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isPSXSPC(UV ord)
+ CODE:
+ RETVAL = isPSXSPC(ord);
+ OUTPUT:
+ RETVAL
+
+bool
+test_isPSXSPC_A(UV ord)
+ CODE:
+ RETVAL = isPSXSPC_A(ord);
+ OUTPUT:
+ RETVAL
+
+STRLEN
+av_tindex(av)
+ AV *av
+ CODE:
+ RETVAL = av_tindex(av);
+ OUTPUT:
+ RETVAL
+
+STRLEN
+av_top_index(av)
+ AV *av
+ CODE:
+ RETVAL = av_top_index(av);
+ OUTPUT:
+ RETVAL
+
+=tests plan => 128
use vars qw($my_sv @my_av %my_hv);
@@ -802,3 +1242,132 @@ if ("$]" < 5.005) {
ok(Devel::PPPort::SvRXOK($qr));
ok(Devel::PPPort::SvRXOK(bless $qr, "Surprise"));
}
+
+ok( Devel::PPPort::test_isBLANK(ord(" ")));
+ok(! Devel::PPPort::test_isBLANK(ord("\n")));
+
+ok( Devel::PPPort::test_isBLANK_A(ord("\t")));
+ok(! Devel::PPPort::test_isBLANK_A(ord("\r")));
+
+ok( Devel::PPPort::test_isUPPER(ord("A")));
+ok(! Devel::PPPort::test_isUPPER(ord("a")));
+
+ok( Devel::PPPort::test_isUPPER_A(ord("Z")));
+
+# One of these two is uppercase in EBCDIC; the other in Latin1, but neither are
+# ASCII uppercase.
+ok(! Devel::PPPort::test_isUPPER_A(ord(0xDC)));
+ok(! Devel::PPPort::test_isUPPER_A(ord(0xFC)));
+
+ok( Devel::PPPort::test_isLOWER(ord("b")));
+ok(! Devel::PPPort::test_isLOWER(ord("B")));
+
+ok( Devel::PPPort::test_isLOWER_A(ord("y")));
+
+# One of these two is lowercase in EBCDIC; the other in Latin1, but neither are
+# ASCII lowercase.
+ok(! Devel::PPPort::test_isLOWER_A(ord(0xDC)));
+ok(! Devel::PPPort::test_isLOWER_A(ord(0xFC)));
+
+ok( Devel::PPPort::test_isALPHA(ord("C")));
+ok(! Devel::PPPort::test_isALPHA(ord("1")));
+
+ok( Devel::PPPort::test_isALPHA_A(ord("x")));
+ok(! Devel::PPPort::test_isALPHA_A(0xDC));
+
+ok( Devel::PPPort::test_isWORDCHAR(ord("_")));
+ok(! Devel::PPPort::test_isWORDCHAR(ord("@")));
+
+ok( Devel::PPPort::test_isWORDCHAR_A(ord("2")));
+ok(! Devel::PPPort::test_isWORDCHAR_A(0xFC));
+
+ok( Devel::PPPort::test_isALPHANUMERIC(ord("4")));
+ok(! Devel::PPPort::test_isALPHANUMERIC(ord("_")));
+
+ok( Devel::PPPort::test_isALPHANUMERIC_A(ord("l")));
+ok(! Devel::PPPort::test_isALPHANUMERIC_A(0xDC));
+
+ok( Devel::PPPort::test_isALNUM(ord("c")));
+ok(! Devel::PPPort::test_isALNUM(ord("}")));
+
+ok( Devel::PPPort::test_isALNUM_A(ord("5")));
+ok(! Devel::PPPort::test_isALNUM_A(0xFC));
+
+ok( Devel::PPPort::test_isDIGIT(ord("6")));
+ok(! Devel::PPPort::test_isDIGIT(ord("_")));
+
+ok( Devel::PPPort::test_isDIGIT_A(ord("7")));
+ok(! Devel::PPPort::test_isDIGIT_A(0xDC));
+
+ok( Devel::PPPort::test_isOCTAL(ord("7")));
+ok(! Devel::PPPort::test_isOCTAL(ord("8")));
+
+ok( Devel::PPPort::test_isOCTAL_A(ord("0")));
+ok(! Devel::PPPort::test_isOCTAL_A(ord("9")));
+
+ok( Devel::PPPort::test_isIDFIRST(ord("D")));
+ok(! Devel::PPPort::test_isIDFIRST(ord("1")));
+
+ok( Devel::PPPort::test_isIDFIRST_A(ord("_")));
+ok(! Devel::PPPort::test_isIDFIRST_A(0xFC));
+
+ok( Devel::PPPort::test_isIDCONT(ord("e")));
+ok(! Devel::PPPort::test_isIDCONT(ord("@")));
+
+ok( Devel::PPPort::test_isIDCONT_A(ord("2")));
+ok(! Devel::PPPort::test_isIDCONT_A(0xDC));
+
+ok( Devel::PPPort::test_isSPACE(ord(" ")));
+ok(! Devel::PPPort::test_isSPACE(ord("_")));
+
+ok( Devel::PPPort::test_isSPACE_A(ord("\cK")));
+ok(! Devel::PPPort::test_isSPACE_A(ord("F")));
+
+# This stresses the edge for ASCII machines, but happens to work on EBCDIC as
+# well
+ok( Devel::PPPort::test_isASCII(0x7F));
+ok(! Devel::PPPort::test_isASCII(0x80));
+
+ok( Devel::PPPort::test_isASCII_A(ord("9")));
+
+# B6 is the PARAGRAPH SIGN in ASCII and EBCDIC
+ok(! Devel::PPPort::test_isASCII_A(0xB6));
+
+ok( Devel::PPPort::test_isCNTRL(ord("\e")));
+ok(! Devel::PPPort::test_isCNTRL(ord(" ")));
+
+ok( Devel::PPPort::test_isCNTRL_A(ord("\a")));
+ok(! Devel::PPPort::test_isCNTRL_A(0xB6));
+
+ok( Devel::PPPort::test_isPRINT(ord(" ")));
+ok(! Devel::PPPort::test_isPRINT(ord("\n")));
+
+ok( Devel::PPPort::test_isPRINT_A(ord("G")));
+ok(! Devel::PPPort::test_isPRINT_A(0xB6));
+
+ok( Devel::PPPort::test_isGRAPH(ord("h")));
+ok(! Devel::PPPort::test_isGRAPH(ord(" ")));
+
+ok( Devel::PPPort::test_isGRAPH_A(ord("i")));
+ok(! Devel::PPPort::test_isGRAPH_A(0xB6));
+
+ok( Devel::PPPort::test_isPUNCT(ord("#")));
+ok(! Devel::PPPort::test_isPUNCT(ord(" ")));
+
+ok( Devel::PPPort::test_isPUNCT_A(ord("*")));
+ok(! Devel::PPPort::test_isPUNCT_A(0xB6));
+
+ok( Devel::PPPort::test_isXDIGIT(ord("A")));
+ok(! Devel::PPPort::test_isXDIGIT(ord("_")));
+
+ok( Devel::PPPort::test_isXDIGIT_A(ord("9")));
+ok(! Devel::PPPort::test_isXDIGIT_A(0xDC));
+
+ok( Devel::PPPort::test_isPSXSPC(ord(" ")));
+ok(! Devel::PPPort::test_isPSXSPC(ord("k")));
+
+ok( Devel::PPPort::test_isPSXSPC_A(ord("\cK")));
+ok(! Devel::PPPort::test_isPSXSPC_A(0xFC));
+
+ok(&Devel::PPPort::av_top_index([1,2,3]), 2);
+ok(&Devel::PPPort::av_tindex([1,2,3,4]), 3);
diff --git a/dist/Devel-PPPort/parts/inc/pv_tools b/dist/Devel-PPPort/parts/inc/pv_tools
index 31692015d5..c51d91ab22 100644
--- a/dist/Devel-PPPort/parts/inc/pv_tools
+++ b/dist/Devel-PPPort/parts/inc/pv_tools
@@ -54,7 +54,7 @@ pv_escape(pTHX_ SV *dsv, char const * const str,
STRLEN wrote = 0;
STRLEN chsize = 0;
STRLEN readsize = 1;
-#if defined(is_utf8_string) && defined(utf8_to_uvchr)
+#if defined(is_utf8_string) && defined(utf8_to_uvchr_buf)
bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0;
#endif
const char *pv = str;
@@ -64,15 +64,15 @@ pv_escape(pTHX_ SV *dsv, char const * const str,
if (!(flags & PERL_PV_ESCAPE_NOCLEAR))
sv_setpvs(dsv, "");
-#if defined(is_utf8_string) && defined(utf8_to_uvchr)
+#if defined(is_utf8_string) && defined(utf8_to_uvchr_buf)
if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count))
isuni = 1;
#endif
for (; pv < end && (!max || wrote < max) ; pv += readsize) {
const UV u =
-#if defined(is_utf8_string) && defined(utf8_to_uvchr)
- isuni ? utf8_to_uvchr((U8*)pv, &readsize) :
+#if defined(is_utf8_string) && defined(utf8_to_uvchr_buf)
+ isuni ? utf8_to_uvchr_buf((U8*)pv, end, &readsize) :
#endif
(U8)*pv;
const U8 c = (U8)u & 0xFF;
@@ -203,7 +203,7 @@ pv_display(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
void
pv_escape_can_unicode()
PPCODE:
-#if defined(is_utf8_string) && defined(utf8_to_uvchr)
+#if defined(is_utf8_string) && defined(utf8_to_uvchr_buf)
XSRETURN_YES;
#else
XSRETURN_NO;
diff --git a/dist/Devel-PPPort/parts/inc/uv b/dist/Devel-PPPort/parts/inc/uv
index c1831e9c06..7414799d14 100644
--- a/dist/Devel-PPPort/parts/inc/uv
+++ b/dist/Devel-PPPort/parts/inc/uv
@@ -12,6 +12,7 @@
=provides
__UNDEFINED__
+my_strnlen
SvUOK
=implementation
@@ -48,6 +49,61 @@ __UNDEFINED__ XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_E
__UNDEFINED__ PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
__UNDEFINED__ XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
+#if defined UTF8SKIP
+__UNDEFINED__ UTF8_SAFE_SKIP(s, e) (__ASSERT_((e) >= (s)) \
+ ((e) - (s)) <= 0 \
+ ? 0 \
+ : (((e) - (s)) >= UTF8SKIP(s)) \
+ ? ((e) - (s)) \
+ : UTF8SKIP(s))
+#endif
+
+#if !defined(my_strnlen)
+#if { NEED my_strnlen }
+
+STRLEN
+my_strnlen(const char *str, Size_t maxlen)
+{
+ const char *p = str;
+
+ while(maxlen-- && *p)
+ p++;
+
+ return p - str;
+}
+
+#endif
+#endif
+#if defined(utf8n_to_uvchr)
+
+__UNDEFINED__ utf8_to_uvchr_buf(s,e,lp) (__ASSERT_(e >= s) \
+ utf8n_to_uvchr((s), ((e)-(s)), (lp), \
+ (UTF8_ALLOW_ANYUV & ~UTF8_ALLOW_LONG)))
+
+#elif defined(utf8_to_uv)
+
+__UNDEFINED__ utf8_to_uvchr_buf(s,e,lp) (__ASSERT_(e >= s) \
+ utf8_to_uv((s), ((e)-(s)), (lp), \
+ (UTF8_ALLOW_ANYUV & ~UTF8_ALLOW_LONG)))
+#endif
+
+#undef utf8_to_uvchr
+
+/* Always redefine this unsafe function so that it refuses to read past a NUL,
+ * making it much less likely to read off the end of the buffer. A NUL
+ * indicates the start of the next character anyway. If the input isn't
+ * NUL-terminated, the function remains unsafe, as it always has been.
+ */
+
+__UNDEFINED__ utf8_to_uvchr(s, lp) \
+ ((*(s) == '\0') \
+ ? utf8_to_uvchr_buf(s,((s)+1), lp) /* Handle single NUL specially */ \
+ : utf8_to_uvchr_buf(s, (s) + my_strnlen((char *) (s), UTF8SKIP(s)), (lp)))
+
+=xsinit
+
+#define NEED_my_strnlen
+
=xsubs
SV *
@@ -108,7 +164,54 @@ XPUSHu()
XPUSHu(43);
XSRETURN(1);
-=tests plan => 10
+STRLEN
+UTF8_SAFE_SKIP(s, adjustment)
+ unsigned char * s
+ int adjustment
+ CODE:
+ /* Instead of passing in an 'e' ptr, use the real end, adjusted */
+ RETVAL = UTF8_SAFE_SKIP(s, s + UTF8SKIP(s) + adjustment);
+ OUTPUT:
+ RETVAL
+
+STRLEN
+my_strnlen(s, max)
+ char * s
+ STRLEN max
+ CODE:
+ RETVAL= my_strnlen(s, max);
+ OUTPUT:
+ RETVAL
+
+AV *
+utf8_to_uvchr_buf(s)
+ unsigned char *s
+ PREINIT:
+ AV *av;
+ STRLEN len;
+ CODE:
+ av = newAV();
+ av_push(av, newSVuv(utf8_to_uvchr_buf(s, s + UTF8SKIP(s), &len)));
+ av_push(av, newSVuv(len));
+ RETVAL = av;
+ OUTPUT:
+ RETVAL
+
+AV *
+utf8_to_uvchr(s)
+ unsigned char *s
+ PREINIT:
+ AV *av;
+ STRLEN len;
+ CODE:
+ av = newAV();
+ av_push(av, newSVuv(utf8_to_uvchr(s, &len)));
+ av_push(av, newSVuv(len));
+ RETVAL = av;
+ OUTPUT:
+ RETVAL
+
+=tests plan => 21
ok(&Devel::PPPort::sv_setuv(42), 42);
ok(&Devel::PPPort::newSVuv(123), 123);
@@ -120,3 +223,18 @@ ok(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
ok(&Devel::PPPort::XSRETURN_UV(), 42);
ok(&Devel::PPPort::PUSHu(), 42);
ok(&Devel::PPPort::XPUSHu(), 43);
+ok(&Devel::PPPort::UTF8_SAFE_SKIP("A", 0), 1);
+ok(&Devel::PPPort::UTF8_SAFE_SKIP("A", -1), 0);
+ok(&Devel::PPPort::my_strnlen("abc\0def", 7), 3);
+my $ret = &Devel::PPPort::utf8_to_uvchr_buf("A");
+ok($ret->[0], ord("A"));
+ok($ret->[1], 1);
+$ret = &Devel::PPPort::utf8_to_uvchr_buf("\0");
+ok($ret->[0], 0);
+ok($ret->[1], 1);
+$ret = &Devel::PPPort::utf8_to_uvchr("A");
+ok($ret->[0], ord("A"));
+ok($ret->[1], 1);
+$ret = &Devel::PPPort::utf8_to_uvchr("\0");
+ok($ret->[0], 0);
+ok($ret->[1], 1);
diff --git a/dist/Devel-PPPort/t/misc.t b/dist/Devel-PPPort/t/misc.t
index cb27932e4b..7fbd3e9c8f 100644
--- a/dist/Devel-PPPort/t/misc.t
+++ b/dist/Devel-PPPort/t/misc.t
@@ -30,9 +30,9 @@ BEGIN {
require 'testutil.pl' if $@;
}
- if (48) {
+ if (128) {
load();
- plan(tests => 48);
+ plan(tests => 128);
}
}
@@ -155,3 +155,132 @@ if ("$]" < 5.005) {
ok(Devel::PPPort::SvRXOK(bless $qr, "Surprise"));
}
+ok( Devel::PPPort::test_isBLANK(ord(" ")));
+ok(! Devel::PPPort::test_isBLANK(ord("\n")));
+
+ok( Devel::PPPort::test_isBLANK_A(ord("\t")));
+ok(! Devel::PPPort::test_isBLANK_A(ord("\r")));
+
+ok( Devel::PPPort::test_isUPPER(ord("A")));
+ok(! Devel::PPPort::test_isUPPER(ord("a")));
+
+ok( Devel::PPPort::test_isUPPER_A(ord("Z")));
+
+# One of these two is uppercase in EBCDIC; the other in Latin1, but neither are
+# ASCII uppercase.
+ok(! Devel::PPPort::test_isUPPER_A(ord(0xDC)));
+ok(! Devel::PPPort::test_isUPPER_A(ord(0xFC)));
+
+ok( Devel::PPPort::test_isLOWER(ord("b")));
+ok(! Devel::PPPort::test_isLOWER(ord("B")));
+
+ok( Devel::PPPort::test_isLOWER_A(ord("y")));
+
+# One of these two is lowercase in EBCDIC; the other in Latin1, but neither are
+# ASCII lowercase.
+ok(! Devel::PPPort::test_isLOWER_A(ord(0xDC)));
+ok(! Devel::PPPort::test_isLOWER_A(ord(0xFC)));
+
+ok( Devel::PPPort::test_isALPHA(ord("C")));
+ok(! Devel::PPPort::test_isALPHA(ord("1")));
+
+ok( Devel::PPPort::test_isALPHA_A(ord("x")));
+ok(! Devel::PPPort::test_isALPHA_A(0xDC));
+
+ok( Devel::PPPort::test_isWORDCHAR(ord("_")));
+ok(! Devel::PPPort::test_isWORDCHAR(ord("@")));
+
+ok( Devel::PPPort::test_isWORDCHAR_A(ord("2")));
+ok(! Devel::PPPort::test_isWORDCHAR_A(0xFC));
+
+ok( Devel::PPPort::test_isALPHANUMERIC(ord("4")));
+ok(! Devel::PPPort::test_isALPHANUMERIC(ord("_")));
+
+ok( Devel::PPPort::test_isALPHANUMERIC_A(ord("l")));
+ok(! Devel::PPPort::test_isALPHANUMERIC_A(0xDC));
+
+ok( Devel::PPPort::test_isALNUM(ord("c")));
+ok(! Devel::PPPort::test_isALNUM(ord("}")));
+
+ok( Devel::PPPort::test_isALNUM_A(ord("5")));
+ok(! Devel::PPPort::test_isALNUM_A(0xFC));
+
+ok( Devel::PPPort::test_isDIGIT(ord("6")));
+ok(! Devel::PPPort::test_isDIGIT(ord("_")));
+
+ok( Devel::PPPort::test_isDIGIT_A(ord("7")));
+ok(! Devel::PPPort::test_isDIGIT_A(0xDC));
+
+ok( Devel::PPPort::test_isOCTAL(ord("7")));
+ok(! Devel::PPPort::test_isOCTAL(ord("8")));
+
+ok( Devel::PPPort::test_isOCTAL_A(ord("0")));
+ok(! Devel::PPPort::test_isOCTAL_A(ord("9")));
+
+ok( Devel::PPPort::test_isIDFIRST(ord("D")));
+ok(! Devel::PPPort::test_isIDFIRST(ord("1")));
+
+ok( Devel::PPPort::test_isIDFIRST_A(ord("_")));
+ok(! Devel::PPPort::test_isIDFIRST_A(0xFC));
+
+ok( Devel::PPPort::test_isIDCONT(ord("e")));
+ok(! Devel::PPPort::test_isIDCONT(ord("@")));
+
+ok( Devel::PPPort::test_isIDCONT_A(ord("2")));
+ok(! Devel::PPPort::test_isIDCONT_A(0xDC));
+
+ok( Devel::PPPort::test_isSPACE(ord(" ")));
+ok(! Devel::PPPort::test_isSPACE(ord("_")));
+
+ok( Devel::PPPort::test_isSPACE_A(ord("\cK")));
+ok(! Devel::PPPort::test_isSPACE_A(ord("F")));
+
+# This stresses the edge for ASCII machines, but happens to work on EBCDIC as
+# well
+ok( Devel::PPPort::test_isASCII(0x7F));
+ok(! Devel::PPPort::test_isASCII(0x80));
+
+ok( Devel::PPPort::test_isASCII_A(ord("9")));
+
+# B6 is the PARAGRAPH SIGN in ASCII and EBCDIC
+ok(! Devel::PPPort::test_isASCII_A(0xB6));
+
+ok( Devel::PPPort::test_isCNTRL(ord("\e")));
+ok(! Devel::PPPort::test_isCNTRL(ord(" ")));
+
+ok( Devel::PPPort::test_isCNTRL_A(ord("\a")));
+ok(! Devel::PPPort::test_isCNTRL_A(0xB6));
+
+ok( Devel::PPPort::test_isPRINT(ord(" ")));
+ok(! Devel::PPPort::test_isPRINT(ord("\n")));
+
+ok( Devel::PPPort::test_isPRINT_A(ord("G")));
+ok(! Devel::PPPort::test_isPRINT_A(0xB6));
+
+ok( Devel::PPPort::test_isGRAPH(ord("h")));
+ok(! Devel::PPPort::test_isGRAPH(ord(" ")));
+
+ok( Devel::PPPort::test_isGRAPH_A(ord("i")));
+ok(! Devel::PPPort::test_isGRAPH_A(0xB6));
+
+ok( Devel::PPPort::test_isPUNCT(ord("#")));
+ok(! Devel::PPPort::test_isPUNCT(ord(" ")));
+
+ok( Devel::PPPort::test_isPUNCT_A(ord("*")));
+ok(! Devel::PPPort::test_isPUNCT_A(0xB6));
+
+ok( Devel::PPPort::test_isXDIGIT(ord("A")));
+ok(! Devel::PPPort::test_isXDIGIT(ord("_")));
+
+ok( Devel::PPPort::test_isXDIGIT_A(ord("9")));
+ok(! Devel::PPPort::test_isXDIGIT_A(0xDC));
+
+ok( Devel::PPPort::test_isPSXSPC(ord(" ")));
+ok(! Devel::PPPort::test_isPSXSPC(ord("k")));
+
+ok( Devel::PPPort::test_isPSXSPC_A(ord("\cK")));
+ok(! Devel::PPPort::test_isPSXSPC_A(0xFC));
+
+ok(&Devel::PPPort::av_top_index([1,2,3]), 2);
+ok(&Devel::PPPort::av_tindex([1,2,3,4]), 3);
+
diff --git a/dist/Devel-PPPort/t/uv.t b/dist/Devel-PPPort/t/uv.t
index bc123c6bbf..3da70ceba4 100644
--- a/dist/Devel-PPPort/t/uv.t
+++ b/dist/Devel-PPPort/t/uv.t
@@ -30,9 +30,9 @@ BEGIN {
require 'testutil.pl' if $@;
}
- if (10) {
+ if (21) {
load();
- plan(tests => 10);
+ plan(tests => 21);
}
}
@@ -58,4 +58,19 @@ ok(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
ok(&Devel::PPPort::XSRETURN_UV(), 42);
ok(&Devel::PPPort::PUSHu(), 42);
ok(&Devel::PPPort::XPUSHu(), 43);
+ok(&Devel::PPPort::UTF8_SAFE_SKIP("A", 0), 1);
+ok(&Devel::PPPort::UTF8_SAFE_SKIP("A", -1), 0);
+ok(&Devel::PPPort::my_strnlen("abc\0def", 7), 3);
+my $ret = &Devel::PPPort::utf8_to_uvchr_buf("A");
+ok($ret->[0], ord("A"));
+ok($ret->[1], 1);
+$ret = &Devel::PPPort::utf8_to_uvchr_buf("\0");
+ok($ret->[0], 0);
+ok($ret->[1], 1);
+$ret = &Devel::PPPort::utf8_to_uvchr("A");
+ok($ret->[0], ord("A"));
+ok($ret->[1], 1);
+$ret = &Devel::PPPort::utf8_to_uvchr("\0");
+ok($ret->[0], 0);
+ok($ret->[1], 1);