3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 * 'Mercy!' cried Gandalf. 'If the giving of information is to be the cure
13 * of your inquisitiveness, I shall spend all the rest of my days in answering
14 * you. What more do you want to know?'
15 * 'The names of all the stars, and of all living things, and the whole
16 * history of Middle-earth and Over-heaven and of the Sundering Seas,'
19 * [p.599 of _The Lord of the Rings_, III/xi: "The PalantÃr"]
25 A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
26 It is a structure that holds a pointer to a scalar, an array, a hash etc,
27 corresponding to $foo, @foo, %foo.
29 GVs are usually found as values in stashes (symbol table hashes) where
30 Perl stores its global variables.
42 static const char S_autoload[] = "AUTOLOAD";
43 static const STRLEN S_autolen = sizeof(S_autoload)-1;
46 Perl_gv_add_by_type(pTHX_ GV *gv, svtype type)
53 SvTYPE((const SV *)gv) != SVt_PVGV
54 && SvTYPE((const SV *)gv) != SVt_PVLV
58 if (type == SVt_PVIO) {
60 * if it walks like a dirhandle, then let's assume that
61 * this is a dirhandle.
63 what = OP_IS_DIRHOP(PL_op->op_type) ?
64 "dirhandle" : "filehandle";
65 } else if (type == SVt_PVHV) {
68 what = type == SVt_PVAV ? "array" : "scalar";
70 /* diag_listed_as: Bad symbol for filehandle */
71 Perl_croak(aTHX_ "Bad symbol for %s", what);
74 if (type == SVt_PVHV) {
75 where = (SV **)&GvHV(gv);
76 } else if (type == SVt_PVAV) {
77 where = (SV **)&GvAV(gv);
78 } else if (type == SVt_PVIO) {
79 where = (SV **)&GvIOp(gv);
85 *where = newSV_type(type);
90 Perl_gv_fetchfile(pTHX_ const char *name)
92 PERL_ARGS_ASSERT_GV_FETCHFILE;
93 return gv_fetchfile_flags(name, strlen(name), 0);
97 Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
103 const STRLEN tmplen = namelen + 2;
106 PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS;
107 PERL_UNUSED_ARG(flags);
112 if (tmplen <= sizeof smallbuf)
115 Newx(tmpbuf, tmplen, char);
116 /* This is where the debugger's %{"::_<$filename"} hash is created */
119 memcpy(tmpbuf + 2, name, namelen);
120 gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
122 gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
123 #ifdef PERL_DONT_CREATE_GVSV
124 GvSV(gv) = newSVpvn(name, namelen);
126 sv_setpvn(GvSV(gv), name, namelen);
129 if ((PERLDB_LINE || PERLDB_SAVESRC) && !GvAV(gv))
130 hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
131 if (tmpbuf != smallbuf)
137 =for apidoc gv_const_sv
139 If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
140 inlining, or C<gv> is a placeholder reference that would be promoted to such
141 a typeglob, then returns the value returned by the sub. Otherwise, returns
148 Perl_gv_const_sv(pTHX_ GV *gv)
150 PERL_ARGS_ASSERT_GV_CONST_SV;
152 if (SvTYPE(gv) == SVt_PVGV)
153 return cv_const_sv(GvCVu(gv));
154 return SvROK(gv) ? SvRV(gv) : NULL;
158 Perl_newGP(pTHX_ GV *const gv)
163 const char *const file
164 = (PL_curcop && CopFILE(PL_curcop)) ? CopFILE(PL_curcop) : "";
165 const STRLEN len = strlen(file);
167 SV *const temp_sv = CopFILESV(PL_curcop);
171 PERL_ARGS_ASSERT_NEWGP;
174 file = SvPVX(temp_sv);
175 len = SvCUR(temp_sv);
182 PERL_HASH(hash, file, len);
186 #ifndef PERL_DONT_CREATE_GVSV
187 gp->gp_sv = newSV(0);
190 gp->gp_line = PL_curcop ? CopLINE(PL_curcop) : 0;
191 /* XXX Ideally this cast would be replaced with a change to const char*
193 gp->gp_file_hek = share_hek(file, len, hash);
200 /* Assign CvGV(cv) = gv, handling weak references.
201 * See also S_anonymise_cv_maybe */
204 Perl_cvgv_set(pTHX_ CV* cv, GV* gv)
206 GV * const oldgv = CvGV(cv);
207 PERL_ARGS_ASSERT_CVGV_SET;
218 sv_del_backref(MUTABLE_SV(oldgv), MUTABLE_SV(cv));
222 SvANY(cv)->xcv_gv = gv;
223 assert(!CvCVGV_RC(cv));
228 if (isGV_with_GP(gv) && GvGP(gv) && (GvCV(gv) == cv || GvFORM(gv) == cv))
229 Perl_sv_add_backref(aTHX_ MUTABLE_SV(gv), MUTABLE_SV(cv));
232 SvREFCNT_inc_simple_void_NN(gv);
236 /* Assign CvSTASH(cv) = st, handling weak references. */
239 Perl_cvstash_set(pTHX_ CV *cv, HV *st)
241 HV *oldst = CvSTASH(cv);
242 PERL_ARGS_ASSERT_CVSTASH_SET;
246 sv_del_backref(MUTABLE_SV(oldst), MUTABLE_SV(cv));
247 SvANY(cv)->xcv_stash = st;
249 Perl_sv_add_backref(aTHX_ MUTABLE_SV(st), MUTABLE_SV(cv));
253 =for apidoc gv_init_pvn
255 Converts a scalar into a typeglob. This is an incoercible typeglob;
256 assigning a reference to it will assign to one of its slots, instead of
257 overwriting it as happens with typeglobs created by SvSetSV. Converting
258 any scalar that is SvOK() may produce unpredictable results and is reserved
259 for perl's internal use.
261 C<gv> is the scalar to be converted.
263 C<stash> is the parent stash/package, if any.
265 C<name> and C<len> give the name. The name must be unqualified;
266 that is, it must not include the package name. If C<gv> is a
267 stash element, it is the caller's responsibility to ensure that the name
268 passed to this function matches the name of the element. If it does not
269 match, perl's internal bookkeeping will get out of sync.
271 C<flags> can be set to SVf_UTF8 if C<name> is a UTF8 string, or
272 the return value of SvUTF8(sv). It can also take the
273 GV_ADDMULTI flag, which means to pretend that the GV has been
274 seen before (i.e., suppress "Used once" warnings).
278 The old form of gv_init_pvn(). It does not work with UTF8 strings, as it
279 has no flags parameter. If the C<multi> parameter is set, the
280 GV_ADDMULTI flag will be passed to gv_init_pvn().
282 =for apidoc gv_init_pv
284 Same as gv_init_pvn(), but takes a nul-terminated string for the name
285 instead of separate char * and length parameters.
287 =for apidoc gv_init_sv
289 Same as gv_init_pvn(), but takes an SV * for the name instead of separate
290 char * and length parameters. C<flags> is currently unused.
296 Perl_gv_init_sv(pTHX_ GV *gv, HV *stash, SV* namesv, U32 flags)
300 PERL_ARGS_ASSERT_GV_INIT_SV;
301 namepv = SvPV(namesv, namelen);
304 gv_init_pvn(gv, stash, namepv, namelen, flags);
308 Perl_gv_init_pv(pTHX_ GV *gv, HV *stash, const char *name, U32 flags)
310 PERL_ARGS_ASSERT_GV_INIT_PV;
311 gv_init_pvn(gv, stash, name, strlen(name), flags);
315 Perl_gv_init_pvn(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, U32 flags)
318 const U32 old_type = SvTYPE(gv);
319 const bool doproto = old_type > SVt_NULL;
320 char * const proto = (doproto && SvPOK(gv))
321 ? ((void)(SvIsCOW(gv) && (sv_force_normal((SV *)gv), 0)), SvPVX(gv))
323 const STRLEN protolen = proto ? SvCUR(gv) : 0;
324 const U32 proto_utf8 = proto ? SvUTF8(gv) : 0;
325 SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
326 const U32 exported_constant = has_constant ? SvPCS_IMPORTED(gv) : 0;
328 PERL_ARGS_ASSERT_GV_INIT_PVN;
329 assert (!(proto && has_constant));
332 /* The constant has to be a simple scalar type. */
333 switch (SvTYPE(has_constant)) {
339 Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
340 sv_reftype(has_constant, 0));
348 if (old_type < SVt_PVGV) {
349 if (old_type >= SVt_PV)
351 sv_upgrade(MUTABLE_SV(gv), SVt_PVGV);
359 Safefree(SvPVX_mutable(gv));
364 GvGP_set(gv, Perl_newGP(aTHX_ gv));
367 Perl_sv_add_backref(aTHX_ MUTABLE_SV(stash), MUTABLE_SV(gv));
368 gv_name_set(gv, name, len, GV_ADD | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ));
369 if (flags & GV_ADDMULTI || doproto) /* doproto means it */
370 GvMULTI_on(gv); /* _was_ mentioned */
371 if (doproto) { /* Replicate part of newSUB here. */
375 /* newCONSTSUB takes ownership of the reference from us. */
376 cv = newCONSTSUB_flags(stash, name, len, flags, has_constant);
377 /* In case op.c:S_process_special_blocks stole it: */
379 GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv));
380 assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */
381 /* If this reference was a copy of another, then the subroutine
382 must have been "imported", by a Perl space assignment to a GV
383 from a reference to CV. */
384 if (exported_constant)
385 GvIMPORTED_CV_on(gv);
387 (void) start_subparse(0,0); /* Create empty CV in compcv. */
393 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar($) { (shift) } sub ASDF::baz($); *ASDF::baz = \&Foo::bar */
395 CvFILE_set_from_cop(cv, PL_curcop);
396 CvSTASH_set(cv, PL_curstash);
398 sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen,
399 SV_HAS_TRAILING_NUL);
400 if ( proto_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
406 S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type)
408 PERL_ARGS_ASSERT_GV_INIT_SVTYPE;
420 #ifdef PERL_DONT_CREATE_GVSV
428 /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13
429 If we just cast GvSVn(gv) to void, it ignores evaluating it for
436 static void core_xsub(pTHX_ CV* cv);
439 S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
440 const char * const name, const STRLEN len)
442 const int code = keyword(name, len, 1);
443 static const char file[] = __FILE__;
444 CV *cv, *oldcompcv = NULL;
447 bool ampable = TRUE; /* &{}-able */
448 COP *oldcurcop = NULL;
449 yy_parser *oldparser = NULL;
450 I32 oldsavestack_ix = 0;
455 if (!code) return NULL; /* Not a keyword */
456 switch (code < 0 ? -code : code) {
457 /* no support for \&CORE::infix;
458 no support for funcs that do not parse like funcs */
459 case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD:
460 case KEY_BEGIN : case KEY_CHECK : case KEY_cmp: case KEY_CORE :
461 case KEY_default : case KEY_DESTROY:
462 case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif :
463 case KEY_END : case KEY_eq : case KEY_eval :
464 case KEY_for : case KEY_foreach: case KEY_format: case KEY_ge :
465 case KEY_given : case KEY_goto : case KEY_grep :
466 case KEY_gt : case KEY_if: case KEY_INIT: case KEY_last: case KEY_le:
467 case KEY_local: case KEY_lt: case KEY_m : case KEY_map : case KEY_my:
468 case KEY_ne : case KEY_next : case KEY_no: case KEY_or: case KEY_our:
469 case KEY_package: case KEY_print: case KEY_printf:
470 case KEY_q : case KEY_qq : case KEY_qr : case KEY_qw :
471 case KEY_qx : case KEY_redo : case KEY_require: case KEY_return:
472 case KEY_s : case KEY_say : case KEY_sort :
473 case KEY_state: case KEY_sub :
474 case KEY_tr : case KEY_UNITCHECK: case KEY_unless:
475 case KEY_until: case KEY_use : case KEY_when : case KEY_while :
476 case KEY_x : case KEY_xor : case KEY_y :
479 case KEY_chomp: case KEY_chop: case KEY_defined: case KEY_delete:
480 case KEY_each : case KEY_eof : case KEY_exec : case KEY_exists:
486 case KEY_splice: case KEY_split:
489 case KEY_truncate: case KEY_unlink:
496 gv_init(gv, stash, name, len, TRUE);
501 oldcurcop = PL_curcop;
502 oldparser = PL_parser;
503 lex_start(NULL, NULL, 0);
504 oldcompcv = PL_compcv;
505 PL_compcv = NULL; /* Prevent start_subparse from setting
507 oldsavestack_ix = start_subparse(FALSE,0);
511 /* Avoid calling newXS, as it calls us, and things start to
513 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
516 mro_method_changed_in(GvSTASH(gv));
518 CvXSUB(cv) = core_xsub;
520 CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE
522 (void)gv_fetchfile(file);
523 CvFILE(cv) = (char *)file;
524 /* XXX This is inefficient, as doing things this order causes
525 a prototype check in newATTRSUB. But we have to do
526 it this order as we need an op number before calling
528 (void)core_prototype((SV *)cv, name, code, &opnum);
530 (void)hv_store(stash,name,len,(SV *)gv,0);
534 oldsavestack_ix, (OP *)gv,
539 : newSVpvn(name,len),
544 assert(GvCV(gv) == cv);
545 if (opnum != OP_VEC && opnum != OP_SUBSTR && opnum != OP_POS
546 && opnum != OP_UNDEF)
547 CvLVALUE_off(cv); /* Now *that* was a neat trick. */
549 PL_parser = oldparser;
550 PL_curcop = oldcurcop;
551 PL_compcv = oldcompcv;
553 opnumsv = opnum ? newSVuv((UV)opnum) : (SV *)NULL;
555 cv, Perl_ck_entersub_args_core, opnumsv ? opnumsv : (SV *)cv
557 SvREFCNT_dec(opnumsv);
562 =for apidoc gv_fetchmeth
564 Like L</gv_fetchmeth_pvn>, but lacks a flags parameter.
566 =for apidoc gv_fetchmeth_sv
568 Exactly like L</gv_fetchmeth_pvn>, but takes the name string in the form
569 of an SV instead of a string/length pair.
575 Perl_gv_fetchmeth_sv(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
579 PERL_ARGS_ASSERT_GV_FETCHMETH_SV;
580 namepv = SvPV(namesv, namelen);
583 return gv_fetchmeth_pvn(stash, namepv, namelen, level, flags);
587 =for apidoc gv_fetchmeth_pv
589 Exactly like L</gv_fetchmeth_pvn>, but takes a nul-terminated string
590 instead of a string/length pair.
596 Perl_gv_fetchmeth_pv(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
598 PERL_ARGS_ASSERT_GV_FETCHMETH_PV;
599 return gv_fetchmeth_pvn(stash, name, strlen(name), level, flags);
603 =for apidoc gv_fetchmeth_pvn
605 Returns the glob with the given C<name> and a defined subroutine or
606 C<NULL>. The glob lives in the given C<stash>, or in the stashes
607 accessible via @ISA and UNIVERSAL::.
609 The argument C<level> should be either 0 or -1. If C<level==0>, as a
610 side-effect creates a glob with the given C<name> in the given C<stash>
611 which in the case of success contains an alias for the subroutine, and sets
612 up caching info for this glob.
614 Currently, the only significant value for C<flags> is SVf_UTF8.
616 This function grants C<"SUPER"> token as a postfix of the stash name. The
617 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
618 visible to Perl code. So when calling C<call_sv>, you should not use
619 the GV directly; instead, you should use the method's CV, which can be
620 obtained from the GV with the C<GvCV> macro.
625 /* NOTE: No support for tied ISA */
628 Perl_gv_fetchmeth_pvn(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
636 GV* candidate = NULL;
640 I32 create = (level >= 0) ? 1 : 0;
644 U32 is_utf8 = flags & SVf_UTF8;
646 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN;
648 /* UNIVERSAL methods should be callable without a stash */
650 create = 0; /* probably appropriate */
651 if(!(stash = gv_stashpvs("UNIVERSAL", 0)))
657 hvname = HvNAME_get(stash);
659 Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
664 DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,hvname) );
666 topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation;
668 /* check locally for a real method or a cache entry */
669 gvp = (GV**)hv_fetch(stash, name, is_utf8 ? -(I32)len : (I32)len, create);
674 if (SvTYPE(topgv) != SVt_PVGV)
675 gv_init_pvn(topgv, stash, name, len, GV_ADDMULTI|is_utf8);
676 if ((cand_cv = GvCV(topgv))) {
677 /* If genuine method or valid cache entry, use it */
678 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
682 /* stale cache entry, junk it and move on */
683 SvREFCNT_dec(cand_cv);
684 GvCV_set(topgv, NULL);
689 else if (GvCVGEN(topgv) == topgen_cmp) {
690 /* cache indicates no such method definitively */
693 else if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4
694 && strnEQ(hvname, "CORE", 4)
695 && S_maybe_add_coresub(aTHX_ NULL,topgv,name,len))
699 packlen = HvNAMELEN_get(stash);
700 if (packlen >= 7 && strEQ(hvname + packlen - 7, "::SUPER")) {
703 basestash = gv_stashpvn(hvname, packlen,
704 GV_ADD | (HvNAMEUTF8(stash) ? SVf_UTF8 : 0));
705 linear_av = mro_get_linear_isa(basestash);
708 linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
711 linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
712 items = AvFILLp(linear_av); /* no +1, to skip over self */
714 linear_sv = *linear_svp++;
716 cstash = gv_stashsv(linear_sv, 0);
719 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
720 "Can't locate package %"SVf" for @%"HEKf"::ISA",
722 HEKfARG(HvNAME_HEK(stash)));
728 gvp = (GV**)hv_fetch(cstash, name, is_utf8 ? -(I32)len : (I32)len, 0);
730 if (len > 1 && HvNAMELEN_get(cstash) == 4) {
731 const char *hvname = HvNAME(cstash); assert(hvname);
732 if (strnEQ(hvname, "CORE", 4)
734 S_maybe_add_coresub(aTHX_ cstash,NULL,name,len)
740 else candidate = *gvp;
743 if (SvTYPE(candidate) != SVt_PVGV)
744 gv_init_pvn(candidate, cstash, name, len, GV_ADDMULTI|is_utf8);
745 if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
747 * Found real method, cache method in topgv if:
748 * 1. topgv has no synonyms (else inheritance crosses wires)
749 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
751 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
752 CV *old_cv = GvCV(topgv);
753 SvREFCNT_dec(old_cv);
754 SvREFCNT_inc_simple_void_NN(cand_cv);
755 GvCV_set(topgv, cand_cv);
756 GvCVGEN(topgv) = topgen_cmp;
762 /* Check UNIVERSAL without caching */
763 if(level == 0 || level == -1) {
764 candidate = gv_fetchmeth_pvn(NULL, name, len, 1, flags);
766 cand_cv = GvCV(candidate);
767 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
768 CV *old_cv = GvCV(topgv);
769 SvREFCNT_dec(old_cv);
770 SvREFCNT_inc_simple_void_NN(cand_cv);
771 GvCV_set(topgv, cand_cv);
772 GvCVGEN(topgv) = topgen_cmp;
778 if (topgv && GvREFCNT(topgv) == 1) {
779 /* cache the fact that the method is not defined */
780 GvCVGEN(topgv) = topgen_cmp;
787 =for apidoc gv_fetchmeth_autoload
789 This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
792 =for apidoc gv_fetchmeth_sv_autoload
794 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
795 of an SV instead of a string/length pair.
801 Perl_gv_fetchmeth_sv_autoload(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
805 PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD;
806 namepv = SvPV(namesv, namelen);
809 return gv_fetchmeth_pvn_autoload(stash, namepv, namelen, level, flags);
813 =for apidoc gv_fetchmeth_pv_autoload
815 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
816 instead of a string/length pair.
822 Perl_gv_fetchmeth_pv_autoload(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
824 PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD;
825 return gv_fetchmeth_pvn_autoload(stash, name, strlen(name), level, flags);
829 =for apidoc gv_fetchmeth_pvn_autoload
831 Same as gv_fetchmeth_pvn(), but looks for autoloaded subroutines too.
832 Returns a glob for the subroutine.
834 For an autoloaded subroutine without a GV, will create a GV even
835 if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
836 of the result may be zero.
838 Currently, the only significant value for C<flags> is SVf_UTF8.
844 Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
846 GV *gv = gv_fetchmeth_pvn(stash, name, len, level, flags);
848 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD;
855 return NULL; /* UNIVERSAL::AUTOLOAD could cause trouble */
856 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
858 if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags)))
861 if (!(CvROOT(cv) || CvXSUB(cv)))
863 /* Have an autoload */
864 if (level < 0) /* Cannot do without a stub */
865 gv_fetchmeth_pvn(stash, name, len, 0, flags);
866 gvp = (GV**)hv_fetch(stash, name,
867 (flags & SVf_UTF8) ? -(I32)len : (I32)len, (level >= 0));
876 =for apidoc gv_fetchmethod_autoload
878 Returns the glob which contains the subroutine to call to invoke the method
879 on the C<stash>. In fact in the presence of autoloading this may be the
880 glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
883 The third parameter of C<gv_fetchmethod_autoload> determines whether
884 AUTOLOAD lookup is performed if the given method is not present: non-zero
885 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
886 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
887 with a non-zero C<autoload> parameter.
889 These functions grant C<"SUPER"> token as a prefix of the method name. Note
890 that if you want to keep the returned glob for a long time, you need to
891 check for it being "AUTOLOAD", since at the later time the call may load a
892 different subroutine due to $AUTOLOAD changing its value. Use the glob
893 created via a side effect to do this.
895 These functions have the same side-effects and as C<gv_fetchmeth> with
896 C<level==0>. C<name> should be writable if contains C<':'> or C<'
897 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
898 C<call_sv> apply equally to these functions.
904 S_gv_get_super_pkg(pTHX_ const char* name, I32 namelen, U32 flags)
911 PERL_ARGS_ASSERT_GV_GET_SUPER_PKG;
913 stash = gv_stashpvn(name, namelen, flags);
914 if(stash) return stash;
916 /* If we must create it, give it an @ISA array containing
917 the real package this SUPER is for, so that it's tied
918 into the cache invalidation code correctly */
919 stash = gv_stashpvn(name, namelen, GV_ADD | flags);
920 gvp = (GV**)hv_fetchs(stash, "ISA", TRUE);
922 gv_init(gv, stash, "ISA", 3, TRUE);
923 superisa = GvAVn(gv);
925 sv_magic(MUTABLE_SV(superisa), MUTABLE_SV(gv), PERL_MAGIC_isa, NULL, 0);
927 av_push(superisa, newSVpvn_flags(CopSTASHPV(PL_curcop),
928 CopSTASH_len(PL_curcop) < 0
929 ? -CopSTASH_len(PL_curcop)
930 : CopSTASH_len(PL_curcop),
931 SVf_UTF8*(CopSTASH_len(PL_curcop) < 0)
934 av_push(superisa, newSVhek(CopSTASH(PL_curcop)
935 ? HvNAME_HEK(CopSTASH(PL_curcop)) : NULL));
942 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
944 PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
946 return gv_fetchmethod_flags(stash, name, autoload ? GV_AUTOLOAD : 0);
950 Perl_gv_fetchmethod_sv_flags(pTHX_ HV *stash, SV *namesv, U32 flags)
954 PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS;
955 namepv = SvPV(namesv, namelen);
958 return gv_fetchmethod_pvn_flags(stash, namepv, namelen, flags);
962 Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
964 PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS;
965 return gv_fetchmethod_pvn_flags(stash, name, strlen(name), flags);
968 /* Don't merge this yet, as it's likely to get a len parameter, and possibly
971 Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
974 register const char *nend;
975 const char *nsplit = NULL;
978 const char * const origname = name;
979 SV *const error_report = MUTABLE_SV(stash);
980 const U32 autoload = flags & GV_AUTOLOAD;
981 const U32 do_croak = flags & GV_CROAK;
982 const U32 is_utf8 = flags & SVf_UTF8;
984 PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS;
986 if (SvTYPE(stash) < SVt_PVHV)
989 /* The only way stash can become NULL later on is if nsplit is set,
990 which in turn means that there is no need for a SVt_PVHV case
991 the error reporting code. */
994 for (nend = name; *nend || nend != (origname + len); nend++) {
999 else if (*nend == ':' && *(nend + 1) == ':') {
1005 if ((nsplit - origname) == 5 && memEQ(origname, "SUPER", 5)) {
1006 /* ->SUPER::method should really be looked up in original stash */
1007 SV * const tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_
1009 HEKfARG(HvNAME_HEK((HV*)CopSTASH(PL_curcop)))
1011 /* __PACKAGE__::SUPER stash should be autovivified */
1012 stash = gv_get_super_pkg(SvPVX_const(tmpstr), SvCUR(tmpstr), SvUTF8(tmpstr));
1013 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
1014 origname, HvNAME_get(stash), name) );
1017 /* don't autovifify if ->NoSuchStash::method */
1018 stash = gv_stashpvn(origname, nsplit - origname, is_utf8);
1020 /* however, explicit calls to Pkg::SUPER::method may
1021 happen, and may require autovivification to work */
1022 if (!stash && (nsplit - origname) >= 7 &&
1023 strnEQ(nsplit - 7, "::SUPER", 7) &&
1024 gv_stashpvn(origname, nsplit - origname - 7, is_utf8))
1025 stash = gv_get_super_pkg(origname, nsplit - origname, flags);
1030 gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
1032 if (strEQ(name,"import") || strEQ(name,"unimport"))
1033 gv = MUTABLE_GV(&PL_sv_yes);
1035 gv = gv_autoload_pvn(
1036 ostash, name, nend - name, GV_AUTOLOAD_ISMETHOD|flags
1038 if (!gv && do_croak) {
1039 /* Right now this is exclusively for the benefit of S_method_common
1042 /* If we can't find an IO::File method, it might be a call on
1043 * a filehandle. If IO:File has not been loaded, try to
1044 * require it first instead of croaking */
1045 const char *stash_name = HvNAME_get(stash);
1046 if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File")
1047 && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL,
1048 STR_WITH_LEN("IO/File.pm"), 0,
1049 HV_FETCH_ISEXISTS, NULL, 0)
1051 require_pv("IO/File.pm");
1052 gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
1057 "Can't locate object method \"%"SVf
1058 "\" via package \"%"HEKf"\"",
1059 SVfARG(newSVpvn_flags(name, nend - name,
1060 SVs_TEMP | is_utf8)),
1061 HEKfARG(HvNAME_HEK(stash)));
1067 packnamesv = newSVpvn_flags(origname, nsplit - origname,
1068 SVs_TEMP | is_utf8);
1070 packnamesv = sv_2mortal(newSVsv(error_report));
1074 "Can't locate object method \"%"SVf"\" via package \"%"SVf"\""
1075 " (perhaps you forgot to load \"%"SVf"\"?)",
1076 SVfARG(newSVpvn_flags(name, nend - name,
1077 SVs_TEMP | is_utf8)),
1078 SVfARG(packnamesv), SVfARG(packnamesv));
1082 else if (autoload) {
1083 CV* const cv = GvCV(gv);
1084 if (!CvROOT(cv) && !CvXSUB(cv)) {
1092 if (GvCV(stubgv) != cv) /* orphaned import */
1095 autogv = gv_autoload_pvn(GvSTASH(stubgv),
1096 GvNAME(stubgv), GvNAMELEN(stubgv),
1097 GV_AUTOLOAD_ISMETHOD
1098 | (GvNAMEUTF8(stubgv) ? SVf_UTF8 : 0));
1108 Perl_gv_autoload_sv(pTHX_ HV *stash, SV* namesv, U32 flags)
1112 PERL_ARGS_ASSERT_GV_AUTOLOAD_SV;
1113 namepv = SvPV(namesv, namelen);
1116 return gv_autoload_pvn(stash, namepv, namelen, flags);
1120 Perl_gv_autoload_pv(pTHX_ HV *stash, const char *namepv, U32 flags)
1122 PERL_ARGS_ASSERT_GV_AUTOLOAD_PV;
1123 return gv_autoload_pvn(stash, namepv, strlen(namepv), flags);
1127 Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
1135 SV *packname = NULL;
1136 U32 is_utf8 = flags & SVf_UTF8 ? SVf_UTF8 : 0;
1138 PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN;
1140 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
1143 if (SvTYPE(stash) < SVt_PVHV) {
1144 STRLEN packname_len = 0;
1145 const char * const packname_ptr = SvPV_const(MUTABLE_SV(stash), packname_len);
1146 packname = newSVpvn_flags(packname_ptr, packname_len,
1147 SVs_TEMP | SvUTF8(stash));
1151 packname = sv_2mortal(newSVhek(HvNAME_HEK(stash)));
1153 if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, is_utf8)))
1157 if (!(CvROOT(cv) || CvXSUB(cv)))
1161 * Inheriting AUTOLOAD for non-methods works ... for now.
1164 !(flags & GV_AUTOLOAD_ISMETHOD)
1165 && (GvCVGEN(gv) || GvSTASH(gv) != stash)
1167 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
1168 "Use of inherited AUTOLOAD for non-method %"SVf"::%"SVf"() is deprecated",
1170 SVfARG(newSVpvn_flags(name, len, SVs_TEMP | is_utf8)));
1173 /* Instead of forcing the XSUB do another lookup for $AUTOLOAD
1174 * and split that value on the last '::', pass along the same data
1175 * via the SvPVX field in the CV, and the stash in CvSTASH.
1177 * Due to an unfortunate accident of history, the SvPVX field
1178 * serves two purposes. It is also used for the subroutine's pro-
1179 * type. Since SvPVX has been documented as returning the sub name
1180 * for a long time, but not as returning the prototype, we have
1181 * to preserve the SvPVX AUTOLOAD behaviour and put the prototype
1184 * We put the prototype in the same allocated buffer, but after
1185 * the sub name. The SvPOK flag indicates the presence of a proto-
1186 * type. The CvAUTOLOAD flag indicates the presence of a sub name.
1187 * If both flags are on, then SvLEN is used to indicate the end of
1188 * the prototype (artificially lower than what is actually allo-
1189 * cated), at the risk of having to reallocate a few bytes unneces-
1190 * sarily--but that should happen very rarely, if ever.
1192 * We use SvUTF8 for both prototypes and sub names, so if one is
1193 * UTF8, the other must be upgraded.
1195 CvSTASH_set(cv, stash);
1196 if (SvPOK(cv)) { /* Ouch! */
1197 SV *tmpsv = newSVpvn_flags(name, len, is_utf8);
1199 const char *proto = CvPROTO(cv);
1202 sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2);
1203 ulen = SvCUR(tmpsv);
1204 SvCUR(tmpsv)++; /* include null in string */
1206 tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv)
1208 SvTEMP_on(tmpsv); /* Allow theft */
1209 sv_setsv_nomg((SV *)cv, tmpsv);
1211 SvREFCNT_dec(tmpsv);
1212 SvLEN(cv) = SvCUR(cv) + 1;
1216 sv_setpvn((SV *)cv, name, len);
1220 else SvUTF8_off(cv);
1226 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
1227 * The subroutine's original name may not be "AUTOLOAD", so we don't
1228 * use that, but for lack of anything better we will use the sub's
1229 * original package to look up $AUTOLOAD.
1231 varstash = GvSTASH(CvGV(cv));
1232 vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
1236 gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0);
1237 #ifdef PERL_DONT_CREATE_GVSV
1238 GvSV(vargv) = newSV(0);
1242 varsv = GvSVn(vargv);
1243 sv_setsv(varsv, packname);
1244 sv_catpvs(varsv, "::");
1245 /* Ensure SvSETMAGIC() is called if necessary. In particular, to clear
1246 tainting if $FOO::AUTOLOAD was previously tainted, but is not now. */
1249 SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES)
1257 /* require_tie_mod() internal routine for requiring a module
1258 * that implements the logic of automatic ties like %! and %-
1260 * The "gv" parameter should be the glob.
1261 * "varpv" holds the name of the var, used for error messages.
1262 * "namesv" holds the module name. Its refcount will be decremented.
1263 * "methpv" holds the method name to test for to check that things
1264 * are working reasonably close to as expected.
1265 * "flags": if flag & 1 then save the scalar before loading.
1266 * For the protection of $! to work (it is set by this routine)
1267 * the sv slot must already be magicalized.
1270 S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv,const U32 flags)
1273 HV* stash = gv_stashsv(namesv, 0);
1275 PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
1277 if (!stash || !(gv_fetchmethod_autoload(stash, methpv, FALSE))) {
1278 SV *module = newSVsv(namesv);
1279 char varname = *varpv; /* varpv might be clobbered by load_module,
1280 so save it. For the moment it's always
1282 const char type = varname == '[' ? '$' : '%';
1287 PUSHSTACKi(PERLSI_MAGIC);
1288 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
1292 stash = gv_stashsv(namesv, 0);
1294 Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" is not available",
1295 type, varname, SVfARG(namesv));
1296 else if (!gv_fetchmethod(stash, methpv))
1297 Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" does not support method %s",
1298 type, varname, SVfARG(namesv), methpv);
1300 SvREFCNT_dec(namesv);
1305 =for apidoc gv_stashpv
1307 Returns a pointer to the stash for a specified package. Uses C<strlen> to
1308 determine the length of C<name>, then calls C<gv_stashpvn()>.
1314 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
1316 PERL_ARGS_ASSERT_GV_STASHPV;
1317 return gv_stashpvn(name, strlen(name), create);
1321 =for apidoc gv_stashpvn
1323 Returns a pointer to the stash for a specified package. The C<namelen>
1324 parameter indicates the length of the C<name>, in bytes. C<flags> is passed
1325 to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
1326 created if it does not already exist. If the package does not exist and
1327 C<flags> is 0 (or any other setting that does not create packages) then NULL
1335 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
1341 U32 tmplen = namelen + 2;
1343 PERL_ARGS_ASSERT_GV_STASHPVN;
1345 if (tmplen <= sizeof smallbuf)
1348 Newx(tmpbuf, tmplen, char);
1349 Copy(name, tmpbuf, namelen, char);
1350 tmpbuf[namelen] = ':';
1351 tmpbuf[namelen+1] = ':';
1352 tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
1353 if (tmpbuf != smallbuf)
1357 stash = GvHV(tmpgv);
1358 if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL;
1360 if (!HvNAME_get(stash)) {
1361 hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 );
1363 /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */
1364 /* If the containing stash has multiple effective
1365 names, see that this one gets them, too. */
1366 if (HvAUX(GvSTASH(tmpgv))->xhv_name_count)
1367 mro_package_moved(stash, NULL, tmpgv, 1);
1373 =for apidoc gv_stashsv
1375 Returns a pointer to the stash for a specified package. See C<gv_stashpvn>.
1381 Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
1384 const char * const ptr = SvPV_const(sv,len);
1386 PERL_ARGS_ASSERT_GV_STASHSV;
1388 return gv_stashpvn(ptr, len, flags | SvUTF8(sv));
1393 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
1394 PERL_ARGS_ASSERT_GV_FETCHPV;
1395 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
1399 Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
1401 const char * const nambeg =
1402 SvPV_flags_const(name, len, flags & GV_NO_SVGMAGIC ? 0 : SV_GMAGIC);
1403 PERL_ARGS_ASSERT_GV_FETCHSV;
1404 return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
1408 S_gv_magicalize_isa(pTHX_ GV *gv)
1412 PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
1416 sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1421 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
1422 const svtype sv_type)
1425 register const char *name = nambeg;
1426 register GV *gv = NULL;
1429 register const char *name_cursor;
1431 const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
1432 const I32 no_expand = flags & GV_NOEXPAND;
1433 const I32 add = flags & ~GV_NOADD_MASK;
1434 const U32 is_utf8 = flags & SVf_UTF8;
1435 bool addmg = !!(flags & GV_ADDMG);
1436 const char *const name_end = nambeg + full_len;
1437 const char *const name_em1 = name_end - 1;
1440 PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
1442 if (flags & GV_NOTQUAL) {
1443 /* Caller promised that there is no stash, so we can skip the check. */
1448 if (full_len > 2 && *name == '*' && isIDFIRST_lazy_if(name + 1, is_utf8)) {
1449 /* accidental stringify on a GV? */
1453 for (name_cursor = name; name_cursor < name_end; name_cursor++) {
1454 if (name_cursor < name_em1 &&
1455 ((*name_cursor == ':'
1456 && name_cursor[1] == ':')
1457 || *name_cursor == '\''))
1460 stash = PL_defstash;
1461 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
1464 len = name_cursor - name;
1465 if (name_cursor > nambeg) { /* Skip for initial :: or ' */
1467 if (*name_cursor == ':') {
1472 Newx(tmpbuf, len+2, char);
1473 Copy(name, tmpbuf, len, char);
1474 tmpbuf[len++] = ':';
1475 tmpbuf[len++] = ':';
1478 gvp = (GV**)hv_fetch(stash, key, is_utf8 ? -len : len, add);
1479 gv = gvp ? *gvp : NULL;
1480 if (gv && gv != (const GV *)&PL_sv_undef) {
1481 if (SvTYPE(gv) != SVt_PVGV)
1482 gv_init_pvn(gv, stash, key, len, (add & GV_ADDMULTI)|is_utf8);
1488 if (!gv || gv == (const GV *)&PL_sv_undef)
1491 if (!(stash = GvHV(gv)))
1493 stash = GvHV(gv) = newHV();
1494 if (!HvNAME_get(stash)) {
1495 if (GvSTASH(gv) == PL_defstash && len == 6
1496 && strnEQ(name, "CORE", 4))
1497 hv_name_set(stash, "CORE", 4, 0);
1500 stash, nambeg, name_cursor-nambeg, is_utf8
1502 /* If the containing stash has multiple effective
1503 names, see that this one gets them, too. */
1504 if (HvAUX(GvSTASH(gv))->xhv_name_count)
1505 mro_package_moved(stash, NULL, gv, 1);
1508 else if (!HvNAME_get(stash))
1509 hv_name_set(stash, nambeg, name_cursor - nambeg, is_utf8);
1512 if (*name_cursor == ':')
1514 name = name_cursor+1;
1515 if (name == name_end)
1517 ? gv : MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
1520 len = name_cursor - name;
1522 /* No stash in name, so see how we can default */
1526 if (len && isIDFIRST_lazy(name)) {
1527 bool global = FALSE;
1535 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1536 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1537 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
1541 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1546 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1547 && name[3] == 'I' && name[4] == 'N')
1551 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1552 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1553 ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
1557 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1558 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1565 stash = PL_defstash;
1566 else if (IN_PERL_COMPILETIME) {
1567 stash = PL_curstash;
1568 if (add && (PL_hints & HINT_STRICT_VARS) &&
1569 sv_type != SVt_PVCV &&
1570 sv_type != SVt_PVGV &&
1571 sv_type != SVt_PVFM &&
1572 sv_type != SVt_PVIO &&
1573 !(len == 1 && sv_type == SVt_PV &&
1574 (*name == 'a' || *name == 'b')) )
1576 gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -len : len,0);
1578 *gvp == (const GV *)&PL_sv_undef ||
1579 SvTYPE(*gvp) != SVt_PVGV)
1583 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
1584 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1585 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
1587 SV* namesv = newSVpvn_flags(name, len, SVs_TEMP | is_utf8);
1588 /* diag_listed_as: Variable "%s" is not imported%s */
1590 aTHX_ packWARN(WARN_MISC),
1591 "Variable \"%c%"SVf"\" is not imported",
1592 sv_type == SVt_PVAV ? '@' :
1593 sv_type == SVt_PVHV ? '%' : '$',
1597 aTHX_ packWARN(WARN_MISC),
1598 "\t(Did you mean &%"SVf" instead?)\n", SVfARG(namesv)
1605 stash = CopSTASH(PL_curcop);
1608 stash = PL_defstash;
1611 /* By this point we should have a stash and a name */
1615 SV * const err = Perl_mess(aTHX_
1616 "Global symbol \"%s%"SVf"\" requires explicit package name",
1617 (sv_type == SVt_PV ? "$"
1618 : sv_type == SVt_PVAV ? "@"
1619 : sv_type == SVt_PVHV ? "%"
1620 : ""), SVfARG(newSVpvn_flags(name, len, SVs_TEMP | is_utf8)));
1622 if (USE_UTF8_IN_NAMES)
1625 gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
1627 /* symbol table under destruction */
1636 if (!SvREFCNT(stash)) /* symbol table under destruction */
1639 gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -len : len,add);
1640 if (!gvp || *gvp == (const GV *)&PL_sv_undef) {
1641 if (addmg) gv = (GV *)newSV(0);
1644 else gv = *gvp, addmg = 0;
1645 /* From this point on, addmg means gv has not been inserted in the
1648 if (SvTYPE(gv) == SVt_PVGV) {
1651 gv_init_svtype(gv, sv_type);
1652 if (len == 1 && stash == PL_defstash) {
1653 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
1655 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1656 else if (*name == '-' || *name == '+')
1657 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1659 if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
1661 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1662 else if (*name == '&' || *name == '`' || *name == '\'') {
1663 PL_sawampersand = TRUE;
1668 else if (len == 3 && sv_type == SVt_PVAV
1669 && strnEQ(name, "ISA", 3)
1670 && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
1671 gv_magicalize_isa(gv);
1674 } else if (no_init) {
1677 } else if (no_expand && SvROK(gv)) {
1682 /* Adding a new symbol.
1683 Unless of course there was already something non-GV here, in which case
1684 we want to behave as if there was always a GV here, containing some sort
1686 Otherwise we run the risk of creating things like GvIO, which can cause
1687 subtle bugs. eg the one that tripped up SQL::Translator */
1689 faking_it = SvOK(gv);
1691 if (add & GV_ADDWARN)
1692 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "Had to create %"SVf" unexpectedly",
1693 SVfARG(newSVpvn_flags(nambeg, name_end-nambeg, SVs_TEMP | is_utf8 )));
1694 gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8);
1696 if ( isIDFIRST_lazy_if(name, is_utf8)
1697 && ! (isLEXWARN_on ? ckWARN(WARN_ONCE) : (PL_dowarn & G_WARN_ON ) ) )
1700 /* set up magic where warranted */
1701 if (stash != PL_defstash) { /* not the main stash */
1702 /* We only have to check for three names here: EXPORT, ISA
1703 and VERSION. All the others apply only to the main stash or to
1704 CORE (which is checked right after this). */
1706 const char * const name2 = name + 1;
1709 if (strnEQ(name2, "XPORT", 5))
1713 if (strEQ(name2, "SA"))
1714 gv_magicalize_isa(gv);
1717 if (strEQ(name2, "ERSION"))
1723 goto add_magical_gv;
1726 if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
1727 /* Avoid null warning: */
1728 const char * const stashname = HvNAME(stash); assert(stashname);
1729 if (strnEQ(stashname, "CORE", 4))
1730 S_maybe_add_coresub(aTHX_ 0, gv, name, len);
1737 /* Nothing else to do.
1738 The compiler will probably turn the switch statement into a
1739 branch table. Make sure we avoid even that small overhead for
1740 the common case of lower case variable names. */
1744 const char * const name2 = name + 1;
1747 if (strEQ(name2, "RGV")) {
1748 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1750 else if (strEQ(name2, "RGVOUT")) {
1755 if (strnEQ(name2, "XPORT", 5))
1759 if (strEQ(name2, "SA")) {
1760 gv_magicalize_isa(gv);
1764 if (strEQ(name2, "IG")) {
1767 if (!PL_psig_name) {
1768 Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
1769 Newxz(PL_psig_pend, SIG_SIZE, int);
1770 PL_psig_ptr = PL_psig_name + SIG_SIZE;
1772 /* I think that the only way to get here is to re-use an
1773 embedded perl interpreter, where the previous
1774 use didn't clean up fully because
1775 PL_perl_destruct_level was 0. I'm not sure that we
1776 "support" that, in that I suspect in that scenario
1777 there are sufficient other garbage values left in the
1778 interpreter structure that something else will crash
1779 before we get here. I suspect that this is one of
1780 those "doctor, it hurts when I do this" bugs. */
1781 Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
1782 Zero(PL_psig_pend, SIG_SIZE, int);
1786 hv_magic(hv, NULL, PERL_MAGIC_sig);
1787 for (i = 1; i < SIG_SIZE; i++) {
1788 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1790 sv_setsv(*init, &PL_sv_undef);
1795 if (strEQ(name2, "ERSION"))
1798 case '\003': /* $^CHILD_ERROR_NATIVE */
1799 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1802 case '\005': /* $^ENCODING */
1803 if (strEQ(name2, "NCODING"))
1806 case '\007': /* $^GLOBAL_PHASE */
1807 if (strEQ(name2, "LOBAL_PHASE"))
1810 case '\015': /* $^MATCH */
1811 if (strEQ(name2, "ATCH"))
1813 case '\017': /* $^OPEN */
1814 if (strEQ(name2, "PEN"))
1817 case '\020': /* $^PREMATCH $^POSTMATCH */
1818 if (strEQ(name2, "REMATCH") || strEQ(name2, "OSTMATCH"))
1821 case '\024': /* ${^TAINT} */
1822 if (strEQ(name2, "AINT"))
1825 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
1826 if (strEQ(name2, "NICODE"))
1828 if (strEQ(name2, "TF8LOCALE"))
1830 if (strEQ(name2, "TF8CACHE"))
1833 case '\027': /* $^WARNING_BITS */
1834 if (strEQ(name2, "ARNING_BITS"))
1847 /* Ensures that we have an all-digit variable, ${"1foo"} fails
1849 /* This snippet is taken from is_gv_magical */
1850 const char *end = name + len;
1851 while (--end > name) {
1852 if (!isDIGIT(*end)) goto add_magical_gv;
1859 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1860 be case '\0' in this switch statement (ie a default case) */
1866 sv_type == SVt_PVAV ||
1867 sv_type == SVt_PVHV ||
1868 sv_type == SVt_PVCV ||
1869 sv_type == SVt_PVFM ||
1871 )) { PL_sawampersand = TRUE; }
1875 sv_setpv(GvSVn(gv),PL_chopset);
1879 #ifdef COMPLEX_STATUS
1880 SvUPGRADE(GvSVn(gv), SVt_PVLV);
1886 /* If %! has been used, automatically load Errno.pm. */
1888 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1890 /* magicalization must be done before require_tie_mod is called */
1891 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1893 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1895 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1901 GvMULTI_on(gv); /* no used once warnings here */
1903 AV* const av = GvAVn(gv);
1904 SV* const avc = (*name == '+') ? MUTABLE_SV(av) : NULL;
1906 sv_magic(MUTABLE_SV(av), avc, PERL_MAGIC_regdata, NULL, 0);
1907 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1909 SvREADONLY_on(GvSVn(gv));
1912 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1914 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1916 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1923 if (sv_type == SVt_PV)
1924 /* diag_listed_as: $* is no longer supported */
1925 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1926 "$%c is no longer supported", *name);
1929 sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
1932 case '\010': /* $^H */
1934 HV *const hv = GvHVn(gv);
1935 hv_magic(hv, NULL, PERL_MAGIC_hints);
1939 if ((sv_type == SVt_PV || sv_type == SVt_PVGV)
1940 && FEATURE_ARYBASE_IS_ENABLED) {
1941 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1942 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1945 else goto magicalize;
1947 case '\023': /* $^S */
1949 SvREADONLY_on(GvSVn(gv));
1973 case '\001': /* $^A */
1974 case '\003': /* $^C */
1975 case '\004': /* $^D */
1976 case '\005': /* $^E */
1977 case '\006': /* $^F */
1978 case '\011': /* $^I, NOT \t in EBCDIC */
1979 case '\016': /* $^N */
1980 case '\017': /* $^O */
1981 case '\020': /* $^P */
1982 case '\024': /* $^T */
1983 case '\027': /* $^W */
1985 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1988 case '\014': /* $^L */
1989 sv_setpvs(GvSVn(gv),"\f");
1990 PL_formfeed = GvSVn(gv);
1993 sv_setpvs(GvSVn(gv),"\034");
1997 SV * const sv = GvSV(gv);
1998 if (!sv_derived_from(PL_patchlevel, "version"))
1999 upg_version(PL_patchlevel, TRUE);
2000 GvSV(gv) = vnumify(PL_patchlevel);
2001 SvREADONLY_on(GvSV(gv));
2005 case '\026': /* $^V */
2007 SV * const sv = GvSV(gv);
2008 GvSV(gv) = new_version(PL_patchlevel);
2009 SvREADONLY_on(GvSV(gv));
2017 if (GvAV(gv) || GvHV(gv) || GvIO(gv) || GvCV(gv) || (
2018 GvSV(gv) && (SvOK(GvSV(gv)) || SvMAGICAL(GvSV(gv)))
2020 (void)hv_store(stash,name,len,(SV *)gv,0);
2021 else SvREFCNT_dec(gv), gv = NULL;
2023 if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type);
2028 Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2031 const HV * const hv = GvSTASH(gv);
2033 PERL_ARGS_ASSERT_GV_FULLNAME4;
2035 sv_setpv(sv, prefix ? prefix : "");
2037 if (hv && (name = HvNAME(hv))) {
2038 const STRLEN len = HvNAMELEN(hv);
2039 if (keepmain || strnNE(name, "main", len)) {
2040 sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES);
2044 else sv_catpvs(sv,"__ANON__::");
2045 sv_catsv(sv,sv_2mortal(newSVhek(GvNAME_HEK(gv))));
2049 Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2051 const GV * const egv = GvEGVx(gv);
2053 PERL_ARGS_ASSERT_GV_EFULLNAME4;
2055 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
2059 Perl_gv_check(pTHX_ const HV *stash)
2064 PERL_ARGS_ASSERT_GV_CHECK;
2066 if (!HvARRAY(stash))
2068 for (i = 0; i <= (I32) HvMAX(stash); i++) {
2070 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
2073 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
2074 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
2076 if (hv != PL_defstash && hv != stash)
2077 gv_check(hv); /* nested package */
2079 else if ( *HeKEY(entry) != '_'
2080 && isIDFIRST_lazy_if(HeKEY(entry), HeUTF8(entry)) ) {
2082 gv = MUTABLE_GV(HeVAL(entry));
2083 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
2086 CopLINE_set(PL_curcop, GvLINE(gv));
2088 CopFILE(PL_curcop) = (char *)file; /* set for warning */
2090 CopFILEGV(PL_curcop)
2091 = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
2093 Perl_warner(aTHX_ packWARN(WARN_ONCE),
2094 "Name \"%"HEKf"::%"HEKf
2095 "\" used only once: possible typo",
2096 HEKfARG(HvNAME_HEK(stash)),
2097 HEKfARG(GvNAME_HEK(gv)));
2104 Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags)
2107 PERL_ARGS_ASSERT_NEWGVGEN_FLAGS;
2109 return gv_fetchpv(Perl_form(aTHX_ "%"SVf"::_GEN_%ld",
2110 SVfARG(newSVpvn_flags(pack, strlen(pack),
2116 /* hopefully this is only called on local symbol table entries */
2119 Perl_gp_ref(pTHX_ GP *gp)
2127 /* If the GP they asked for a reference to contains
2128 a method cache entry, clear it first, so that we
2129 don't infect them with our cached entry */
2130 SvREFCNT_dec(gp->gp_cv);
2139 Perl_gp_free(pTHX_ GV *gv)
2145 if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
2147 if (gp->gp_refcnt == 0) {
2148 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2149 "Attempt to free unreferenced glob pointers"
2150 pTHX__FORMAT pTHX__VALUE);
2153 if (--gp->gp_refcnt > 0) {
2154 if (gp->gp_egv == gv)
2161 /* Copy and null out all the glob slots, so destructors do not see
2163 HEK * const file_hek = gp->gp_file_hek;
2164 SV * const sv = gp->gp_sv;
2165 AV * const av = gp->gp_av;
2166 HV * const hv = gp->gp_hv;
2167 IO * const io = gp->gp_io;
2168 CV * const cv = gp->gp_cv;
2169 CV * const form = gp->gp_form;
2171 gp->gp_file_hek = NULL;
2180 unshare_hek(file_hek);
2184 /* FIXME - another reference loop GV -> symtab -> GV ?
2185 Somehow gp->gp_hv can end up pointing at freed garbage. */
2186 if (hv && SvTYPE(hv) == SVt_PVHV) {
2187 const HEK *hvname_hek = HvNAME_HEK(hv);
2188 if (PL_stashcache && hvname_hek)
2189 (void)hv_delete(PL_stashcache, HEK_KEY(hvname_hek),
2190 (HEK_UTF8(hvname_hek) ? -HEK_LEN(hvname_hek) : HEK_LEN(hvname_hek)),
2198 if (!gp->gp_file_hek
2204 && !gp->gp_form) break;
2206 if (--attempts == 0) {
2208 "panic: gp_free failed to free glob pointer - "
2209 "something is repeatedly re-creating entries"
2219 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
2221 AMT * const amtp = (AMT*)mg->mg_ptr;
2222 PERL_UNUSED_ARG(sv);
2224 PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
2226 if (amtp && AMT_AMAGIC(amtp)) {
2228 for (i = 1; i < NofAMmeth; i++) {
2229 CV * const cv = amtp->table[i];
2231 SvREFCNT_dec(MUTABLE_SV(cv));
2232 amtp->table[i] = NULL;
2239 /* Updates and caches the CV's */
2241 * 1 on success and there is some overload
2242 * 0 if there is no overload
2243 * -1 if some error occurred and it couldn't croak
2247 Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
2250 MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2252 const struct mro_meta* stash_meta = HvMROMETA(stash);
2255 PERL_ARGS_ASSERT_GV_AMUPDATE;
2257 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2259 const AMT * const amtp = (AMT*)mg->mg_ptr;
2260 if (amtp->was_ok_sub == newgen) {
2261 return AMT_OVERLOADED(amtp) ? 1 : 0;
2263 sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
2266 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
2269 amt.was_ok_sub = newgen;
2270 amt.fallback = AMGfallNO;
2274 int filled = 0, have_ovl = 0;
2277 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
2279 /* Try to find via inheritance. */
2280 GV *gv = gv_fetchmeth_pvn(stash, PL_AMG_names[0], 2, -1, 0);
2281 SV * const sv = gv ? GvSV(gv) : NULL;
2286 if (!gv_fetchmeth_pvn(stash, "((", 2, -1, 0))
2287 lim = DESTROY_amg; /* Skip overloading entries. */
2289 #ifdef PERL_DONT_CREATE_GVSV
2291 NOOP; /* Equivalent to !SvTRUE and !SvOK */
2294 else if (SvTRUE(sv))
2295 amt.fallback=AMGfallYES;
2297 amt.fallback=AMGfallNEVER;
2299 for (i = 1; i < lim; i++)
2300 amt.table[i] = NULL;
2301 for (; i < NofAMmeth; i++) {
2302 const char * const cooky = PL_AMG_names[i];
2303 /* Human-readable form, for debugging: */
2304 const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
2305 const STRLEN l = PL_AMG_namelens[i];
2307 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
2308 cp, HvNAME_get(stash)) );
2309 /* don't fill the cache while looking up!
2310 Creation of inheritance stubs in intermediate packages may
2311 conflict with the logic of runtime method substitution.
2312 Indeed, for inheritance A -> B -> C, if C overloads "+0",
2313 then we could have created stubs for "(+0" in A and C too.
2314 But if B overloads "bool", we may want to use it for
2315 numifying instead of C's "+0". */
2316 if (i >= DESTROY_amg)
2317 gv = Perl_gv_fetchmeth_pvn_autoload(aTHX_ stash, cooky, l, 0, 0);
2318 else /* Autoload taken care of below */
2319 gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
2321 if (gv && (cv = GvCV(gv))) {
2322 if(GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")){
2323 const char * const hvname = HvNAME_get(GvSTASH(CvGV(cv)));
2324 if (hvname && HEK_LEN(HvNAME_HEK(GvSTASH(CvGV(cv)))) == 8
2325 && strEQ(hvname, "overload")) {
2326 /* This is a hack to support autoloading..., while
2327 knowing *which* methods were declared as overloaded. */
2328 /* GvSV contains the name of the method. */
2330 SV *gvsv = GvSV(gv);
2332 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
2333 "\" for overloaded \"%s\" in package \"%.256s\"\n",
2334 (void*)GvSV(gv), cp, HvNAME(stash)) );
2335 if (!gvsv || !SvPOK(gvsv)
2336 || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0)))
2338 /* Can be an import stub (created by "can"). */
2343 const SV * const name = (gvsv && SvPOK(gvsv))
2345 : newSVpvs_flags("???", SVs_TEMP);
2346 /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */
2347 Perl_croak(aTHX_ "%s method \"%"SVf256
2348 "\" overloading \"%s\" "\
2349 "in package \"%"HEKf256"\"",
2350 (GvCVGEN(gv) ? "Stub found while resolving"
2358 cv = GvCV(gv = ngv);
2361 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
2362 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
2363 GvNAME(CvGV(cv))) );
2365 if (i < DESTROY_amg)
2367 } else if (gv) { /* Autoloaded... */
2368 cv = MUTABLE_CV(gv);
2371 amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
2374 AMT_AMAGIC_on(&amt);
2376 AMT_OVERLOADED_on(&amt);
2377 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2378 (char*)&amt, sizeof(AMT));
2382 /* Here we have no table: */
2384 AMT_AMAGIC_off(&amt);
2385 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2386 (char*)&amt, sizeof(AMTS));
2392 Perl_gv_handler(pTHX_ HV *stash, I32 id)
2398 struct mro_meta* stash_meta;
2400 if (!stash || !HvNAME_get(stash))
2403 stash_meta = HvMROMETA(stash);
2404 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2406 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2409 /* If we're looking up a destructor to invoke, we must avoid
2410 * that Gv_AMupdate croaks, because we might be dying already */
2411 if (Gv_AMupdate(stash, cBOOL(id == DESTROY_amg)) == -1) {
2412 /* and if it didn't found a destructor, we fall back
2413 * to a simpler method that will only look for the
2414 * destructor instead of the whole magic */
2415 if (id == DESTROY_amg) {
2416 GV * const gv = gv_fetchmethod(stash, "DESTROY");
2422 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2425 amtp = (AMT*)mg->mg_ptr;
2426 if ( amtp->was_ok_sub != newgen )
2428 if (AMT_AMAGIC(amtp)) {
2429 CV * const ret = amtp->table[id];
2430 if (ret && isGV(ret)) { /* Autoloading stab */
2431 /* Passing it through may have resulted in a warning
2432 "Inherited AUTOLOAD for a non-method deprecated", since
2433 our caller is going through a function call, not a method call.
2434 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
2435 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
2447 /* Implement tryAMAGICun_MG macro.
2448 Do get magic, then see if the stack arg is overloaded and if so call it.
2450 AMGf_set return the arg using SETs rather than assigning to
2452 AMGf_numeric apply sv_2num to the stack arg.
2456 Perl_try_amagic_un(pTHX_ int method, int flags) {
2460 SV* const arg = TOPs;
2464 if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
2465 AMGf_noright | AMGf_unary))) {
2466 if (flags & AMGf_set) {
2471 if (SvPADMY(TARG)) {
2472 sv_setsv(TARG, tmpsv);
2482 if ((flags & AMGf_numeric) && SvROK(arg))
2488 /* Implement tryAMAGICbin_MG macro.
2489 Do get magic, then see if the two stack args are overloaded and if so
2492 AMGf_set return the arg using SETs rather than assigning to
2494 AMGf_assign op may be called as mutator (eg +=)
2495 AMGf_numeric apply sv_2num to the stack arg.
2499 Perl_try_amagic_bin(pTHX_ int method, int flags) {
2502 SV* const left = TOPm1s;
2503 SV* const right = TOPs;
2509 if (SvAMAGIC(left) || SvAMAGIC(right)) {
2510 SV * const tmpsv = amagic_call(left, right, method,
2511 ((flags & AMGf_assign) && opASSIGN ? AMGf_assign: 0));
2513 if (flags & AMGf_set) {
2520 if (opASSIGN || SvPADMY(TARG)) {
2521 sv_setsv(TARG, tmpsv);
2531 if(left==right && SvGMAGICAL(left)) {
2532 SV * const left = sv_newmortal();
2534 /* Print the uninitialized warning now, so it includes the vari-
2537 if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right);
2538 sv_setsv_flags(left, &PL_sv_no, 0);
2540 else sv_setsv_flags(left, right, 0);
2543 if (flags & AMGf_numeric) {
2545 *(sp-1) = sv_2num(TOPm1s);
2547 *sp = sv_2num(right);
2553 Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
2556 PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
2558 while (SvAMAGIC(ref) &&
2559 (tmpsv = amagic_call(ref, &PL_sv_undef, method,
2560 AMGf_noright | AMGf_unary))) {
2562 Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
2563 if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
2564 /* Bail out if it returns us the same reference. */
2569 return tmpsv ? tmpsv : ref;
2573 Perl_amagic_is_enabled(pTHX_ int method)
2575 SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
2577 assert(PL_curcop->cop_hints & HINT_NO_AMAGIC);
2579 if ( !lex_mask || !SvOK(lex_mask) )
2580 /* overloading lexically disabled */
2582 else if ( lex_mask && SvPOK(lex_mask) ) {
2583 /* we have an entry in the hints hash, check if method has been
2584 * masked by overloading.pm */
2586 const int offset = method / 8;
2587 const int bit = method % 8;
2588 char *pv = SvPV(lex_mask, len);
2590 /* Bit set, so this overloading operator is disabled */
2591 if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
2598 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
2603 CV **cvp=NULL, **ocvp=NULL;
2604 AMT *amtp=NULL, *oamtp=NULL;
2605 int off = 0, off1, lr = 0, notfound = 0;
2606 int postpr = 0, force_cpy = 0;
2607 int assign = AMGf_assign & flags;
2608 const int assignshift = assign ? 1 : 0;
2609 int use_default_op = 0;
2615 PERL_ARGS_ASSERT_AMAGIC_CALL;
2617 if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
2618 if (!amagic_is_enabled(method)) return NULL;
2621 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
2622 && (stash = SvSTASH(SvRV(left))) && Gv_AMG(stash)
2623 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2624 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2625 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
2627 && ((cv = cvp[off=method+assignshift])
2628 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2634 cv = cvp[off=method])))) {
2635 lr = -1; /* Call method for left argument */
2637 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
2640 /* look for substituted methods */
2641 /* In all the covered cases we should be called with assign==0. */
2645 if ((cv = cvp[off=add_ass_amg])
2646 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
2647 right = &PL_sv_yes; lr = -1; assign = 1;
2652 if ((cv = cvp[off = subtr_ass_amg])
2653 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
2654 right = &PL_sv_yes; lr = -1; assign = 1;
2658 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
2661 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
2664 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
2667 (void)((cv = cvp[off=bool__amg])
2668 || (cv = cvp[off=numer_amg])
2669 || (cv = cvp[off=string_amg]));
2676 * SV* ref causes confusion with the interpreter variable of
2679 SV* const tmpRef=SvRV(left);
2680 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
2682 * Just to be extra cautious. Maybe in some
2683 * additional cases sv_setsv is safe, too.
2685 SV* const newref = newSVsv(tmpRef);
2686 SvOBJECT_on(newref);
2687 /* No need to do SvAMAGIC_on here, as SvAMAGIC macros
2688 delegate to the stash. */
2689 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
2695 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
2696 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
2697 SV* const nullsv=sv_2mortal(newSViv(0));
2699 SV* const lessp = amagic_call(left,nullsv,
2700 lt_amg,AMGf_noright);
2701 logic = SvTRUE(lessp);
2703 SV* const lessp = amagic_call(left,nullsv,
2704 ncmp_amg,AMGf_noright);
2705 logic = (SvNV(lessp) < 0);
2708 if (off==subtr_amg) {
2719 if ((cv = cvp[off=subtr_amg])) {
2721 left = sv_2mortal(newSViv(0));
2726 case iter_amg: /* XXXX Eventually should do to_gv. */
2727 case ftest_amg: /* XXXX Eventually should do to_gv. */
2730 return NULL; /* Delegate operation to standard mechanisms. */
2738 return left; /* Delegate operation to standard mechanisms. */
2743 if (!cv) goto not_found;
2744 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
2745 && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash)
2746 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2747 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2748 ? (amtp = (AMT*)mg->mg_ptr)->table
2750 && ((cv = cvp[off=method+assignshift])
2751 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2757 cv = cvp[off=method])))) { /* Method for right
2760 } else if (((cvp && amtp->fallback > AMGfallNEVER)
2761 || (ocvp && oamtp->fallback > AMGfallNEVER))
2762 && !(flags & AMGf_unary)) {
2763 /* We look for substitution for
2764 * comparison operations and
2766 if (method==concat_amg || method==concat_ass_amg
2767 || method==repeat_amg || method==repeat_ass_amg) {
2768 return NULL; /* Delegate operation to string conversion */
2790 if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
2794 if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
2804 not_found: /* No method found, either report or croak */
2812 return left; /* Delegate operation to standard mechanisms. */
2815 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
2816 notfound = 1; lr = -1;
2817 } else if (cvp && (cv=cvp[nomethod_amg])) {
2818 notfound = 1; lr = 1;
2819 } else if ((use_default_op =
2820 (!ocvp || oamtp->fallback >= AMGfallYES)
2821 && (!cvp || amtp->fallback >= AMGfallYES))
2823 /* Skip generating the "no method found" message. */
2827 if (off==-1) off=method;
2828 msg = sv_2mortal(Perl_newSVpvf(aTHX_
2829 "Operation \"%s\": no method found,%sargument %s%"SVf"%s%"SVf,
2830 AMG_id2name(method + assignshift),
2831 (flags & AMGf_unary ? " " : "\n\tleft "),
2833 "in overloaded package ":
2834 "has no overloaded magic",
2836 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))):
2839 ",\n\tright argument in overloaded package ":
2842 : ",\n\tright argument has no overloaded magic"),
2844 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))):
2845 SVfARG(&PL_sv_no)));
2846 if (use_default_op) {
2847 DEBUG_o( Perl_deb(aTHX_ "%"SVf, SVfARG(msg)) );
2849 Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
2853 force_cpy = force_cpy || assign;
2858 DEBUG_o(Perl_deb(aTHX_
2859 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %"SVf"%s\n",
2861 method+assignshift==off? "" :
2863 method+assignshift==off? "" :
2864 AMG_id2name(method+assignshift),
2865 method+assignshift==off? "" : "\")",
2866 flags & AMGf_unary? "" :
2867 lr==1 ? " for right argument": " for left argument",
2868 flags & AMGf_unary? " for argument" : "",
2869 stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)),
2870 fl? ",\n\tassignment variant used": "") );
2873 /* Since we use shallow copy during assignment, we need
2874 * to dublicate the contents, probably calling user-supplied
2875 * version of copy operator
2877 /* We need to copy in following cases:
2878 * a) Assignment form was called.
2879 * assignshift==1, assign==T, method + 1 == off
2880 * b) Increment or decrement, called directly.
2881 * assignshift==0, assign==0, method + 0 == off
2882 * c) Increment or decrement, translated to assignment add/subtr.
2883 * assignshift==0, assign==T,
2885 * d) Increment or decrement, translated to nomethod.
2886 * assignshift==0, assign==0,
2888 * e) Assignment form translated to nomethod.
2889 * assignshift==1, assign==T, method + 1 != off
2892 /* off is method, method+assignshift, or a result of opcode substitution.
2893 * In the latter case assignshift==0, so only notfound case is important.
2895 if ( (lr == -1) && ( ( (method + assignshift == off)
2896 && (assign || (method == inc_amg) || (method == dec_amg)))
2899 /* newSVsv does not behave as advertised, so we copy missing
2900 * information by hand */
2901 SV *tmpRef = SvRV(left);
2903 if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
2904 SvRV_set(left, rv_copy);
2906 SvREFCNT_dec(tmpRef);
2914 const bool oldcatch = CATCH_GET;
2917 Zero(&myop, 1, BINOP);
2918 myop.op_last = (OP *) &myop;
2919 myop.op_next = NULL;
2920 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
2922 PUSHSTACKi(PERLSI_OVERLOAD);
2925 PL_op = (OP *) &myop;
2926 if (PERLDB_SUB && PL_curstash != PL_debstash)
2927 PL_op->op_private |= OPpENTERSUB_DB;
2929 Perl_pp_pushmark(aTHX);
2931 EXTEND(SP, notfound + 5);
2932 PUSHs(lr>0? right: left);
2933 PUSHs(lr>0? left: right);
2934 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
2936 PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
2937 AMG_id2namelen(method + assignshift), SVs_TEMP));
2939 PUSHs(MUTABLE_SV(cv));
2942 if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
2950 CATCH_SET(oldcatch);
2957 ans=SvIV(res)<=0; break;
2960 ans=SvIV(res)<0; break;
2963 ans=SvIV(res)>=0; break;
2966 ans=SvIV(res)>0; break;
2969 ans=SvIV(res)==0; break;
2972 ans=SvIV(res)!=0; break;
2975 SvSetSV(left,res); return left;
2977 ans=!SvTRUE(res); break;
2982 } else if (method==copy_amg) {
2984 Perl_croak(aTHX_ "Copy method did not return a reference");
2986 return SvREFCNT_inc(SvRV(res));
2994 Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
2999 PERL_ARGS_ASSERT_GV_NAME_SET;
3002 Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
3004 if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
3005 unshare_hek(GvNAME_HEK(gv));
3008 PERL_HASH(hash, name, len);
3009 GvNAME_HEK(gv) = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash);
3013 =for apidoc gv_try_downgrade
3015 If the typeglob C<gv> can be expressed more succinctly, by having
3016 something other than a real GV in its place in the stash, replace it
3017 with the optimised form. Basic requirements for this are that C<gv>
3018 is a real typeglob, is sufficiently ordinary, and is only referenced
3019 from its package. This function is meant to be used when a GV has been
3020 looked up in part to see what was there, causing upgrading, but based
3021 on what was found it turns out that the real GV isn't required after all.
3023 If C<gv> is a completely empty typeglob, it is deleted from the stash.
3025 If C<gv> is a typeglob containing only a sufficiently-ordinary constant
3026 sub, the typeglob is replaced with a scalar-reference placeholder that
3027 more compactly represents the same thing.
3033 Perl_gv_try_downgrade(pTHX_ GV *gv)
3039 PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
3041 /* XXX Why and where does this leave dangling pointers during global
3043 if (PL_phase == PERL_PHASE_DESTRUCT) return;
3045 if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
3046 !SvOBJECT(gv) && !SvREADONLY(gv) &&
3047 isGV_with_GP(gv) && GvGP(gv) &&
3048 !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
3049 !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
3050 GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
3052 if (SvMAGICAL(gv)) {
3054 /* only backref magic is allowed */
3055 if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
3057 for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
3058 if (mg->mg_type != PERL_MAGIC_backref)
3064 HEK *gvnhek = GvNAME_HEK(gv);
3065 (void)hv_delete(stash, HEK_KEY(gvnhek),
3066 HEK_UTF8(gvnhek) ? -HEK_LEN(gvnhek) : HEK_LEN(gvnhek), G_DISCARD);
3067 } else if (GvMULTI(gv) && cv &&
3068 !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
3069 CvSTASH(cv) == stash && CvGV(cv) == gv &&
3070 CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
3071 !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
3072 (namehek = GvNAME_HEK(gv)) &&
3073 (gvp = hv_fetch(stash, HEK_KEY(namehek),
3074 HEK_LEN(namehek)*(HEK_UTF8(namehek) ? -1 : 1), 0)) &&
3076 SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
3080 SvFLAGS(gv) = SVt_IV|SVf_ROK;
3081 SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
3082 STRUCT_OFFSET(XPVIV, xiv_iv));
3083 SvRV_set(gv, value);
3090 core_xsub(pTHX_ CV* cv)
3093 "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
3099 * c-indentation-style: bsd
3101 * indent-tabs-mode: nil
3104 * ex: set ts=8 sts=4 sw=4 et: