X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/083750a56b7927292a4bf7b1bf64aa26dd2a6858..9d3980bc229750e6c07726fe529f02bf4dc6a5a5:/mathoms.c?ds=sidebyside diff --git a/mathoms.c b/mathoms.c index 5ee91d5..8b003d3 100644 --- a/mathoms.c +++ b/mathoms.c @@ -19,18 +19,39 @@ -/* +/* * 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. * - * REMEMBER to update makedef.pl when adding a function to mathoms.c!!! + * 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 * - * SMP - Oct. 24, 2005 + * #ifndef NO_MATHOMS + * ... + * #endif + * + * 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'> @@ -50,63 +71,6 @@ C<-Accflags='-DNO_MATHOMS'> */ #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); - /* ref() is now a macro using Perl_doref; * this version provided for binary compatibility only. */ @@ -122,7 +86,7 @@ Perl_ref(pTHX_ OP *o, I32 type) 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. This is C with the C -being zero. See C. +being zero. See C>. =cut */ @@ -257,7 +221,7 @@ Perl_sv_2pvutf8_nolen(pTHX_ SV *sv) 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. +an C. See also C>. =cut */ @@ -554,7 +518,7 @@ int Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...) { int ret = 0; - va_list(arglist); + va_list arglist; /* Easier to special case this here than in embed.pl. (Look at what it generates for proto.h) */ @@ -572,7 +536,7 @@ int Perl_printf_nocontext(const char *format, ...) { dTHX; - va_list(arglist); + va_list arglist; int ret = 0; #ifdef PERL_IMPLICIT_CONTEXT @@ -726,10 +690,9 @@ Perl_init_i18nl14n(pTHX_ int printwarn) } 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; - PERL_UNUSED_CONTEXT; return is_utf8_string_loclen(s, len, ep, 0); } @@ -738,10 +701,10 @@ Perl_is_utf8_string_loc(pTHX_ const U8 *s, STRLEN len, const U8 **ep) =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 function pointer and because it could potentially warn under some level of strict-ness. -"Superseded" by sv_nosharing(). +"Superseded" by C. =cut */ @@ -758,10 +721,10 @@ Perl_sv_nolocking(pTHX_ SV *sv) =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 function pointer and because it could potentially warn under some level of strict-ness. -"Superseded" by sv_nosharing(). +"Superseded" by C. =cut */ @@ -785,17 +748,6 @@ Perl_save_long(pTHX_ long int *longp) } void -Perl_save_iv(pTHX_ IV *ivp) -{ - PERL_ARGS_ASSERT_SAVE_IV; - - SSCHECK(3); - SSPUSHIV(*ivp); - SSPUSHPTR(ivp); - SSPUSHUV(SAVEt_IV); -} - -void Perl_save_nogv(pTHX_ GV *gv) { PERL_ARGS_ASSERT_SAVE_NOGV; @@ -845,7 +797,7 @@ Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len) Tells an SV to use C to find its string value. Implemented by calling C with C of 0, hence does not handle 'set' -magic. See C. +magic. See C>. =cut */ @@ -861,13 +813,13 @@ Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len) /* =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 Perl function. Note: parameters C, +C and C are not used. This call should not be used, use +C 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) @@ -884,9 +836,9 @@ Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, /* =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 Perl function. Note: parameters +C and C are not used. This call should not be used; use +C instead. =cut */ @@ -913,8 +865,7 @@ Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash) { 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 * @@ -975,8 +926,7 @@ Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32) 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** @@ -1018,8 +968,6 @@ Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags) NULL, 0)); } -/* Functions after here were made mathoms post 5.10.0 but pre 5.8.9 */ - AV * Perl_newAV(pTHX) { @@ -1133,26 +1081,40 @@ Perl_sv_eq(pTHX_ SV *sv1, SV *sv2) char * Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp) { + PERL_ARGS_ASSERT_SV_COLLXFRM; return sv_collxfrm_flags(sv, nxp, SV_GMAGIC); } + +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 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 +C macro, but is no longer: it has only been kept for compatibility, and should not be used. =cut @@ -1183,7 +1145,7 @@ Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) { PERL_ARGS_ASSERT_TO_UTF8_FOLD; - return _to_utf8_fold_flags(p, ustrp, lenp, FOLD_FLAGS_FULL); + return toFOLD_utf8(p, ustrp, lenp); } UV @@ -1191,7 +1153,7 @@ Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) { PERL_ARGS_ASSERT_TO_UTF8_LOWER; - return _to_utf8_lower_flags(p, ustrp, lenp, FALSE); + return toLOWER_utf8(p, ustrp, lenp); } UV @@ -1199,7 +1161,7 @@ Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) { PERL_ARGS_ASSERT_TO_UTF8_TITLE; - return _to_utf8_title_flags(p, ustrp, lenp, FALSE); + return toTITLE_utf8(p, ustrp, lenp); } UV @@ -1207,7 +1169,7 @@ Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) { PERL_ARGS_ASSERT_TO_UTF8_UPPER; - return _to_utf8_upper_flags(p, ustrp, lenp, FALSE); + return toUPPER_utf8(p, ustrp, lenp); } SV * @@ -1216,6 +1178,14 @@ Perl_sv_mortalcopy(pTHX_ SV *const oldstr) 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; + + sv_copypv_flags(dsv, ssv, SV_GMAGIC); +} + UV /* Made into a function, so can be deprecated */ NATIVE_TO_NEED(const UV enc, const UV ch) { @@ -1690,8 +1660,25 @@ Perl_is_utf8_char(const U8 *s) { PERL_ARGS_ASSERT_IS_UTF8_CHAR; - /* Assumes we have enough space, which is why this is deprecated */ - return isUTF8_CHAR(s, s + UTF8SKIP(s)); + /* 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 is_utf8_char_buf + +This is identical to the macro L. + +=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! @@ -1702,42 +1689,13 @@ Perl_is_utf8_char(const U8 *s) 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_uvchr - -Returns the native code point of the first character in the string C -which is assumed to be in UTF-8 encoding; C will be set to the -length, in bytes, of that character. - -Some, but not all, UTF-8 malformations are detected, and in fact, some -malformed input could cause reading beyond the end of the input buffer, which -is why this function is deprecated. Use L instead. - -If C points to one of the detected malformations, and UTF8 warnings are -enabled, zero is returned and C<*retlen> is set (if C isn't -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 isn't NULL) so that (S + C<*retlen>>) is the -next possible position in C that could begin a non-malformed character. -See L for details on when the REPLACEMENT CHARACTER is returned. - -=cut -*/ - -UV -Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen) -{ - PERL_ARGS_ASSERT_UTF8_TO_UVCHR; - - return utf8_to_uvchr_buf(s, s + UTF8_MAXBYTES, retlen); -} - -/* =for apidoc utf8_to_uvuni Returns the Unicode code point of the first character in the string C @@ -1764,21 +1722,16 @@ See L for details on when the REPLACEMENT CHARACTER is returned UV 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)); } -void -Perl_save_re_context(pTHX) -{ - PERL_UNUSED_CONTEXT; -} - /* =for apidoc Am|HV *|pad_compname_type|PADOFFSET po -Looks up the type of the lexical variable at position I in the +Looks up the type of the lexical variable at position C 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 is returned. @@ -1791,17 +1744,19 @@ Perl_pad_compname_type(pTHX_ const PADOFFSET po) return PAD_COMPNAME_TYPE(po); } +/* return ptr to little string in big string, NULL if not found */ +/* The original version of this routine was donated by Corey Satten. */ -END_EXTERN_C +char * +Perl_instr(const char *big, const char *little) +{ + PERL_ARGS_ASSERT_INSTR; + + return instr((char *) big, (char *) little); +} #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: */