-/*
+/*
* This file contains mathoms, various binary artifacts from previous
- * versions of Perl. For binary or source compatibility reasons, though,
- * we cannot completely remove them from the core code.
+ * versions of Perl which we cannot completely remove from the core
+ * code. There are two reasons functions should be here:
+ *
+ * 1) A function has been been replaced by a macro within a minor release,
+ * so XS modules compiled against an older release will expect to
+ * still be able to link against the function
+ * 2) A function Perl_foo(...) with #define foo Perl_foo(aTHX_ ...)
+ * has been replaced by a macro, e.g. #define foo(...) foo_flags(...,0)
+ * but XS code may still explicitly use the long form, i.e.
+ * Perl_foo(aTHX_ ...)
+ *
+ * NOTE: ALL FUNCTIONS IN THIS FILE should have an entry with the 'b' flag in
+ * embed.fnc.
+ *
+ * To move a function to this file, simply cut and paste it here, and change
+ * its embed.fnc entry to additionally have the 'b' flag. If, for some reason
+ * a function you'd like to be treated as mathoms can't be moved from its
+ * current place, simply enclose it between
+ *
+ * #ifndef NO_MATHOMS
+ * ...
+ * #endif
*
- * SMP - Oct. 24, 2005
+ * and add the 'b' flag in embed.fnc.
*
* The compilation of this file can be suppressed; see INSTALL
*
+ * Some blurb for perlapi.pod:
+
+=head1 Obsolete backwards compatibility functions
+
+Some of these are also deprecated. You can exclude these from
+your compiled Perl by adding this option to Configure:
+C<-Accflags='-DNO_MATHOMS'>
+
+=cut
+
*/
+
#include "EXTERN.h"
#define PERL_IN_MATHOMS_C
#include "perl.h"
*/
#else
-/* Not all of these have prototypes elsewhere, so do this to get
- * non-mangled names.
- */
-START_EXTERN_C
-
-PERL_CALLCONV OP * Perl_ref(pTHX_ OP *o, I32 type);
-PERL_CALLCONV void Perl_sv_unref(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_sv_taint(pTHX_ SV *sv);
-PERL_CALLCONV IV Perl_sv_2iv(pTHX_ SV *sv);
-PERL_CALLCONV UV Perl_sv_2uv(pTHX_ SV *sv);
-PERL_CALLCONV NV Perl_sv_2nv(pTHX_ SV *sv);
-PERL_CALLCONV char * Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp);
-PERL_CALLCONV char * Perl_sv_2pv_nolen(pTHX_ SV *sv);
-PERL_CALLCONV char * Perl_sv_2pvbyte_nolen(pTHX_ SV *sv);
-PERL_CALLCONV char * Perl_sv_2pvutf8_nolen(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_sv_force_normal(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr);
-PERL_CALLCONV void Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen);
-PERL_CALLCONV void Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len);
-PERL_CALLCONV void Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr);
-PERL_CALLCONV void Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *ssv);
-PERL_CALLCONV char * Perl_sv_pv(pTHX_ SV *sv);
-PERL_CALLCONV char * Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp);
-PERL_CALLCONV char * Perl_sv_pvbyte(pTHX_ SV *sv);
-PERL_CALLCONV char * Perl_sv_pvutf8(pTHX_ SV *sv);
-PERL_CALLCONV STRLEN Perl_sv_utf8_upgrade(pTHX_ SV *sv);
-PERL_CALLCONV NV Perl_huge(void);
-PERL_CALLCONV void Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix);
-PERL_CALLCONV void Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix);
-PERL_CALLCONV GV * Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name);
-PERL_CALLCONV HE * Perl_hv_iternext(pTHX_ HV *hv);
-PERL_CALLCONV void Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how);
-PERL_CALLCONV bool Perl_do_open(pTHX_ GV *gv, const char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp);
-PERL_CALLCONV bool Perl_do_aexec(pTHX_ SV *really, SV **mark, SV **sp);
-PERL_CALLCONV U8 * Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv);
-PERL_CALLCONV bool Perl_is_utf8_string_loc(pTHX_ const U8 *s, STRLEN len, const U8 **ep);
-PERL_CALLCONV void Perl_sv_nolocking(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len);
-PERL_CALLCONV void Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len);
-PERL_CALLCONV int Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...);
-PERL_CALLCONV int Perl_printf_nocontext(const char *format, ...);
-PERL_CALLCONV int Perl_magic_setglob(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV AV * Perl_newAV(pTHX);
-PERL_CALLCONV HV * Perl_newHV(pTHX);
-PERL_CALLCONV IO * Perl_newIO(pTHX);
-PERL_CALLCONV I32 Perl_my_stat(pTHX);
-PERL_CALLCONV I32 Perl_my_lstat(pTHX);
-PERL_CALLCONV I32 Perl_sv_eq(pTHX_ SV *sv1, SV *sv2);
-PERL_CALLCONV char * Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp);
-PERL_CALLCONV bool Perl_sv_2bool(pTHX_ SV *const sv);
-PERL_CALLCONV CV * Perl_newSUB(pTHX_ I32 floor, OP* o, OP* proto, OP* block);
-PERL_CALLCONV UV Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
-PERL_CALLCONV UV Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
-PERL_CALLCONV UV Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
-PERL_CALLCONV UV Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp);
-PERL_CALLCONV SV *Perl_sv_mortalcopy(pTHX_ SV *const oldstr);
+/* The functions in this file should be able to call other deprecated functions
+ * without a compiler warning */
+GCC_DIAG_IGNORE(-Wdeprecated-declarations)
/* ref() is now a macro using Perl_doref;
* this version provided for binary compatibility only.
Unsets the RV status of the SV, and decrements the reference count of
whatever was being referenced by the RV. This can almost be thought of
as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
-being zero. See C<SvROK_off>.
+being zero. See C<L</SvROK_off>>.
=cut
*/
/*
=for apidoc sv_taint
-Taint an SV. Use C<SvTAINTED_on> instead.
+Taint an SV. Use C<SvTAINTED_on> instead.
=cut
*/
IV
Perl_sv_2iv(pTHX_ SV *sv)
{
+ PERL_ARGS_ASSERT_SV_2IV;
+
return sv_2iv_flags(sv, SV_GMAGIC);
}
UV
Perl_sv_2uv(pTHX_ SV *sv)
{
+ PERL_ARGS_ASSERT_SV_2UV;
+
return sv_2uv_flags(sv, SV_GMAGIC);
}
char *
Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp)
{
+ PERL_ARGS_ASSERT_SV_2PV;
+
return sv_2pv_flags(sv, lp, SV_GMAGIC);
}
/*
=for apidoc sv_2pv_nolen
-Like C<sv_2pv()>, but doesn't return the length too. You should usually
+Like C<sv_2pv()>, but doesn't return the length too. You should usually
use the macro wrapper C<SvPV_nolen(sv)> instead.
=cut
Undo various types of fakery on an SV: if the PV is a shared string, make
a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
-an xpvmg. See also C<sv_force_normal_flags>.
+an C<xpvmg>. See also C<L</sv_force_normal_flags>>.
=cut
*/
=for apidoc sv_iv
A private implementation of the C<SvIVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
+cope with complex macro expressions. Always use the macro instead.
=cut
*/
=for apidoc sv_uv
A private implementation of the C<SvUVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
+cope with complex macro expressions. Always use the macro instead.
=cut
*/
=for apidoc sv_nv
A private implementation of the C<SvNVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
+cope with complex macro expressions. Always use the macro instead.
=cut
*/
=for apidoc sv_pvn
A private implementation of the C<SvPV> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
+cope with complex macro expressions. Always use the macro instead.
=cut
*/
=for apidoc sv_pvbyten
A private implementation of the C<SvPVbyte> macro for compilers
-which can't cope with complex macro expressions. Always use the macro
+which can't cope with complex macro expressions. Always use the macro
instead.
=cut
=for apidoc sv_pvutf8n
A private implementation of the C<SvPVutf8> macro for compilers
-which can't cope with complex macro expressions. Always use the macro
+which can't cope with complex macro expressions. Always use the macro
instead.
=cut
int
Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
{
- dTHXs;
- va_list(arglist);
+ int ret = 0;
+ va_list arglist;
/* Easier to special case this here than in embed.pl. (Look at what it
generates for proto.h) */
#endif
va_start(arglist, format);
- return PerlIO_vprintf(stream, format, arglist);
+ ret = PerlIO_vprintf(stream, format, arglist);
+ va_end(arglist);
+ return ret;
}
int
Perl_printf_nocontext(const char *format, ...)
{
dTHX;
- va_list(arglist);
+ va_list arglist;
+ int ret = 0;
#ifdef PERL_IMPLICIT_CONTEXT
PERL_ARGS_ASSERT_PRINTF_NOCONTEXT;
#endif
va_start(arglist, format);
- return PerlIO_vprintf(PerlIO_stdout(), format, arglist);
+ ret = PerlIO_vprintf(PerlIO_stdout(), format, arglist);
+ va_end(arglist);
+ return ret;
}
#if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL))
return init_i18nl10n(printwarn);
}
-U8 *
-Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
-{
- PERL_ARGS_ASSERT_UVUNI_TO_UTF8;
-
- return Perl_uvoffuni_to_utf8_flags(aTHX_ d, uv, 0);
-}
-
bool
-Perl_is_utf8_string_loc(pTHX_ const U8 *s, STRLEN len, const U8 **ep)
+Perl_is_utf8_string_loc(const U8 *s, const STRLEN len, const U8 **ep)
{
PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC;
=for apidoc sv_nolocking
Dummy routine which "locks" an SV when there is no locking module present.
-Exists to avoid test for a NULL function pointer and because it could
+Exists to avoid test for a C<NULL> function pointer and because it could
potentially warn under some level of strict-ness.
-"Superseded" by sv_nosharing().
+"Superseded" by C<sv_nosharing()>.
=cut
*/
=for apidoc sv_nounlocking
Dummy routine which "unlocks" an SV when there is no locking module present.
-Exists to avoid test for a NULL function pointer and because it could
+Exists to avoid test for a C<NULL> function pointer and because it could
potentially warn under some level of strict-ness.
-"Superseded" by sv_nosharing().
+"Superseded" by C<sv_nosharing()>.
=cut
+
+PERL_UNLOCK_HOOK in intrpvar.h is the macro that refers to this, and guarantees
+that mathoms gets loaded.
+
*/
void
void
Perl_save_long(pTHX_ long int *longp)
{
- dVAR;
-
PERL_ARGS_ASSERT_SAVE_LONG;
SSCHECK(3);
}
void
-Perl_save_iv(pTHX_ IV *ivp)
-{
- dVAR;
-
- PERL_ARGS_ASSERT_SAVE_IV;
-
- SSCHECK(3);
- SSPUSHIV(*ivp);
- SSPUSHPTR(ivp);
- SSPUSHUV(SAVEt_IV);
-}
-
-void
Perl_save_nogv(pTHX_ GV *gv)
{
- dVAR;
-
PERL_ARGS_ASSERT_SAVE_NOGV;
SSCHECK(2);
void
Perl_save_list(pTHX_ SV **sarg, I32 maxsarg)
{
- dVAR;
I32 i;
PERL_ARGS_ASSERT_SAVE_LIST;
/*
=for apidoc sv_usepvn
-Tells an SV to use C<ptr> to find its string value. Implemented by
+Tells an SV to use C<ptr> to find its string value. Implemented by
calling C<sv_usepvn_flags> with C<flags> of 0, hence does not handle 'set'
-magic. See C<sv_usepvn_flags>.
+magic. See C<L</sv_usepvn_flags>>.
=cut
*/
/*
=for apidoc unpack_str
-The engine implementing unpack() Perl function. Note: parameters strbeg, new_s
-and ocnt are not used. This call should not be used, use unpackstring instead.
+The engine implementing C<unpack()> Perl function. Note: parameters C<strbeg>,
+C<new_s> and C<ocnt> are not used. This call should not be used, use
+C<unpackstring> instead.
=cut */
-I32
+SSize_t
Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s,
const char *strbeg, const char *strend, char **new_s, I32 ocnt,
U32 flags)
/*
=for apidoc pack_cat
-The engine implementing pack() Perl function. Note: parameters next_in_list and
-flags are not used. This call should not be used; use packlist instead.
+The engine implementing C<pack()> Perl function. Note: parameters
+C<next_in_list> and C<flags> are not used. This call should not be used; use
+C<packlist> instead.
=cut
*/
{
PERL_ARGS_ASSERT_HV_EXISTS_ENT;
- return hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash)
- ? TRUE : FALSE;
+ return cBOOL(hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash));
}
HE *
klen = klen_i32;
flags = 0;
}
- return hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0)
- ? TRUE : FALSE;
+ return cBOOL(hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0));
}
SV**
NULL, 0));
}
-/* Functions after here were made mathoms post 5.10.0 but pre 5.8.9 */
-
AV *
Perl_newAV(pTHX)
{
void
Perl_save_freesv(pTHX_ SV *sv)
{
- dVAR;
save_freesv(sv);
}
void
Perl_save_mortalizesv(pTHX_ SV *sv)
{
- dVAR;
-
PERL_ARGS_ASSERT_SAVE_MORTALIZESV;
save_mortalizesv(sv);
void
Perl_save_freeop(pTHX_ OP *o)
{
- dVAR;
save_freeop(o);
}
void
Perl_save_freepv(pTHX_ char *pv)
{
- dVAR;
save_freepv(pv);
}
void
Perl_save_op(pTHX)
{
- dVAR;
save_op();
}
char *
Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
{
+ PERL_ARGS_ASSERT_SV_COLLXFRM;
return sv_collxfrm_flags(sv, nxp, SV_GMAGIC);
}
+
+char *
+Perl_mem_collxfrm(pTHX_ const char *input_string, STRLEN len, STRLEN *xlen)
+{
+ /* This function is retained for compatibility in case someone outside core
+ * is using this (but it is undocumented) */
+
+ PERL_ARGS_ASSERT_MEM_COLLXFRM;
+
+ return _mem_collxfrm(input_string, len, xlen, FALSE);
+}
+
#endif
bool
Perl_sv_2bool(pTHX_ SV *const sv)
{
+ PERL_ARGS_ASSERT_SV_2BOOL;
return sv_2bool_flags(sv, SV_GMAGIC);
}
/*
=for apidoc custom_op_name
-Return the name for a given custom op. This was once used by the OP_NAME
+Return the name for a given custom op. This was once used by the C<OP_NAME>
macro, but is no longer: it has only been kept for compatibility, and
should not be used.
=for apidoc custom_op_desc
-Return the description of a given custom op. This was once used by the
-OP_DESC macro, but is no longer: it has only been kept for
+Return the description of a given custom op. This was once used by the
+C<OP_DESC> macro, but is no longer: it has only been kept for
compatibility, and should not be used.
=cut
Perl_custom_op_name(pTHX_ const OP* o)
{
PERL_ARGS_ASSERT_CUSTOM_OP_NAME;
- return XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_name);
+ return XopENTRYCUSTOM(o, xop_name);
}
const char*
Perl_custom_op_desc(pTHX_ const OP* o)
{
PERL_ARGS_ASSERT_CUSTOM_OP_DESC;
- return XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_desc);
+ return XopENTRYCUSTOM(o, xop_desc);
}
CV *
Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
{
- return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
+ return newATTRSUB(floor, o, proto, NULL, block);
}
-UV
-Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
+SV *
+Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
{
- PERL_ARGS_ASSERT_TO_UTF8_FOLD;
+ return Perl_sv_mortalcopy_flags(aTHX_ oldstr, SV_GMAGIC);
+}
+
+void
+Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
+{
+ PERL_ARGS_ASSERT_SV_COPYPV;
- return _to_utf8_fold_flags(p, ustrp, lenp, FOLD_FLAGS_FULL, NULL);
+ sv_copypv_flags(dsv, ssv, SV_GMAGIC);
}
-UV
-Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
+UV /* Made into a function, so can be deprecated */
+NATIVE_TO_NEED(const UV enc, const UV ch)
{
- PERL_ARGS_ASSERT_TO_UTF8_LOWER;
+ PERL_UNUSED_ARG(enc);
+ return ch;
+}
- return _to_utf8_lower_flags(p, ustrp, lenp, FALSE, NULL);
+UV /* Made into a function, so can be deprecated */
+ASCII_TO_NEED(const UV enc, const UV ch)
+{
+ PERL_UNUSED_ARG(enc);
+ return ch;
}
-UV
-Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
+bool
+Perl_is_uni_alnum(pTHX_ UV c)
{
- PERL_ARGS_ASSERT_TO_UTF8_TITLE;
+ return isWORDCHAR_uni(c);
+}
- return _to_utf8_title_flags(p, ustrp, lenp, FALSE, NULL);
+bool
+Perl_is_uni_alnumc(pTHX_ UV c)
+{
+ return isALNUM_uni(c);
}
-UV
-Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
+bool
+Perl_is_uni_alpha(pTHX_ UV c)
{
- PERL_ARGS_ASSERT_TO_UTF8_UPPER;
+ return isALPHA_uni(c);
+}
- return _to_utf8_upper_flags(p, ustrp, lenp, FALSE, NULL);
+bool
+Perl_is_uni_ascii(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isASCII_uni(c);
}
-SV *
-Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
+bool
+Perl_is_uni_blank(pTHX_ UV c)
{
- return Perl_sv_mortalcopy_flags(aTHX_ oldstr, SV_GMAGIC);
+ PERL_UNUSED_CONTEXT;
+ return isBLANK_uni(c);
}
-UV /* Made into a function, so can be deprecated */
-NATIVE_TO_NEED(const UV enc, const UV ch)
+bool
+Perl_is_uni_space(pTHX_ UV c)
{
- PERL_UNUSED_ARG(enc);
- return ch;
+ PERL_UNUSED_CONTEXT;
+ return isSPACE_uni(c);
}
-UV /* Made into a function, so can be deprecated */
-ASCII_TO_NEED(const UV enc, const UV ch)
+bool
+Perl_is_uni_digit(pTHX_ UV c)
{
- PERL_UNUSED_ARG(enc);
- return ch;
+ PERL_UNUSED_CONTEXT;
+ return isDIGIT_uni(c);
+}
+
+bool
+Perl_is_uni_upper(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isUPPER_uni(c);
+}
+
+bool
+Perl_is_uni_lower(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isLOWER_uni(c);
+}
+
+bool
+Perl_is_uni_cntrl(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isCNTRL_L1(c);
+}
+
+bool
+Perl_is_uni_graph(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isGRAPH_uni(c);
+}
+
+bool
+Perl_is_uni_print(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isPRINT_uni(c);
+}
+
+bool
+Perl_is_uni_punct(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isPUNCT_uni(c);
+}
+
+bool
+Perl_is_uni_xdigit(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isXDIGIT_uni(c);
+}
+
+bool
+Perl_is_uni_alnum_lc(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isWORDCHAR_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_alnumc_lc(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isALPHANUMERIC_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_idfirst_lc(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ /* XXX Should probably be something that resolves to the old IDFIRST, but
+ * this function is deprecated, so not bothering */
+ return isIDFIRST_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_alpha_lc(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isALPHA_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_ascii_lc(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isASCII_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_blank_lc(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isBLANK_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_space_lc(pTHX_ UV c)
+{
+ PERL_UNUSED_CONTEXT;
+ return isSPACE_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_digit_lc(pTHX_ UV c)
+{
+ return isDIGIT_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_idfirst(pTHX_ UV c)
+{
+ U8 tmpbuf[UTF8_MAXBYTES+1];
+ uvchr_to_utf8(tmpbuf, c);
+ return _is_utf8_idstart(tmpbuf);
+}
+
+bool
+Perl_is_uni_upper_lc(pTHX_ UV c)
+{
+ return isUPPER_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_lower_lc(pTHX_ UV c)
+{
+ return isLOWER_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_cntrl_lc(pTHX_ UV c)
+{
+ return isCNTRL_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_graph_lc(pTHX_ UV c)
+{
+ return isGRAPH_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_print_lc(pTHX_ UV c)
+{
+ return isPRINT_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_punct_lc(pTHX_ UV c)
+{
+ return isPUNCT_LC_uvchr(c);
+}
+
+bool
+Perl_is_uni_xdigit_lc(pTHX_ UV c)
+{
+ return isXDIGIT_LC_uvchr(c);
+}
+
+U32
+Perl_to_uni_upper_lc(pTHX_ U32 c)
+{
+ /* XXX returns only the first character -- do not use XXX */
+ /* XXX no locale support yet */
+ STRLEN len;
+ U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
+ return (U32)to_uni_upper(c, tmpbuf, &len);
+}
+
+U32
+Perl_to_uni_title_lc(pTHX_ U32 c)
+{
+ /* XXX returns only the first character XXX -- do not use XXX */
+ /* XXX no locale support yet */
+ STRLEN len;
+ U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
+ return (U32)to_uni_title(c, tmpbuf, &len);
+}
+
+U32
+Perl_to_uni_lower_lc(pTHX_ U32 c)
+{
+ /* XXX returns only the first character -- do not use XXX */
+ /* XXX no locale support yet */
+ STRLEN len;
+ U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
+ return (U32)to_uni_lower(c, tmpbuf, &len);
+}
+
+bool
+Perl_is_utf8_mark(pTHX_ const U8 *p)
+{
+ PERL_ARGS_ASSERT_IS_UTF8_MARK;
+
+ return _is_utf8_mark(p);
}
/*
-=for apidoc uvuni_to_utf8_flags
+=for apidoc is_utf8_char
-Instead you almost certainly want to use L</uvchr_to_utf8> or
-L</uvchr_to_utf8_flags>>.
+Tests if some arbitrary number of bytes begins in a valid UTF-8
+character. Note that an INVARIANT (i.e. ASCII on non-EBCDIC machines)
+character is a valid UTF-8 character. The actual number of bytes in the UTF-8
+character will be returned if it is valid, otherwise 0.
-This function is a deprecated synonym for L</uvoffuni_to_utf8_flags>,
-which itself, while not deprecated, should be used only in isolated
-circumstances. These functions were useful for code that wanted to handle
-both EBCDIC and ASCII platforms with Unicode properties, but starting in Perl
-v5.20, the distinctions between the platforms have mostly been made invisible
-to most code, so this function is quite unlikely to be what you want.
+This function is deprecated due to the possibility that malformed input could
+cause reading beyond the end of the input buffer. Use L</isUTF8_CHAR>
+instead.
-=cut
-*/
+=cut */
-U8 *
-Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
+STRLEN
+Perl_is_utf8_char(const U8 *s)
{
- PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS;
+ PERL_ARGS_ASSERT_IS_UTF8_CHAR;
- return uvoffuni_to_utf8_flags(d, uv, flags);
+ /* Assumes we have enough space, which is why this is deprecated. But the
+ * strnlen() makes it safe for the common case of NUL-terminated strings */
+ return isUTF8_CHAR(s, s + my_strnlen((char *) s, UTF8SKIP(s)));
}
/*
-=for apidoc utf8n_to_uvuni
+=for apidoc is_utf8_char_buf
-Instead use L</utf8_to_uvchr_buf>, or rarely, L</utf8n_to_uvchr>.
+This is identical to the macro L<perlapi/isUTF8_CHAR>.
-This function was usefulfor code that wanted to handle both EBCDIC and
-ASCII platforms with Unicode properties, but starting in Perl v5.20, the
-distinctions between the platforms have mostly been made invisible to most
-code, so this function is quite unlikely to be what you want.
-C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|/utf8_to_uvchr_buf>> instead.
+=cut */
+
+STRLEN
+Perl_is_utf8_char_buf(const U8 *buf, const U8* buf_end)
+{
+
+ PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF;
+
+ return isUTF8_CHAR(buf, buf_end);
+}
+
+/* DEPRECATED!
+ * Like L</utf8_to_uvuni_buf>(), but should only be called when it is known that
+ * there are no malformations in the input UTF-8 string C<s>. Surrogates,
+ * non-character code points, and non-Unicode code points are allowed */
+
+UV
+Perl_valid_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
+{
+ PERL_UNUSED_CONTEXT;
+ PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI;
+
+ return NATIVE_TO_UNI(valid_utf8_to_uvchr(s, retlen));
+}
+
+/*
+=for apidoc utf8_to_uvuni
+
+Returns the Unicode code point of the first character in the string C<s>
+which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
+length, in bytes, of that character.
+
+Some, but not all, UTF-8 malformations are detected, and in fact, some
+malformed input could cause reading beyond the end of the input buffer, which
+is one reason why this function is deprecated. The other is that only in
+extremely limited circumstances should the Unicode versus native code point be
+of any interest to you. See L</utf8_to_uvuni_buf> for alternatives.
+
+If C<s> points to one of the detected malformations, and UTF8 warnings are
+enabled, zero is returned and C<*retlen> is set (if C<retlen> doesn't point to
+NULL) to -1. If those warnings are off, the computed value if well-defined (or
+the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
+is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
+next possible position in C<s> that could begin a non-malformed character.
+See L<perlapi/utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
=cut
*/
UV
-Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
+Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
+{
+ PERL_UNUSED_CONTEXT;
+ PERL_ARGS_ASSERT_UTF8_TO_UVUNI;
+
+ return NATIVE_TO_UNI(valid_utf8_to_uvchr(s, retlen));
+}
+
+/*
+=for apidoc pad_compname_type
+
+Looks up the type of the lexical variable at position C<po> in the
+currently-compiling pad. If the variable is typed, the stash of the
+class to which it is typed is returned. If not, C<NULL> is returned.
+
+=cut
+*/
+
+HV *
+Perl_pad_compname_type(pTHX_ const PADOFFSET po)
{
- PERL_ARGS_ASSERT_UTF8N_TO_UVUNI;
+ return PAD_COMPNAME_TYPE(po);
+}
- return utf8n_to_uvoffuni(s, curlen, retlen, flags);
+/* return ptr to little string in big string, NULL if not found */
+/* The original version of this routine was donated by Corey Satten. */
+
+char *
+Perl_instr(const char *big, const char *little)
+{
+ PERL_ARGS_ASSERT_INSTR;
+
+ return instr((char *) big, (char *) little);
}
-END_EXTERN_C
+SV *
+Perl_newSVsv(pTHX_ SV *const old)
+{
+ return newSVsv(old);
+}
+
+bool
+Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
+{
+ PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
+
+ return sv_utf8_downgrade(sv, fail_ok);
+}
+
+char *
+Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
+{
+ PERL_ARGS_ASSERT_SV_2PVUTF8;
+
+ return sv_2pvutf8(sv, lp);
+}
+
+char *
+Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
+{
+ PERL_ARGS_ASSERT_SV_2PVBYTE;
+
+ return sv_2pvbyte(sv, lp);
+}
+
+GCC_DIAG_RESTORE
#endif /* NO_MATHOMS */
/*
- * Local variables:
- * c-indentation-style: bsd
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- *
* ex: set ts=8 sts=4 sw=4 et:
*/