3 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010,
4 * 2011, 2012 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Anything that Hobbits had no immediate use for, but were unwilling to
13 * throw away, they called a mathom. Their dwellings were apt to become
14 * rather crowded with mathoms, and many of the presents that passed from
15 * hand to hand were of that sort.
17 * [p.5 of _The Lord of the Rings_: "Prologue"]
23 * This file contains mathoms, various binary artifacts from previous
24 * versions of Perl which we cannot completely remove from the core
25 * code. There is only one reason these days for functions should be here:
27 * 1) A function has been replaced by a macro within a minor release,
28 * so XS modules compiled against an older release will expect to
29 * still be able to link against the function
31 * It used to be that this was the way to handle the case were a function
32 * Perl_foo(...) had been replaced by a macro. But see the 'm' flag discussion
33 * in embed.fnc for a better way to handle this.
35 * This file can't just be cleaned out periodically, because that would break
36 * builds with -DPERL_NO_SHORT_NAMES
38 * NOTE: ALL FUNCTIONS IN THIS FILE should have an entry with the 'b' flag in
41 * To move a function to this file, simply cut and paste it here, and change
42 * its embed.fnc entry to additionally have the 'b' flag. If, for some reason
43 * a function you'd like to be treated as mathoms can't be moved from its
44 * current place, simply enclose it between
50 * and add the 'b' flag in embed.fnc.
52 * The compilation of this file and the functions within it can be suppressed
53 * by adding this option to Configure:
55 * -Accflags='-DNO_MATHOMS'
57 * Some of the functions here are also deprecated.
63 #define PERL_IN_MATHOMS_C
67 /* ..." warning: ISO C forbids an empty source file"
68 So make sure we have something in here by processing the headers anyway.
72 /* The functions in this file should be able to call other deprecated functions
73 * without a compiler warning */
74 GCC_DIAG_IGNORE(-Wdeprecated-declarations)
76 /* ref() is now a macro using Perl_doref;
77 * this version provided for binary compatibility only.
80 Perl_ref(pTHX_ OP *o, I32 type)
82 return doref(o, type, TRUE);
86 Perl_sv_unref(pTHX_ SV *sv)
88 PERL_ARGS_ASSERT_SV_UNREF;
90 sv_unref_flags(sv, 0);
94 =for apidoc_section $tainting
97 Taint an SV. Use C<SvTAINTED_on> instead.
103 Perl_sv_taint(pTHX_ SV *sv)
105 PERL_ARGS_ASSERT_SV_TAINT;
107 sv_magic((sv), NULL, PERL_MAGIC_taint, NULL, 0);
110 /* sv_2iv() is now a macro using Perl_sv_2iv_flags();
111 * this function provided for binary compatibility only
115 Perl_sv_2iv(pTHX_ SV *sv)
117 PERL_ARGS_ASSERT_SV_2IV;
119 return sv_2iv_flags(sv, SV_GMAGIC);
122 /* sv_2uv() is now a macro using Perl_sv_2uv_flags();
123 * this function provided for binary compatibility only
127 Perl_sv_2uv(pTHX_ SV *sv)
129 PERL_ARGS_ASSERT_SV_2UV;
131 return sv_2uv_flags(sv, SV_GMAGIC);
134 /* sv_2nv() is now a macro using Perl_sv_2nv_flags();
135 * this function provided for binary compatibility only
139 Perl_sv_2nv(pTHX_ SV *sv)
141 return sv_2nv_flags(sv, SV_GMAGIC);
145 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
146 * this function provided for binary compatibility only
150 Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp)
152 PERL_ARGS_ASSERT_SV_2PV;
154 return sv_2pv_flags(sv, lp, SV_GMAGIC);
158 =for apidoc_section $SV
159 =for apidoc sv_2pv_nolen
161 Like C<sv_2pv()>, but doesn't return the length too. You should usually
162 use the macro wrapper C<SvPV_nolen(sv)> instead.
168 Perl_sv_2pv_nolen(pTHX_ SV *sv)
170 PERL_ARGS_ASSERT_SV_2PV_NOLEN;
171 return sv_2pv(sv, NULL);
175 =for apidoc_section $SV
176 =for apidoc sv_2pvbyte_nolen
178 Return a pointer to the byte-encoded representation of the SV.
179 May cause the SV to be downgraded from UTF-8 as a side-effect.
181 Usually accessed via the C<SvPVbyte_nolen> macro.
187 Perl_sv_2pvbyte_nolen(pTHX_ SV *sv)
189 PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN;
191 return sv_2pvbyte(sv, NULL);
195 =for apidoc_section $SV
196 =for apidoc sv_2pvutf8_nolen
198 Return a pointer to the UTF-8-encoded representation of the SV.
199 May cause the SV to be upgraded to UTF-8 as a side-effect.
201 Usually accessed via the C<SvPVutf8_nolen> macro.
207 Perl_sv_2pvutf8_nolen(pTHX_ SV *sv)
209 PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN;
211 return sv_2pvutf8(sv, NULL);
215 Perl_sv_force_normal(pTHX_ SV *sv)
217 PERL_ARGS_ASSERT_SV_FORCE_NORMAL;
219 sv_force_normal_flags(sv, 0);
222 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
223 * this function provided for binary compatibility only
227 Perl_sv_setsv(pTHX_ SV *dsv, SV *ssv)
229 PERL_ARGS_ASSERT_SV_SETSV;
231 sv_setsv_flags(dsv, ssv, SV_GMAGIC);
234 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
235 * this function provided for binary compatibility only
239 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
241 PERL_ARGS_ASSERT_SV_CATPVN;
243 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
247 Perl_sv_catpvn_mg(pTHX_ SV *dsv, const char *sstr, STRLEN len)
249 PERL_ARGS_ASSERT_SV_CATPVN_MG;
251 sv_catpvn_flags(dsv,sstr,len,SV_GMAGIC|SV_SMAGIC);
254 /* sv_catsv() is now a macro using Perl_sv_catsv_flags();
255 * this function provided for binary compatibility only
259 Perl_sv_catsv(pTHX_ SV *dsv, SV * const sstr)
261 PERL_ARGS_ASSERT_SV_CATSV;
263 sv_catsv_flags(dsv, sstr, SV_GMAGIC);
267 Perl_sv_catsv_mg(pTHX_ SV *dsv, SV * const sstr)
269 PERL_ARGS_ASSERT_SV_CATSV_MG;
271 sv_catsv_flags(dsv,sstr,SV_GMAGIC|SV_SMAGIC);
275 =for apidoc_section $SV
278 Use the C<SvPV_nolen> macro instead
283 /* sv_pv() is now a macro using SvPV_nolen();
284 * this function provided for binary compatibility only
288 Perl_sv_pv(pTHX_ SV *sv)
290 PERL_ARGS_ASSERT_SV_PV;
295 return sv_2pv(sv, NULL);
298 /* sv_pvn_force() is now a macro using Perl_sv_pvn_force_flags();
299 * this function provided for binary compatibility only
303 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
305 PERL_ARGS_ASSERT_SV_PVN_FORCE;
307 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
310 /* sv_pvbyte () is now a macro using Perl_sv_2pv_flags();
311 * this function provided for binary compatibility only
315 Perl_sv_pvbyte(pTHX_ SV *sv)
317 PERL_ARGS_ASSERT_SV_PVBYTE;
319 (void)sv_utf8_downgrade(sv, FALSE);
324 =for apidoc_section $SV
325 =for apidoc sv_pvbyte
327 Use C<SvPVbyte_nolen> instead.
333 =for apidoc_section $SV
334 =for apidoc sv_pvutf8
336 Use the C<SvPVutf8_nolen> macro instead
343 Perl_sv_pvutf8(pTHX_ SV *sv)
345 PERL_ARGS_ASSERT_SV_PVUTF8;
351 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
352 * this function provided for binary compatibility only
356 Perl_sv_utf8_upgrade(pTHX_ SV *sv)
358 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE;
360 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
363 #if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL))
365 * This hack is to force load of "huge" support from libm.a
366 * So it is in perl for (say) POSIX to use.
367 * Needed for SunOS with Sun's 'acc' for example.
372 # if defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)
381 Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix)
383 PERL_ARGS_ASSERT_GV_FULLNAME3;
385 gv_fullname4(sv, gv, prefix, TRUE);
389 Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix)
391 PERL_ARGS_ASSERT_GV_EFULLNAME3;
393 gv_efullname4(sv, gv, prefix, TRUE);
397 Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name)
399 PERL_ARGS_ASSERT_GV_FETCHMETHOD;
401 return gv_fetchmethod_autoload(stash, name, TRUE);
405 Perl_hv_iternext(pTHX_ HV *hv)
407 PERL_ARGS_ASSERT_HV_ITERNEXT;
409 return hv_iternext_flags(hv, 0);
413 Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how)
415 PERL_ARGS_ASSERT_HV_MAGIC;
417 sv_magic(MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0);
421 Perl_do_open(pTHX_ GV *gv, const char *name, I32 len, int as_raw,
422 int rawmode, int rawperm, PerlIO *supplied_fp)
424 PERL_ARGS_ASSERT_DO_OPEN;
426 return do_openn(gv, name, len, as_raw, rawmode, rawperm,
427 supplied_fp, (SV **) NULL, 0);
432 Perl_do_aexec(pTHX_ SV *really, SV **mark, SV **sp)
434 PERL_ARGS_ASSERT_DO_AEXEC;
436 return do_aexec5(really, mark, sp, 0, 0);
441 =for apidoc_section $SV
442 =for apidoc sv_nolocking
444 Dummy routine which "locks" an SV when there is no locking module present.
445 Exists to avoid test for a C<NULL> function pointer and because it could
446 potentially warn under some level of strict-ness.
448 "Superseded" by C<sv_nosharing()>.
454 Perl_sv_nolocking(pTHX_ SV *sv)
462 =for apidoc_section $SV
463 =for apidoc sv_nounlocking
465 Dummy routine which "unlocks" an SV when there is no locking module present.
466 Exists to avoid test for a C<NULL> function pointer and because it could
467 potentially warn under some level of strict-ness.
469 "Superseded" by C<sv_nosharing()>.
473 PERL_UNLOCK_HOOK in intrpvar.h is the macro that refers to this, and guarantees
474 that mathoms gets loaded.
479 Perl_sv_nounlocking(pTHX_ SV *sv)
486 Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len)
488 PERL_ARGS_ASSERT_SV_USEPVN_MG;
490 sv_usepvn_flags(sv,ptr,len, SV_SMAGIC);
495 Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len)
497 PERL_ARGS_ASSERT_SV_USEPVN;
499 sv_usepvn_flags(sv,ptr,len, 0);
503 Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, U32 hash)
505 return (HE *)hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISSTORE, val, hash);
509 Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash)
511 PERL_ARGS_ASSERT_HV_EXISTS_ENT;
513 return cBOOL(hv_common(hv, keysv, NULL, 0, 0, HV_FETCH_ISEXISTS, 0, hash));
517 Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash)
519 PERL_ARGS_ASSERT_HV_FETCH_ENT;
521 return (HE *)hv_common(hv, keysv, NULL, 0, 0,
522 (lval ? HV_FETCH_LVALUE : 0), NULL, hash);
526 Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash)
528 PERL_ARGS_ASSERT_HV_DELETE_ENT;
530 return MUTABLE_SV(hv_common(hv, keysv, NULL, 0, 0, flags | HV_DELETE, NULL,
535 Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash,
538 return (SV**) hv_common(hv, NULL, key, klen, flags,
539 (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
543 Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash)
555 return (SV **) hv_common(hv, NULL, key, klen, flags,
556 (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash);
560 Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32)
565 PERL_ARGS_ASSERT_HV_EXISTS;
574 return cBOOL(hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0));
578 Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval)
583 PERL_ARGS_ASSERT_HV_FETCH;
592 return (SV **) hv_common(hv, NULL, key, klen, flags,
593 lval ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE)
594 : HV_FETCH_JUST_SV, NULL, 0);
598 Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags)
603 PERL_ARGS_ASSERT_HV_DELETE;
607 k_flags = HVhek_UTF8;
612 return MUTABLE_SV(hv_common(hv, NULL, key, klen, k_flags, flags | HV_DELETE,
619 return MUTABLE_AV(newSV_type(SVt_PVAV));
620 /* sv_upgrade does AvREAL_only():
623 AvMAX(av) = AvFILLp(av) = -1; */
629 HV * const hv = MUTABLE_HV(newSV_type(SVt_PVHV));
636 Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len,
637 const char *const little, const STRLEN littlelen)
639 PERL_ARGS_ASSERT_SV_INSERT;
640 sv_insert_flags(bigstr, offset, len, little, littlelen, SV_GMAGIC);
644 Perl_save_freesv(pTHX_ SV *sv)
650 Perl_save_mortalizesv(pTHX_ SV *sv)
652 PERL_ARGS_ASSERT_SAVE_MORTALIZESV;
654 save_mortalizesv(sv);
658 Perl_save_freeop(pTHX_ OP *o)
664 Perl_save_freepv(pTHX_ char *pv)
675 #ifdef PERL_DONT_CREATE_GVSV
677 Perl_gv_SVadd(pTHX_ GV *gv)
684 Perl_gv_AVadd(pTHX_ GV *gv)
690 Perl_gv_HVadd(pTHX_ GV *gv)
696 Perl_gv_IOadd(pTHX_ GV *gv)
704 return MUTABLE_IO(newSV_type(SVt_PVIO));
710 return my_stat_flags(SV_GMAGIC);
716 return my_lstat_flags(SV_GMAGIC);
720 Perl_sv_eq(pTHX_ SV *sv1, SV *sv2)
722 return sv_eq_flags(sv1, sv2, SV_GMAGIC);
725 #ifdef USE_LOCALE_COLLATE
727 Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
729 PERL_ARGS_ASSERT_SV_COLLXFRM;
730 return sv_collxfrm_flags(sv, nxp, SV_GMAGIC);
736 Perl_sv_2bool(pTHX_ SV *const sv)
738 PERL_ARGS_ASSERT_SV_2BOOL;
739 return sv_2bool_flags(sv, SV_GMAGIC);
743 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
745 return newATTRSUB(floor, o, proto, NULL, block);
749 Perl_sv_mortalcopy(pTHX_ SV *const oldsv)
751 return Perl_sv_mortalcopy_flags(aTHX_ oldsv, SV_GMAGIC);
755 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
757 PERL_ARGS_ASSERT_SV_COPYPV;
759 sv_copypv_flags(dsv, ssv, SV_GMAGIC);
763 Perl_is_utf8_char_buf(const U8 *buf, const U8* buf_end)
766 PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF;
768 return isUTF8_CHAR(buf, buf_end);
772 =for apidoc_section $unicode
773 =for apidoc utf8_to_uvuni
775 Returns the Unicode code point of the first character in the string C<s>
776 which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
777 length, in bytes, of that character.
779 Some, but not all, UTF-8 malformations are detected, and in fact, some
780 malformed input could cause reading beyond the end of the input buffer, which
781 is one reason why this function is deprecated. The other is that only in
782 extremely limited circumstances should the Unicode versus native code point be
783 of any interest to you.
785 If C<s> points to one of the detected malformations, and UTF8 warnings are
786 enabled, zero is returned and C<*retlen> is set (if C<retlen> doesn't point to
787 NULL) to -1. If those warnings are off, the computed value if well-defined (or
788 the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
789 is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
790 next possible position in C<s> that could begin a non-malformed character.
791 See L<perlapi/utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
797 Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
800 PERL_ARGS_ASSERT_UTF8_TO_UVUNI;
802 return NATIVE_TO_UNI(valid_utf8_to_uvchr(s, retlen));
806 Perl_newSVsv(pTHX_ SV *const old)
812 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
814 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
816 return sv_utf8_downgrade(sv, fail_ok);
820 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
822 PERL_ARGS_ASSERT_SV_2PVUTF8;
824 return sv_2pvutf8(sv, lp);
828 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
830 PERL_ARGS_ASSERT_SV_2PVBYTE;
832 return sv_2pvbyte(sv, lp);
836 Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
838 PERL_ARGS_ASSERT_UVUNI_TO_UTF8;
840 return uvoffuni_to_utf8_flags(d, uv, 0);
844 =for apidoc_section $unicode
845 =for apidoc utf8n_to_uvuni
847 Instead use L<perlapi/utf8_to_uv>, or rarely, L<perlapi/utf8_to_uv_flags>.
849 This function was useful for code that wanted to handle both EBCDIC and
850 ASCII platforms with Unicode properties, but starting in Perl v5.20, the
851 distinctions between the platforms have mostly been made invisible to most
852 code, so this function is quite unlikely to be what you want. If you do need
853 this precise functionality, use instead L<perlapi/C<utf8_to_uv>> or
854 L<perlapi/C<utf8_to_uv_flags>> to calculate the native code point, and then
855 convert to Unicode using L<perlapi/C<NATIVE_TO_UNI>>.
861 Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
863 PERL_ARGS_ASSERT_UTF8N_TO_UVUNI;
865 return NATIVE_TO_UNI(utf8n_to_uvchr(s, curlen, retlen, flags));
869 Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
871 PERL_ARGS_ASSERT_UTF8_TO_UVCHR;
873 /* This function is unsafe if malformed UTF-8 input is given it, which is
874 * why the function is deprecated. If the first byte of the input
875 * indicates that there are more bytes remaining in the sequence that forms
876 * the character than there are in the input buffer, it can read past the
877 * end. But we can make it safe if the input string happens to be
878 * NUL-terminated, as many strings in Perl are, by refusing to read past a
879 * NUL, which is what UTF8_CHK_SKIP() does. A NUL indicates the start of
880 * the next character anyway. If the input isn't NUL-terminated, the
881 * function remains unsafe, as it always has been. */
883 return utf8_to_uvchr_buf(s, s + UTF8_CHK_SKIP(s), retlen);
888 #endif /* NO_MATHOMS */
891 * ex: set ts=8 sts=4 sw=4 et: