3 * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
4 * 2005, 2006, 2007, 2008 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 * '"The roots of those mountains must be roots indeed; there must be
13 * great secrets buried there which have not been discovered since the
14 * beginning."' --Gandalf, relating Gollum's history
16 * [p.54 of _The Lord of the Rings_, I/ii: "The Shadow of the Past"]
19 /* This file contains the code that implements the functions in Perl's
20 * UNIVERSAL package, such as UNIVERSAL->can().
22 * It is also used to store XS functions that need to be present in
23 * miniperl for a lack of a better place to put them. It might be
24 * clever to move them to separate XS files which would then be pulled
25 * in by some to-be-written build process.
29 #define PERL_IN_UNIVERSAL_C
32 #if defined(USE_PERLIO)
33 #include "perliol.h" /* For the PERLIO_F_XXX */
37 * Contributed by Graham Barr <Graham.Barr@tiuk.ti.com>
38 * The main guts of traverse_isa was actually copied from gv_fetchmeth
42 S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags)
45 const struct mro_meta *const meta = HvMROMETA(stash);
49 PERL_ARGS_ASSERT_ISA_LOOKUP;
52 (void)mro_get_linear_isa(stash);
56 if (hv_common(isa, NULL, name, len, ( flags & SVf_UTF8 ? HVhek_UTF8 : 0),
57 HV_FETCH_ISEXISTS, NULL, 0)) {
58 /* Direct name lookup worked. */
62 /* A stash/class can go by many names (ie. User == main::User), so
63 we use the HvENAME in the stash itself, which is canonical, falling
64 back to HvNAME if necessary. */
65 our_stash = gv_stashpvn(name, len, flags);
68 HEK *canon_name = HvENAME_HEK(our_stash);
69 if (!canon_name) canon_name = HvNAME_HEK(our_stash);
71 if (hv_common(isa, NULL, HEK_KEY(canon_name), HEK_LEN(canon_name),
72 HEK_FLAGS(canon_name),
73 HV_FETCH_ISEXISTS, NULL, HEK_HASH(canon_name))) {
82 =head1 SV Manipulation Functions
84 =for apidoc sv_derived_from_pvn
86 Returns a boolean indicating whether the SV is derived from the specified class
87 I<at the C level>. To check derivation at the Perl level, call C<isa()> as a
90 Currently, the only significant value for C<flags> is SVf_UTF8.
94 =for apidoc sv_derived_from_sv
96 Exactly like L</sv_derived_from_pvn>, but takes the name string in the form
97 of an SV instead of a string/length pair.
104 Perl_sv_derived_from_sv(pTHX_ SV *sv, SV *namesv, U32 flags)
108 PERL_ARGS_ASSERT_SV_DERIVED_FROM_SV;
109 namepv = SvPV(namesv, namelen);
112 return sv_derived_from_pvn(sv, namepv, namelen, flags);
116 =for apidoc sv_derived_from
118 Exactly like L</sv_derived_from_pv>, but doesn't take a C<flags> parameter.
124 Perl_sv_derived_from(pTHX_ SV *sv, const char *const name)
126 PERL_ARGS_ASSERT_SV_DERIVED_FROM;
127 return sv_derived_from_pvn(sv, name, strlen(name), 0);
131 =for apidoc sv_derived_from_pv
133 Exactly like L</sv_derived_from_pvn>, but takes a nul-terminated string
134 instead of a string/length pair.
141 Perl_sv_derived_from_pv(pTHX_ SV *sv, const char *const name, U32 flags)
143 PERL_ARGS_ASSERT_SV_DERIVED_FROM_PV;
144 return sv_derived_from_pvn(sv, name, strlen(name), flags);
148 Perl_sv_derived_from_pvn(pTHX_ SV *sv, const char *const name, const STRLEN len, U32 flags)
153 PERL_ARGS_ASSERT_SV_DERIVED_FROM_PVN;
160 type = sv_reftype(sv,0);
161 if (type && strEQ(type,name))
168 stash = gv_stashsv(sv, 0);
171 if (stash && isa_lookup(stash, name, len, flags))
174 stash = gv_stashpvs("UNIVERSAL", 0);
175 return stash && isa_lookup(stash, name, len, flags);
179 =for apidoc sv_does_sv
181 Returns a boolean indicating whether the SV performs a specific, named role.
182 The SV can be a Perl object or the name of a Perl class.
190 Perl_sv_does_sv(pTHX_ SV *sv, SV *namesv, U32 flags)
197 PERL_ARGS_ASSERT_SV_DOES_SV;
198 PERL_UNUSED_ARG(flags);
205 if (!SvOK(sv) || !(SvROK(sv) || (SvPOK(sv) && SvCUR(sv)))) {
210 if (sv_isobject(sv)) {
211 classname = sv_ref(NULL,SvRV(sv),TRUE);
216 if (sv_eq(classname, namesv)) {
227 methodname = newSVpvs_flags("isa", SVs_TEMP);
228 /* ugly hack: use the SvSCREAM flag so S_method_common
229 * can figure out we're calling DOES() and not isa(),
230 * and report eventual errors correctly. --rgs */
231 SvSCREAM_on(methodname);
232 call_sv(methodname, G_SCALAR | G_METHOD);
235 does_it = SvTRUE( TOPs );
245 Like L</sv_does_pv>, but doesn't take a C<flags> parameter.
251 Perl_sv_does(pTHX_ SV *sv, const char *const name)
253 PERL_ARGS_ASSERT_SV_DOES;
254 return sv_does_sv(sv, newSVpvn_flags(name, strlen(name), SVs_TEMP), 0);
258 =for apidoc sv_does_pv
260 Like L</sv_does_sv>, but takes a nul-terminated string instead of an SV.
267 Perl_sv_does_pv(pTHX_ SV *sv, const char *const name, U32 flags)
269 PERL_ARGS_ASSERT_SV_DOES_PV;
270 return sv_does_sv(sv, newSVpvn_flags(name, strlen(name), SVs_TEMP | flags), flags);
274 =for apidoc sv_does_pvn
276 Like L</sv_does_sv>, but takes a string/length pair instead of an SV.
282 Perl_sv_does_pvn(pTHX_ SV *sv, const char *const name, const STRLEN len, U32 flags)
284 PERL_ARGS_ASSERT_SV_DOES_PVN;
286 return sv_does_sv(sv, newSVpvn_flags(name, len, flags | SVs_TEMP), flags);
290 =for apidoc croak_xs_usage
292 A specialised variant of C<croak()> for emitting the usage message for xsubs
294 croak_xs_usage(cv, "eee_yow");
296 works out the package name and subroutine name from C<cv>, and then calls
297 C<croak()>. Hence if C<cv> is C<&ouch::awk>, it would call C<croak> as:
299 Perl_croak(aTHX_ "Usage: %"SVf"::%"SVf"(%s)", "ouch" "awk", "eee_yow");
305 Perl_croak_xs_usage(const CV *const cv, const char *const params)
307 const GV *const gv = CvGV(cv);
309 PERL_ARGS_ASSERT_CROAK_XS_USAGE;
312 const HV *const stash = GvSTASH(gv);
314 if (HvNAME_get(stash))
315 /* diag_listed_as: SKIPME */
316 Perl_croak_nocontext("Usage: %"HEKf"::%"HEKf"(%s)",
317 HEKfARG(HvNAME_HEK(stash)),
318 HEKfARG(GvNAME_HEK(gv)),
321 /* diag_listed_as: SKIPME */
322 Perl_croak_nocontext("Usage: %"HEKf"(%s)",
323 HEKfARG(GvNAME_HEK(gv)), params);
325 /* Pants. I don't think that it should be possible to get here. */
326 /* diag_listed_as: SKIPME */
327 Perl_croak_nocontext("Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params);
337 croak_xs_usage(cv, "reference, kind");
339 SV * const sv = ST(0);
343 if (!SvOK(sv) || !(SvROK(sv) || (SvPOK(sv) && SvCUR(sv))))
346 ST(0) = boolSV(sv_derived_from_sv(sv, ST(1), 0));
361 croak_xs_usage(cv, "object-ref, method");
367 /* Reject undef and empty string. Note that the string form takes
368 precedence here over the numeric form, as (!1)->foo treats the
369 invocant as the empty string, though it is a dualvar. */
370 if (!SvOK(sv) || (SvPOK(sv) && !SvCUR(sv)))
376 sv = MUTABLE_SV(SvRV(sv));
379 else if (isGV_with_GP(sv) && GvIO(sv))
380 pkg = SvSTASH(GvIO(sv));
382 else if (isGV_with_GP(sv) && GvIO(sv))
383 pkg = SvSTASH(GvIO(sv));
384 else if ((iogv = gv_fetchsv_nomg(sv, 0, SVt_PVIO)) && GvIO(iogv))
385 pkg = SvSTASH(GvIO(iogv));
387 pkg = gv_stashsv(sv, 0);
389 pkg = gv_stashpv("UNIVERSAL", 0);
393 GV * const gv = gv_fetchmethod_sv_flags(pkg, ST(1), 0);
395 rv = sv_2mortal(newRV(MUTABLE_SV(GvCV(gv))));
402 XS(XS_UNIVERSAL_DOES)
409 Perl_croak(aTHX_ "Usage: invocant->DOES(kind)");
411 SV * const sv = ST(0);
412 if (sv_does_sv( sv, ST(1), 0 ))
424 croak_xs_usage(cv, "sv");
426 SV * const sv = ST(0);
441 croak_xs_usage(cv, "sv");
443 SV * const sv = ST(0);
445 const char * const s = SvPV_const(sv,len);
446 if (!SvUTF8(sv) || is_utf8_string((const U8*)s,len))
459 croak_xs_usage(cv, "sv");
460 sv_utf8_encode(ST(0));
470 croak_xs_usage(cv, "sv");
472 SV * const sv = ST(0);
474 SvPV_force_nolen(sv);
475 RETVAL = sv_utf8_decode(sv);
477 ST(0) = boolSV(RETVAL);
487 croak_xs_usage(cv, "sv");
489 SV * const sv = ST(0);
493 RETVAL = sv_utf8_upgrade(sv);
494 XSprePUSH; PUSHi((IV)RETVAL);
499 XS(XS_utf8_downgrade)
503 if (items < 1 || items > 2)
504 croak_xs_usage(cv, "sv, failok=0");
506 SV * const sv = ST(0);
507 const bool failok = (items < 2) ? 0 : (int)SvIV(ST(1));
508 const bool RETVAL = sv_utf8_downgrade(sv, failok);
510 ST(0) = boolSV(RETVAL);
515 XS(XS_utf8_native_to_unicode)
519 const UV uv = SvUV(ST(0));
522 croak_xs_usage(cv, "sv");
524 ST(0) = sv_2mortal(newSViv(NATIVE_TO_UNI(uv)));
528 XS(XS_utf8_unicode_to_native)
532 const UV uv = SvUV(ST(0));
535 croak_xs_usage(cv, "sv");
537 ST(0) = sv_2mortal(newSViv(UNI_TO_NATIVE(uv)));
541 XS(XS_Internals_SvREADONLY) /* This is dangerous stuff. */
545 SV * const svz = ST(0);
549 /* [perl #77776] - called as &foo() not foo() */
551 croak_xs_usage(cv, "SCALAR[, ON]");
561 else if (items == 2) {
563 #ifdef PERL_OLD_COPY_ON_WRITE
564 if (SvIsCOW(sv)) sv_force_normal(sv);
570 /* I hope you really know what you are doing. */
575 XSRETURN_UNDEF; /* Can't happen. */
578 XS(XS_constant__make_const) /* This is dangerous stuff. */
582 SV * const svz = ST(0);
586 /* [perl #77776] - called as &foo() not foo() */
587 if (!SvROK(svz) || items != 1)
588 croak_xs_usage(cv, "SCALAR");
592 #ifdef PERL_OLD_COPY_ON_WRITE
593 if (SvIsCOW(sv)) sv_force_normal(sv);
596 if (SvTYPE(sv) == SVt_PVAV && AvFILLp(sv) != -1) {
597 /* for constant.pm; nobody else should be calling this
600 for (svp = AvARRAY(sv) + AvFILLp(sv)
603 if (*svp) SvPADTMP_on(*svp);
608 XS(XS_Internals_SvREFCNT) /* This is dangerous stuff. */
612 SV * const svz = ST(0);
617 /* [perl #77776] - called as &foo() not foo() */
618 if ((items != 1 && items != 2) || !SvROK(svz))
619 croak_xs_usage(cv, "SCALAR[, REFCOUNT]");
623 /* I hope you really know what you are doing. */
624 /* idea is for SvREFCNT(sv) to be accessed only once */
625 refcnt = items == 2 ?
626 /* we free one ref on exit */
627 (SvREFCNT(sv) = SvUV(ST(1)) + 1)
629 XSRETURN_UV(refcnt - 1); /* Minus the ref created for us. */
633 XS(XS_Internals_hv_clear_placehold)
638 if (items != 1 || !SvROK(ST(0)))
639 croak_xs_usage(cv, "hv");
641 HV * const hv = MUTABLE_HV(SvRV(ST(0)));
642 hv_clear_placeholders(hv);
647 XS(XS_PerlIO_get_layers)
651 if (items < 1 || items % 2 == 0)
652 croak_xs_usage(cv, "filehandle[,args]");
653 #if defined(USE_PERLIO)
659 bool details = FALSE;
663 for (svp = MARK + 2; svp <= SP; svp += 2) {
664 SV * const * const varp = svp;
665 SV * const * const valp = svp + 1;
667 const char * const key = SvPV_const(*varp, klen);
671 if (klen == 5 && memEQ(key, "input", 5)) {
672 input = SvTRUE(*valp);
677 if (klen == 6 && memEQ(key, "output", 6)) {
678 input = !SvTRUE(*valp);
683 if (klen == 7 && memEQ(key, "details", 7)) {
684 details = SvTRUE(*valp);
691 "get_layers: unknown argument '%s'",
700 gv = MAYBE_DEREF_GV(sv);
702 if (!gv && !SvROK(sv))
703 gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
705 if (gv && (io = GvIO(gv))) {
706 AV* const av = PerlIO_get_layers(aTHX_ input ?
707 IoIFP(io) : IoOFP(io));
709 const SSize_t last = av_len(av);
712 for (i = last; i >= 0; i -= 3) {
713 SV * const * const namsvp = av_fetch(av, i - 2, FALSE);
714 SV * const * const argsvp = av_fetch(av, i - 1, FALSE);
715 SV * const * const flgsvp = av_fetch(av, i, FALSE);
717 const bool namok = namsvp && *namsvp && SvPOK(*namsvp);
718 const bool argok = argsvp && *argsvp && SvPOK(*argsvp);
719 const bool flgok = flgsvp && *flgsvp && SvIOK(*flgsvp);
721 EXTEND(SP, 3); /* Three is the max in all branches: better check just once */
723 /* Indents of 5? Yuck. */
724 /* We know that PerlIO_get_layers creates a new SV for
725 the name and flags, so we can just take a reference
726 and "steal" it when we free the AV below. */
728 ? sv_2mortal(SvREFCNT_inc_simple_NN(*namsvp))
731 ? newSVpvn_flags(SvPVX_const(*argsvp),
733 (SvUTF8(*argsvp) ? SVf_UTF8 : 0)
737 ? sv_2mortal(SvREFCNT_inc_simple_NN(*flgsvp))
743 PUSHs(sv_2mortal(Perl_newSVpvf(aTHX_ "%"SVf"(%"SVf")",
747 PUSHs(sv_2mortal(SvREFCNT_inc_simple_NN(*namsvp)));
752 const IV flags = SvIVX(*flgsvp);
754 if (flags & PERLIO_F_UTF8) {
755 PUSHs(newSVpvs_flags("utf8", SVs_TEMP));
780 croak_xs_usage(cv, "sv");
789 XS(XS_re_regnames_count)
791 REGEXP *rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
797 croak_xs_usage(cv, "");
805 ret = CALLREG_NAMED_BUFF_COUNT(rx);
808 PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef);
820 if (items < 1 || items > 2)
821 croak_xs_usage(cv, "name[, all ]");
826 rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
831 if (items == 2 && SvTRUE(ST(1))) {
836 ret = CALLREG_NAMED_BUFF_FETCH(rx, ST(0), (flags | RXapif_REGNAME));
839 PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef);
857 croak_xs_usage(cv, "[all]");
859 rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
864 if (items == 1 && SvTRUE(ST(0))) {
873 ret = CALLREG_NAMED_BUFF_ALL(rx, (flags | RXapif_REGNAMES));
880 av = MUTABLE_AV(SvRV(ret));
883 EXTEND(SP, length+1); /* better extend stack just once */
884 for (i = 0; i <= length; i++) {
885 entry = av_fetch(av, i, FALSE);
888 Perl_croak(aTHX_ "NULL array element in re::regnames()");
890 mPUSHs(SvREFCNT_inc_simple_NN(*entry));
899 XS(XS_re_regexp_pattern)
908 croak_xs_usage(cv, "sv");
911 Checks if a reference is a regex or not. If the parameter is
912 not a ref, or is not the result of a qr// then returns false
913 in scalar context and an empty list in list context.
914 Otherwise in list context it returns the pattern and the
915 modifiers, in scalar context it returns the pattern just as it
916 would if the qr// was stringified normally, regardless as
917 to the class of the variable and any stringification overloads
921 if ((re = SvRX(ST(0)))) /* assign deliberate */
923 /* Houston, we have a regex! */
926 if ( GIMME_V == G_ARRAY ) {
928 char reflags[sizeof(INT_PAT_MODS) + MAX_CHARSET_NAME_LENGTH];
934 we are in list context so stringify
935 the modifiers that apply. We ignore "negative
936 modifiers" in this scenario, and the default character set
939 if (get_regex_charset(RX_EXTFLAGS(re)) != REGEX_DEPENDS_CHARSET) {
941 const char* const name = get_regex_charset_name(RX_EXTFLAGS(re),
943 Copy(name, reflags + left, len, char);
947 match_flags = (U16)((RX_EXTFLAGS(re) & RXf_PMf_COMPILETIME)
948 >> RXf_PMf_STD_PMMOD_SHIFT);
950 while((ch = *fptr++)) {
951 if(match_flags & 1) {
952 reflags[left++] = ch;
957 pattern = newSVpvn_flags(RX_PRECOMP(re),RX_PRELEN(re),
958 (RX_UTF8(re) ? SVf_UTF8 : 0) | SVs_TEMP);
960 /* return the pattern and the modifiers */
962 PUSHs(newSVpvn_flags(reflags, left, SVs_TEMP));
965 /* Scalar, so use the string that Perl would return */
966 /* return the pattern in (?msix:..) format */
967 #if PERL_VERSION >= 11
968 pattern = sv_2mortal(newSVsv(MUTABLE_SV(re)));
970 pattern = newSVpvn_flags(RX_WRAPPED(re), RX_WRAPLEN(re),
971 (RX_UTF8(re) ? SVf_UTF8 : 0) | SVs_TEMP);
977 /* It ain't a regexp folks */
978 if ( GIMME_V == G_ARRAY ) {
979 /* return the empty list */
982 /* Because of the (?:..) wrapping involved in a
983 stringified pattern it is impossible to get a
984 result for a real regexp that would evaluate to
985 false. Therefore we can return PL_sv_no to signify
986 that the object is not a regex, this means that one
989 if (regex($might_be_a_regex) eq '(?:foo)') { }
991 and not worry about undefined values.
1002 struct xsub_details {
1008 static const struct xsub_details details[] = {
1009 {"UNIVERSAL::isa", XS_UNIVERSAL_isa, NULL},
1010 {"UNIVERSAL::can", XS_UNIVERSAL_can, NULL},
1011 {"UNIVERSAL::DOES", XS_UNIVERSAL_DOES, NULL},
1012 #define VXS_XSUB_DETAILS
1014 #undef VXS_XSUB_DETAILS
1015 {"utf8::is_utf8", XS_utf8_is_utf8, NULL},
1016 {"utf8::valid", XS_utf8_valid, NULL},
1017 {"utf8::encode", XS_utf8_encode, NULL},
1018 {"utf8::decode", XS_utf8_decode, NULL},
1019 {"utf8::upgrade", XS_utf8_upgrade, NULL},
1020 {"utf8::downgrade", XS_utf8_downgrade, NULL},
1021 {"utf8::native_to_unicode", XS_utf8_native_to_unicode, NULL},
1022 {"utf8::unicode_to_native", XS_utf8_unicode_to_native, NULL},
1023 {"Internals::SvREADONLY", XS_Internals_SvREADONLY, "\\[$%@];$"},
1024 {"constant::_make_const", XS_constant__make_const, "\\[$@]"},
1025 {"Internals::SvREFCNT", XS_Internals_SvREFCNT, "\\[$%@];$"},
1026 {"Internals::hv_clear_placeholders", XS_Internals_hv_clear_placehold, "\\%"},
1027 {"PerlIO::get_layers", XS_PerlIO_get_layers, "*;@"},
1028 {"re::is_regexp", XS_re_is_regexp, "$"},
1029 {"re::regname", XS_re_regname, ";$$"},
1030 {"re::regnames", XS_re_regnames, ";$"},
1031 {"re::regnames_count", XS_re_regnames_count, ""},
1032 {"re::regexp_pattern", XS_re_regexp_pattern, "$"},
1036 Perl_boot_core_UNIVERSAL(pTHX)
1039 static const char file[] = __FILE__;
1040 const struct xsub_details *xsub = details;
1041 const struct xsub_details *end
1042 = details + sizeof(details) / sizeof(details[0]);
1045 newXS_flags(xsub->name, xsub->xsub, file, xsub->proto, 0);
1046 } while (++xsub < end);
1048 /* Providing a Regexp::DESTROY fixes #21347. See test in t/op/ref.t */
1051 newCONSTSUB(get_hv("Regexp::", GV_ADD), "DESTROY", NULL);
1052 Safefree(CvFILE(cv));
1053 CvFILE(cv) = (char *)file;
1060 * c-indentation-style: bsd
1062 * indent-tabs-mode: nil
1065 * ex: set ts=8 sts=4 sw=4 et: