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. */
374 /* newCONSTSUB takes ownership of the reference from us. */
375 cv = newCONSTSUB_flags(stash, name, len, flags, has_constant);
376 /* In case op.c:S_process_special_blocks stole it: */
378 GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv));
379 assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */
380 /* If this reference was a copy of another, then the subroutine
381 must have been "imported", by a Perl space assignment to a GV
382 from a reference to CV. */
383 if (exported_constant)
384 GvIMPORTED_CV_on(gv);
387 (void) start_subparse(0,0); /* Create empty CV in compcv. */
394 CvFILE_set_from_cop(cv, PL_curcop);
395 CvSTASH_set(cv, PL_curstash);
397 sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen,
398 SV_HAS_TRAILING_NUL);
399 if ( proto_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
405 S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type)
407 PERL_ARGS_ASSERT_GV_INIT_SVTYPE;
419 #ifdef PERL_DONT_CREATE_GVSV
427 /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13
428 If we just cast GvSVn(gv) to void, it ignores evaluating it for
435 static void core_xsub(pTHX_ CV* cv);
438 S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
439 const char * const name, const STRLEN len)
441 const int code = keyword(name, len, 1);
442 static const char file[] = __FILE__;
443 CV *cv, *oldcompcv = NULL;
446 bool ampable = TRUE; /* &{}-able */
447 COP *oldcurcop = NULL;
448 yy_parser *oldparser = NULL;
449 I32 oldsavestack_ix = 0;
454 if (!code) return NULL; /* Not a keyword */
455 switch (code < 0 ? -code : code) {
456 /* no support for \&CORE::infix;
457 no support for funcs that do not parse like funcs */
458 case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD:
459 case KEY_BEGIN : case KEY_CHECK : case KEY_cmp: case KEY_CORE :
460 case KEY_default : case KEY_DESTROY:
461 case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif :
462 case KEY_END : case KEY_eq : case KEY_eval :
463 case KEY_for : case KEY_foreach: case KEY_format: case KEY_ge :
464 case KEY_given : case KEY_goto : case KEY_grep :
465 case KEY_gt : case KEY_if: case KEY_INIT: case KEY_last: case KEY_le:
466 case KEY_local: case KEY_lt: case KEY_m : case KEY_map : case KEY_my:
467 case KEY_ne : case KEY_next : case KEY_no: case KEY_or: case KEY_our:
468 case KEY_package: case KEY_print: case KEY_printf:
469 case KEY_q : case KEY_qq : case KEY_qr : case KEY_qw :
470 case KEY_qx : case KEY_redo : case KEY_require: case KEY_return:
471 case KEY_s : case KEY_say : case KEY_sort :
472 case KEY_state: case KEY_sub :
473 case KEY_tr : case KEY_UNITCHECK: case KEY_unless:
474 case KEY_until: case KEY_use : case KEY_when : case KEY_while :
475 case KEY_x : case KEY_xor : case KEY_y :
478 case KEY_chomp: case KEY_chop: case KEY_defined: case KEY_delete:
479 case KEY_each : case KEY_eof : case KEY_exec : case KEY_exists:
485 case KEY_splice: case KEY_split:
488 case KEY_truncate: case KEY_unlink:
495 gv_init(gv, stash, name, len, TRUE);
500 oldcurcop = PL_curcop;
501 oldparser = PL_parser;
502 lex_start(NULL, NULL, 0);
503 oldcompcv = PL_compcv;
504 PL_compcv = NULL; /* Prevent start_subparse from setting
506 oldsavestack_ix = start_subparse(FALSE,0);
510 /* Avoid calling newXS, as it calls us, and things start to
512 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
515 mro_method_changed_in(GvSTASH(gv));
517 CvXSUB(cv) = core_xsub;
519 CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE
521 (void)gv_fetchfile(file);
522 CvFILE(cv) = (char *)file;
523 /* XXX This is inefficient, as doing things this order causes
524 a prototype check in newATTRSUB. But we have to do
525 it this order as we need an op number before calling
527 (void)core_prototype((SV *)cv, name, code, &opnum);
529 (void)hv_store(stash,name,len,(SV *)gv,0);
533 oldsavestack_ix, (OP *)gv,
538 : newSVpvn(name,len),
543 assert(GvCV(gv) == cv);
544 if (opnum != OP_VEC && opnum != OP_SUBSTR && opnum != OP_POS
545 && opnum != OP_UNDEF)
546 CvLVALUE_off(cv); /* Now *that* was a neat trick. */
548 PL_parser = oldparser;
549 PL_curcop = oldcurcop;
550 PL_compcv = oldcompcv;
552 opnumsv = opnum ? newSVuv((UV)opnum) : (SV *)NULL;
554 cv, Perl_ck_entersub_args_core, opnumsv ? opnumsv : (SV *)cv
556 SvREFCNT_dec(opnumsv);
561 =for apidoc gv_fetchmeth
563 Like L</gv_fetchmeth_pvn>, but lacks a flags parameter.
565 =for apidoc gv_fetchmeth_sv
567 Exactly like L</gv_fetchmeth_pvn>, but takes the name string in the form
568 of an SV instead of a string/length pair.
574 Perl_gv_fetchmeth_sv(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
578 PERL_ARGS_ASSERT_GV_FETCHMETH_SV;
579 namepv = SvPV(namesv, namelen);
582 return gv_fetchmeth_pvn(stash, namepv, namelen, level, flags);
586 =for apidoc gv_fetchmeth_pv
588 Exactly like L</gv_fetchmeth_pvn>, but takes a nul-terminated string
589 instead of a string/length pair.
595 Perl_gv_fetchmeth_pv(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
597 PERL_ARGS_ASSERT_GV_FETCHMETH_PV;
598 return gv_fetchmeth_pvn(stash, name, strlen(name), level, flags);
602 =for apidoc gv_fetchmeth_pvn
604 Returns the glob with the given C<name> and a defined subroutine or
605 C<NULL>. The glob lives in the given C<stash>, or in the stashes
606 accessible via @ISA and UNIVERSAL::.
608 The argument C<level> should be either 0 or -1. If C<level==0>, as a
609 side-effect creates a glob with the given C<name> in the given C<stash>
610 which in the case of success contains an alias for the subroutine, and sets
611 up caching info for this glob.
613 Currently, the only significant value for C<flags> is SVf_UTF8.
615 This function grants C<"SUPER"> token as a postfix of the stash name. The
616 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
617 visible to Perl code. So when calling C<call_sv>, you should not use
618 the GV directly; instead, you should use the method's CV, which can be
619 obtained from the GV with the C<GvCV> macro.
624 /* NOTE: No support for tied ISA */
627 Perl_gv_fetchmeth_pvn(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
635 GV* candidate = NULL;
639 I32 create = (level >= 0) ? 1 : 0;
643 U32 is_utf8 = flags & SVf_UTF8;
645 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN;
647 /* UNIVERSAL methods should be callable without a stash */
649 create = 0; /* probably appropriate */
650 if(!(stash = gv_stashpvs("UNIVERSAL", 0)))
656 hvname = HvNAME_get(stash);
658 Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
663 DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,hvname) );
665 topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation;
667 /* check locally for a real method or a cache entry */
668 gvp = (GV**)hv_fetch(stash, name, is_utf8 ? -(I32)len : (I32)len, create);
673 if (SvTYPE(topgv) != SVt_PVGV)
674 gv_init_pvn(topgv, stash, name, len, GV_ADDMULTI|is_utf8);
675 if ((cand_cv = GvCV(topgv))) {
676 /* If genuine method or valid cache entry, use it */
677 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
681 /* stale cache entry, junk it and move on */
682 SvREFCNT_dec(cand_cv);
683 GvCV_set(topgv, NULL);
688 else if (GvCVGEN(topgv) == topgen_cmp) {
689 /* cache indicates no such method definitively */
692 else if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4
693 && strnEQ(hvname, "CORE", 4)
694 && S_maybe_add_coresub(aTHX_ NULL,topgv,name,len))
698 packlen = HvNAMELEN_get(stash);
699 if (packlen >= 7 && strEQ(hvname + packlen - 7, "::SUPER")) {
702 basestash = gv_stashpvn(hvname, packlen,
703 GV_ADD | (HvNAMEUTF8(stash) ? SVf_UTF8 : 0));
704 linear_av = mro_get_linear_isa(basestash);
707 linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
710 linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
711 items = AvFILLp(linear_av); /* no +1, to skip over self */
713 linear_sv = *linear_svp++;
715 cstash = gv_stashsv(linear_sv, 0);
718 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
719 "Can't locate package %"SVf" for @%"HEKf"::ISA",
721 HEKfARG(HvNAME_HEK(stash)));
727 gvp = (GV**)hv_fetch(cstash, name, is_utf8 ? -(I32)len : (I32)len, 0);
729 if (len > 1 && HvNAMELEN_get(cstash) == 4) {
730 const char *hvname = HvNAME(cstash); assert(hvname);
731 if (strnEQ(hvname, "CORE", 4)
733 S_maybe_add_coresub(aTHX_ cstash,NULL,name,len)
739 else candidate = *gvp;
742 if (SvTYPE(candidate) != SVt_PVGV)
743 gv_init_pvn(candidate, cstash, name, len, GV_ADDMULTI|is_utf8);
744 if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
746 * Found real method, cache method in topgv if:
747 * 1. topgv has no synonyms (else inheritance crosses wires)
748 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
750 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
751 CV *old_cv = GvCV(topgv);
752 SvREFCNT_dec(old_cv);
753 SvREFCNT_inc_simple_void_NN(cand_cv);
754 GvCV_set(topgv, cand_cv);
755 GvCVGEN(topgv) = topgen_cmp;
761 /* Check UNIVERSAL without caching */
762 if(level == 0 || level == -1) {
763 candidate = gv_fetchmeth_pvn(NULL, name, len, 1, flags);
765 cand_cv = GvCV(candidate);
766 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
767 CV *old_cv = GvCV(topgv);
768 SvREFCNT_dec(old_cv);
769 SvREFCNT_inc_simple_void_NN(cand_cv);
770 GvCV_set(topgv, cand_cv);
771 GvCVGEN(topgv) = topgen_cmp;
777 if (topgv && GvREFCNT(topgv) == 1) {
778 /* cache the fact that the method is not defined */
779 GvCVGEN(topgv) = topgen_cmp;
786 =for apidoc gv_fetchmeth_autoload
788 This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
791 =for apidoc gv_fetchmeth_sv_autoload
793 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
794 of an SV instead of a string/length pair.
800 Perl_gv_fetchmeth_sv_autoload(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
804 PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD;
805 namepv = SvPV(namesv, namelen);
808 return gv_fetchmeth_pvn_autoload(stash, namepv, namelen, level, flags);
812 =for apidoc gv_fetchmeth_pv_autoload
814 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
815 instead of a string/length pair.
821 Perl_gv_fetchmeth_pv_autoload(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
823 PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD;
824 return gv_fetchmeth_pvn_autoload(stash, name, strlen(name), level, flags);
828 =for apidoc gv_fetchmeth_pvn_autoload
830 Same as gv_fetchmeth_pvn(), but looks for autoloaded subroutines too.
831 Returns a glob for the subroutine.
833 For an autoloaded subroutine without a GV, will create a GV even
834 if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
835 of the result may be zero.
837 Currently, the only significant value for C<flags> is SVf_UTF8.
843 Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
845 GV *gv = gv_fetchmeth_pvn(stash, name, len, level, flags);
847 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD;
854 return NULL; /* UNIVERSAL::AUTOLOAD could cause trouble */
855 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
857 if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags)))
860 if (!(CvROOT(cv) || CvXSUB(cv)))
862 /* Have an autoload */
863 if (level < 0) /* Cannot do without a stub */
864 gv_fetchmeth_pvn(stash, name, len, 0, flags);
865 gvp = (GV**)hv_fetch(stash, name,
866 (flags & SVf_UTF8) ? -(I32)len : (I32)len, (level >= 0));
875 =for apidoc gv_fetchmethod_autoload
877 Returns the glob which contains the subroutine to call to invoke the method
878 on the C<stash>. In fact in the presence of autoloading this may be the
879 glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
882 The third parameter of C<gv_fetchmethod_autoload> determines whether
883 AUTOLOAD lookup is performed if the given method is not present: non-zero
884 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
885 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
886 with a non-zero C<autoload> parameter.
888 These functions grant C<"SUPER"> token as a prefix of the method name. Note
889 that if you want to keep the returned glob for a long time, you need to
890 check for it being "AUTOLOAD", since at the later time the call may load a
891 different subroutine due to $AUTOLOAD changing its value. Use the glob
892 created via a side effect to do this.
894 These functions have the same side-effects and as C<gv_fetchmeth> with
895 C<level==0>. C<name> should be writable if contains C<':'> or C<'
896 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
897 C<call_sv> apply equally to these functions.
903 S_gv_get_super_pkg(pTHX_ const char* name, I32 namelen, U32 flags)
910 PERL_ARGS_ASSERT_GV_GET_SUPER_PKG;
912 stash = gv_stashpvn(name, namelen, flags);
913 if(stash) return stash;
915 /* If we must create it, give it an @ISA array containing
916 the real package this SUPER is for, so that it's tied
917 into the cache invalidation code correctly */
918 stash = gv_stashpvn(name, namelen, GV_ADD | flags);
919 gvp = (GV**)hv_fetchs(stash, "ISA", TRUE);
921 gv_init(gv, stash, "ISA", 3, TRUE);
922 superisa = GvAVn(gv);
924 sv_magic(MUTABLE_SV(superisa), MUTABLE_SV(gv), PERL_MAGIC_isa, NULL, 0);
925 av_push(superisa, newSVhek(CopSTASH(PL_curcop)
926 ? HvNAME_HEK(CopSTASH(PL_curcop)) : NULL));
932 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
934 PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
936 return gv_fetchmethod_flags(stash, name, autoload ? GV_AUTOLOAD : 0);
940 Perl_gv_fetchmethod_sv_flags(pTHX_ HV *stash, SV *namesv, U32 flags)
944 PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS;
945 namepv = SvPV(namesv, namelen);
948 return gv_fetchmethod_pvn_flags(stash, namepv, namelen, flags);
952 Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
954 PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS;
955 return gv_fetchmethod_pvn_flags(stash, name, strlen(name), flags);
958 /* Don't merge this yet, as it's likely to get a len parameter, and possibly
961 Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
964 register const char *nend;
965 const char *nsplit = NULL;
968 const char * const origname = name;
969 SV *const error_report = MUTABLE_SV(stash);
970 const U32 autoload = flags & GV_AUTOLOAD;
971 const U32 do_croak = flags & GV_CROAK;
972 const U32 is_utf8 = flags & SVf_UTF8;
974 PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS;
976 if (SvTYPE(stash) < SVt_PVHV)
979 /* The only way stash can become NULL later on is if nsplit is set,
980 which in turn means that there is no need for a SVt_PVHV case
981 the error reporting code. */
984 for (nend = name; *nend || nend != (origname + len); nend++) {
989 else if (*nend == ':' && *(nend + 1) == ':') {
995 if ((nsplit - origname) == 5 && memEQ(origname, "SUPER", 5)) {
996 /* ->SUPER::method should really be looked up in original stash */
997 SV * const tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_
999 HEKfARG(HvNAME_HEK((HV*)CopSTASH(PL_curcop)))
1001 /* __PACKAGE__::SUPER stash should be autovivified */
1002 stash = gv_get_super_pkg(SvPVX_const(tmpstr), SvCUR(tmpstr), SvUTF8(tmpstr));
1003 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
1004 origname, HvNAME_get(stash), name) );
1007 /* don't autovifify if ->NoSuchStash::method */
1008 stash = gv_stashpvn(origname, nsplit - origname, is_utf8);
1010 /* however, explicit calls to Pkg::SUPER::method may
1011 happen, and may require autovivification to work */
1012 if (!stash && (nsplit - origname) >= 7 &&
1013 strnEQ(nsplit - 7, "::SUPER", 7) &&
1014 gv_stashpvn(origname, nsplit - origname - 7, is_utf8))
1015 stash = gv_get_super_pkg(origname, nsplit - origname, flags);
1020 gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
1022 if (strEQ(name,"import") || strEQ(name,"unimport"))
1023 gv = MUTABLE_GV(&PL_sv_yes);
1025 gv = gv_autoload_pvn(
1026 ostash, name, nend - name, GV_AUTOLOAD_ISMETHOD|flags
1028 if (!gv && do_croak) {
1029 /* Right now this is exclusively for the benefit of S_method_common
1032 /* If we can't find an IO::File method, it might be a call on
1033 * a filehandle. If IO:File has not been loaded, try to
1034 * require it first instead of croaking */
1035 const char *stash_name = HvNAME_get(stash);
1036 if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File")
1037 && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL,
1038 STR_WITH_LEN("IO/File.pm"), 0,
1039 HV_FETCH_ISEXISTS, NULL, 0)
1041 require_pv("IO/File.pm");
1042 gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
1047 "Can't locate object method \"%"SVf
1048 "\" via package \"%"HEKf"\"",
1049 SVfARG(newSVpvn_flags(name, nend - name,
1050 SVs_TEMP | is_utf8)),
1051 HEKfARG(HvNAME_HEK(stash)));
1057 packnamesv = newSVpvn_flags(origname, nsplit - origname,
1058 SVs_TEMP | is_utf8);
1060 packnamesv = sv_2mortal(newSVsv(error_report));
1064 "Can't locate object method \"%"SVf"\" via package \"%"SVf"\""
1065 " (perhaps you forgot to load \"%"SVf"\"?)",
1066 SVfARG(newSVpvn_flags(name, nend - name,
1067 SVs_TEMP | is_utf8)),
1068 SVfARG(packnamesv), SVfARG(packnamesv));
1072 else if (autoload) {
1073 CV* const cv = GvCV(gv);
1074 if (!CvROOT(cv) && !CvXSUB(cv)) {
1082 if (GvCV(stubgv) != cv) /* orphaned import */
1085 autogv = gv_autoload_pvn(GvSTASH(stubgv),
1086 GvNAME(stubgv), GvNAMELEN(stubgv),
1087 GV_AUTOLOAD_ISMETHOD
1088 | (GvNAMEUTF8(stubgv) ? SVf_UTF8 : 0));
1098 Perl_gv_autoload_sv(pTHX_ HV *stash, SV* namesv, U32 flags)
1102 PERL_ARGS_ASSERT_GV_AUTOLOAD_SV;
1103 namepv = SvPV(namesv, namelen);
1106 return gv_autoload_pvn(stash, namepv, namelen, flags);
1110 Perl_gv_autoload_pv(pTHX_ HV *stash, const char *namepv, U32 flags)
1112 PERL_ARGS_ASSERT_GV_AUTOLOAD_PV;
1113 return gv_autoload_pvn(stash, namepv, strlen(namepv), flags);
1117 Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
1125 SV *packname = NULL;
1126 U32 is_utf8 = flags & SVf_UTF8 ? SVf_UTF8 : 0;
1128 PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN;
1130 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
1133 if (SvTYPE(stash) < SVt_PVHV) {
1134 STRLEN packname_len = 0;
1135 const char * const packname_ptr = SvPV_const(MUTABLE_SV(stash), packname_len);
1136 packname = newSVpvn_flags(packname_ptr, packname_len,
1137 SVs_TEMP | SvUTF8(stash));
1141 packname = sv_2mortal(newSVhek(HvNAME_HEK(stash)));
1143 if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, is_utf8)))
1147 if (!(CvROOT(cv) || CvXSUB(cv)))
1151 * Inheriting AUTOLOAD for non-methods works ... for now.
1154 !(flags & GV_AUTOLOAD_ISMETHOD)
1155 && (GvCVGEN(gv) || GvSTASH(gv) != stash)
1157 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
1158 "Use of inherited AUTOLOAD for non-method %"SVf"::%"SVf"() is deprecated",
1160 SVfARG(newSVpvn_flags(name, len, SVs_TEMP | is_utf8)));
1163 /* Instead of forcing the XSUB do another lookup for $AUTOLOAD
1164 * and split that value on the last '::', pass along the same data
1165 * via the SvPVX field in the CV, and the stash in CvSTASH.
1167 * Due to an unfortunate accident of history, the SvPVX field
1168 * serves two purposes. It is also used for the subroutine's pro-
1169 * type. Since SvPVX has been documented as returning the sub name
1170 * for a long time, but not as returning the prototype, we have
1171 * to preserve the SvPVX AUTOLOAD behaviour and put the prototype
1174 * We put the prototype in the same allocated buffer, but after
1175 * the sub name. The SvPOK flag indicates the presence of a proto-
1176 * type. The CvAUTOLOAD flag indicates the presence of a sub name.
1177 * If both flags are on, then SvLEN is used to indicate the end of
1178 * the prototype (artificially lower than what is actually allo-
1179 * cated), at the risk of having to reallocate a few bytes unneces-
1180 * sarily--but that should happen very rarely, if ever.
1182 * We use SvUTF8 for both prototypes and sub names, so if one is
1183 * UTF8, the other must be upgraded.
1185 CvSTASH_set(cv, stash);
1186 if (SvPOK(cv)) { /* Ouch! */
1187 SV *tmpsv = newSVpvn_flags(name, len, is_utf8);
1189 const char *proto = CvPROTO(cv);
1192 sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2);
1193 ulen = SvCUR(tmpsv);
1194 SvCUR(tmpsv)++; /* include null in string */
1196 tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv)
1198 SvTEMP_on(tmpsv); /* Allow theft */
1199 sv_setsv_nomg((SV *)cv, tmpsv);
1201 SvREFCNT_dec(tmpsv);
1202 SvLEN(cv) = SvCUR(cv) + 1;
1206 sv_setpvn((SV *)cv, name, len);
1210 else SvUTF8_off(cv);
1216 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
1217 * The subroutine's original name may not be "AUTOLOAD", so we don't
1218 * use that, but for lack of anything better we will use the sub's
1219 * original package to look up $AUTOLOAD.
1221 varstash = GvSTASH(CvGV(cv));
1222 vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
1226 gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0);
1227 #ifdef PERL_DONT_CREATE_GVSV
1228 GvSV(vargv) = newSV(0);
1232 varsv = GvSVn(vargv);
1233 sv_setsv(varsv, packname);
1234 sv_catpvs(varsv, "::");
1235 /* Ensure SvSETMAGIC() is called if necessary. In particular, to clear
1236 tainting if $FOO::AUTOLOAD was previously tainted, but is not now. */
1239 SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES)
1247 /* require_tie_mod() internal routine for requiring a module
1248 * that implements the logic of automatic ties like %! and %-
1250 * The "gv" parameter should be the glob.
1251 * "varpv" holds the name of the var, used for error messages.
1252 * "namesv" holds the module name. Its refcount will be decremented.
1253 * "methpv" holds the method name to test for to check that things
1254 * are working reasonably close to as expected.
1255 * "flags": if flag & 1 then save the scalar before loading.
1256 * For the protection of $! to work (it is set by this routine)
1257 * the sv slot must already be magicalized.
1260 S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv,const U32 flags)
1263 HV* stash = gv_stashsv(namesv, 0);
1265 PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
1267 if (!stash || !(gv_fetchmethod_autoload(stash, methpv, FALSE))) {
1268 SV *module = newSVsv(namesv);
1269 char varname = *varpv; /* varpv might be clobbered by load_module,
1270 so save it. For the moment it's always
1272 const char type = varname == '[' ? '$' : '%';
1277 PUSHSTACKi(PERLSI_MAGIC);
1278 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
1282 stash = gv_stashsv(namesv, 0);
1284 Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" is not available",
1285 type, varname, SVfARG(namesv));
1286 else if (!gv_fetchmethod(stash, methpv))
1287 Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" does not support method %s",
1288 type, varname, SVfARG(namesv), methpv);
1290 SvREFCNT_dec(namesv);
1295 =for apidoc gv_stashpv
1297 Returns a pointer to the stash for a specified package. Uses C<strlen> to
1298 determine the length of C<name>, then calls C<gv_stashpvn()>.
1304 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
1306 PERL_ARGS_ASSERT_GV_STASHPV;
1307 return gv_stashpvn(name, strlen(name), create);
1311 =for apidoc gv_stashpvn
1313 Returns a pointer to the stash for a specified package. The C<namelen>
1314 parameter indicates the length of the C<name>, in bytes. C<flags> is passed
1315 to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
1316 created if it does not already exist. If the package does not exist and
1317 C<flags> is 0 (or any other setting that does not create packages) then NULL
1325 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
1331 U32 tmplen = namelen + 2;
1333 PERL_ARGS_ASSERT_GV_STASHPVN;
1335 if (tmplen <= sizeof smallbuf)
1338 Newx(tmpbuf, tmplen, char);
1339 Copy(name, tmpbuf, namelen, char);
1340 tmpbuf[namelen] = ':';
1341 tmpbuf[namelen+1] = ':';
1342 tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
1343 if (tmpbuf != smallbuf)
1347 stash = GvHV(tmpgv);
1348 if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL;
1350 if (!HvNAME_get(stash)) {
1351 hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 );
1353 /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */
1354 /* If the containing stash has multiple effective
1355 names, see that this one gets them, too. */
1356 if (HvAUX(GvSTASH(tmpgv))->xhv_name_count)
1357 mro_package_moved(stash, NULL, tmpgv, 1);
1363 =for apidoc gv_stashsv
1365 Returns a pointer to the stash for a specified package. See C<gv_stashpvn>.
1371 Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
1374 const char * const ptr = SvPV_const(sv,len);
1376 PERL_ARGS_ASSERT_GV_STASHSV;
1378 return gv_stashpvn(ptr, len, flags | SvUTF8(sv));
1383 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
1384 PERL_ARGS_ASSERT_GV_FETCHPV;
1385 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
1389 Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
1391 const char * const nambeg =
1392 SvPV_flags_const(name, len, flags & GV_NO_SVGMAGIC ? 0 : SV_GMAGIC);
1393 PERL_ARGS_ASSERT_GV_FETCHSV;
1394 return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
1398 S_gv_magicalize_isa(pTHX_ GV *gv)
1402 PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
1406 sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1411 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
1412 const svtype sv_type)
1415 register const char *name = nambeg;
1416 register GV *gv = NULL;
1419 register const char *name_cursor;
1421 const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
1422 const I32 no_expand = flags & GV_NOEXPAND;
1423 const I32 add = flags & ~GV_NOADD_MASK;
1424 const U32 is_utf8 = flags & SVf_UTF8;
1425 bool addmg = !!(flags & GV_ADDMG);
1426 const char *const name_end = nambeg + full_len;
1427 const char *const name_em1 = name_end - 1;
1430 PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
1432 if (flags & GV_NOTQUAL) {
1433 /* Caller promised that there is no stash, so we can skip the check. */
1438 if (full_len > 2 && *name == '*' && isIDFIRST_lazy_if(name + 1, is_utf8)) {
1439 /* accidental stringify on a GV? */
1443 for (name_cursor = name; name_cursor < name_end; name_cursor++) {
1444 if (name_cursor < name_em1 &&
1445 ((*name_cursor == ':'
1446 && name_cursor[1] == ':')
1447 || *name_cursor == '\''))
1450 stash = PL_defstash;
1451 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
1454 len = name_cursor - name;
1455 if (name_cursor > nambeg) { /* Skip for initial :: or ' */
1457 if (*name_cursor == ':') {
1462 Newx(tmpbuf, len+2, char);
1463 Copy(name, tmpbuf, len, char);
1464 tmpbuf[len++] = ':';
1465 tmpbuf[len++] = ':';
1468 gvp = (GV**)hv_fetch(stash, key, is_utf8 ? -len : len, add);
1469 gv = gvp ? *gvp : NULL;
1470 if (gv && gv != (const GV *)&PL_sv_undef) {
1471 if (SvTYPE(gv) != SVt_PVGV)
1472 gv_init_pvn(gv, stash, key, len, (add & GV_ADDMULTI)|is_utf8);
1478 if (!gv || gv == (const GV *)&PL_sv_undef)
1481 if (!(stash = GvHV(gv)))
1483 stash = GvHV(gv) = newHV();
1484 if (!HvNAME_get(stash)) {
1485 if (GvSTASH(gv) == PL_defstash && len == 6
1486 && strnEQ(name, "CORE", 4))
1487 hv_name_set(stash, "CORE", 4, 0);
1490 stash, nambeg, name_cursor-nambeg, is_utf8
1492 /* If the containing stash has multiple effective
1493 names, see that this one gets them, too. */
1494 if (HvAUX(GvSTASH(gv))->xhv_name_count)
1495 mro_package_moved(stash, NULL, gv, 1);
1498 else if (!HvNAME_get(stash))
1499 hv_name_set(stash, nambeg, name_cursor - nambeg, is_utf8);
1502 if (*name_cursor == ':')
1504 name = name_cursor+1;
1505 if (name == name_end)
1507 ? gv : MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
1510 len = name_cursor - name;
1512 /* No stash in name, so see how we can default */
1516 if (len && isIDFIRST_lazy(name)) {
1517 bool global = FALSE;
1525 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1526 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1527 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
1531 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1536 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1537 && name[3] == 'I' && name[4] == 'N')
1541 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1542 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1543 ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
1547 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1548 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1555 stash = PL_defstash;
1556 else if (IN_PERL_COMPILETIME) {
1557 stash = PL_curstash;
1558 if (add && (PL_hints & HINT_STRICT_VARS) &&
1559 sv_type != SVt_PVCV &&
1560 sv_type != SVt_PVGV &&
1561 sv_type != SVt_PVFM &&
1562 sv_type != SVt_PVIO &&
1563 !(len == 1 && sv_type == SVt_PV &&
1564 (*name == 'a' || *name == 'b')) )
1566 gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -len : len,0);
1568 *gvp == (const GV *)&PL_sv_undef ||
1569 SvTYPE(*gvp) != SVt_PVGV)
1573 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
1574 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1575 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
1577 SV* namesv = newSVpvn_flags(name, len, SVs_TEMP | is_utf8);
1578 /* diag_listed_as: Variable "%s" is not imported%s */
1580 aTHX_ packWARN(WARN_MISC),
1581 "Variable \"%c%"SVf"\" is not imported",
1582 sv_type == SVt_PVAV ? '@' :
1583 sv_type == SVt_PVHV ? '%' : '$',
1587 aTHX_ packWARN(WARN_MISC),
1588 "\t(Did you mean &%"SVf" instead?)\n", SVfARG(namesv)
1595 stash = CopSTASH(PL_curcop);
1598 stash = PL_defstash;
1601 /* By this point we should have a stash and a name */
1605 SV * const err = Perl_mess(aTHX_
1606 "Global symbol \"%s%"SVf"\" requires explicit package name",
1607 (sv_type == SVt_PV ? "$"
1608 : sv_type == SVt_PVAV ? "@"
1609 : sv_type == SVt_PVHV ? "%"
1610 : ""), SVfARG(newSVpvn_flags(name, len, SVs_TEMP | is_utf8)));
1612 if (USE_UTF8_IN_NAMES)
1615 gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
1617 /* symbol table under destruction */
1626 if (!SvREFCNT(stash)) /* symbol table under destruction */
1629 gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -len : len,add);
1630 if (!gvp || *gvp == (const GV *)&PL_sv_undef) {
1631 if (addmg) gv = (GV *)newSV(0);
1634 else gv = *gvp, addmg = 0;
1635 /* From this point on, addmg means gv has not been inserted in the
1638 if (SvTYPE(gv) == SVt_PVGV) {
1641 gv_init_svtype(gv, sv_type);
1642 if (len == 1 && stash == PL_defstash) {
1643 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
1645 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1646 else if (*name == '-' || *name == '+')
1647 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1649 if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
1651 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1652 else if (*name == '&' || *name == '`' || *name == '\'') {
1653 PL_sawampersand = TRUE;
1658 else if (len == 3 && sv_type == SVt_PVAV
1659 && strnEQ(name, "ISA", 3)
1660 && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
1661 gv_magicalize_isa(gv);
1664 } else if (no_init) {
1667 } else if (no_expand && SvROK(gv)) {
1672 /* Adding a new symbol.
1673 Unless of course there was already something non-GV here, in which case
1674 we want to behave as if there was always a GV here, containing some sort
1676 Otherwise we run the risk of creating things like GvIO, which can cause
1677 subtle bugs. eg the one that tripped up SQL::Translator */
1679 faking_it = SvOK(gv);
1681 if (add & GV_ADDWARN)
1682 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "Had to create %"SVf" unexpectedly",
1683 SVfARG(newSVpvn_flags(nambeg, name_end-nambeg, SVs_TEMP | is_utf8 )));
1684 gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8);
1686 if ( isIDFIRST_lazy_if(name, is_utf8)
1687 && ! (isLEXWARN_on ? ckWARN(WARN_ONCE) : (PL_dowarn & G_WARN_ON ) ) )
1690 /* set up magic where warranted */
1691 if (stash != PL_defstash) { /* not the main stash */
1692 /* We only have to check for three names here: EXPORT, ISA
1693 and VERSION. All the others apply only to the main stash or to
1694 CORE (which is checked right after this). */
1696 const char * const name2 = name + 1;
1699 if (strnEQ(name2, "XPORT", 5))
1703 if (strEQ(name2, "SA"))
1704 gv_magicalize_isa(gv);
1707 if (strEQ(name2, "ERSION"))
1713 goto add_magical_gv;
1716 if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
1717 /* Avoid null warning: */
1718 const char * const stashname = HvNAME(stash); assert(stashname);
1719 if (strnEQ(stashname, "CORE", 4))
1720 S_maybe_add_coresub(aTHX_ 0, gv, name, len);
1727 /* Nothing else to do.
1728 The compiler will probably turn the switch statement into a
1729 branch table. Make sure we avoid even that small overhead for
1730 the common case of lower case variable names. */
1734 const char * const name2 = name + 1;
1737 if (strEQ(name2, "RGV")) {
1738 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1740 else if (strEQ(name2, "RGVOUT")) {
1745 if (strnEQ(name2, "XPORT", 5))
1749 if (strEQ(name2, "SA")) {
1750 gv_magicalize_isa(gv);
1754 if (strEQ(name2, "IG")) {
1757 if (!PL_psig_name) {
1758 Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
1759 Newxz(PL_psig_pend, SIG_SIZE, int);
1760 PL_psig_ptr = PL_psig_name + SIG_SIZE;
1762 /* I think that the only way to get here is to re-use an
1763 embedded perl interpreter, where the previous
1764 use didn't clean up fully because
1765 PL_perl_destruct_level was 0. I'm not sure that we
1766 "support" that, in that I suspect in that scenario
1767 there are sufficient other garbage values left in the
1768 interpreter structure that something else will crash
1769 before we get here. I suspect that this is one of
1770 those "doctor, it hurts when I do this" bugs. */
1771 Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
1772 Zero(PL_psig_pend, SIG_SIZE, int);
1776 hv_magic(hv, NULL, PERL_MAGIC_sig);
1777 for (i = 1; i < SIG_SIZE; i++) {
1778 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1780 sv_setsv(*init, &PL_sv_undef);
1785 if (strEQ(name2, "ERSION"))
1788 case '\003': /* $^CHILD_ERROR_NATIVE */
1789 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1792 case '\005': /* $^ENCODING */
1793 if (strEQ(name2, "NCODING"))
1796 case '\007': /* $^GLOBAL_PHASE */
1797 if (strEQ(name2, "LOBAL_PHASE"))
1800 case '\015': /* $^MATCH */
1801 if (strEQ(name2, "ATCH"))
1803 case '\017': /* $^OPEN */
1804 if (strEQ(name2, "PEN"))
1807 case '\020': /* $^PREMATCH $^POSTMATCH */
1808 if (strEQ(name2, "REMATCH") || strEQ(name2, "OSTMATCH"))
1811 case '\024': /* ${^TAINT} */
1812 if (strEQ(name2, "AINT"))
1815 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
1816 if (strEQ(name2, "NICODE"))
1818 if (strEQ(name2, "TF8LOCALE"))
1820 if (strEQ(name2, "TF8CACHE"))
1823 case '\027': /* $^WARNING_BITS */
1824 if (strEQ(name2, "ARNING_BITS"))
1837 /* Ensures that we have an all-digit variable, ${"1foo"} fails
1839 /* This snippet is taken from is_gv_magical */
1840 const char *end = name + len;
1841 while (--end > name) {
1842 if (!isDIGIT(*end)) goto add_magical_gv;
1849 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1850 be case '\0' in this switch statement (ie a default case) */
1856 sv_type == SVt_PVAV ||
1857 sv_type == SVt_PVHV ||
1858 sv_type == SVt_PVCV ||
1859 sv_type == SVt_PVFM ||
1861 )) { PL_sawampersand = TRUE; }
1865 sv_setpv(GvSVn(gv),PL_chopset);
1869 #ifdef COMPLEX_STATUS
1870 SvUPGRADE(GvSVn(gv), SVt_PVLV);
1876 /* If %! has been used, automatically load Errno.pm. */
1878 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1880 /* magicalization must be done before require_tie_mod is called */
1881 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1883 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1885 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1891 GvMULTI_on(gv); /* no used once warnings here */
1893 AV* const av = GvAVn(gv);
1894 SV* const avc = (*name == '+') ? MUTABLE_SV(av) : NULL;
1896 sv_magic(MUTABLE_SV(av), avc, PERL_MAGIC_regdata, NULL, 0);
1897 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1899 SvREADONLY_on(GvSVn(gv));
1902 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1904 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1906 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1913 if (sv_type == SVt_PV)
1914 /* diag_listed_as: $* is no longer supported */
1915 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1916 "$%c is no longer supported", *name);
1919 sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
1922 case '\010': /* $^H */
1924 HV *const hv = GvHVn(gv);
1925 hv_magic(hv, NULL, PERL_MAGIC_hints);
1929 if ((sv_type == SVt_PV || sv_type == SVt_PVGV)
1930 && FEATURE_ARYBASE_IS_ENABLED) {
1931 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1932 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1935 else goto magicalize;
1937 case '\023': /* $^S */
1939 SvREADONLY_on(GvSVn(gv));
1963 case '\001': /* $^A */
1964 case '\003': /* $^C */
1965 case '\004': /* $^D */
1966 case '\005': /* $^E */
1967 case '\006': /* $^F */
1968 case '\011': /* $^I, NOT \t in EBCDIC */
1969 case '\016': /* $^N */
1970 case '\017': /* $^O */
1971 case '\020': /* $^P */
1972 case '\024': /* $^T */
1973 case '\027': /* $^W */
1975 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1978 case '\014': /* $^L */
1979 sv_setpvs(GvSVn(gv),"\f");
1980 PL_formfeed = GvSVn(gv);
1983 sv_setpvs(GvSVn(gv),"\034");
1987 SV * const sv = GvSV(gv);
1988 if (!sv_derived_from(PL_patchlevel, "version"))
1989 upg_version(PL_patchlevel, TRUE);
1990 GvSV(gv) = vnumify(PL_patchlevel);
1991 SvREADONLY_on(GvSV(gv));
1995 case '\026': /* $^V */
1997 SV * const sv = GvSV(gv);
1998 GvSV(gv) = new_version(PL_patchlevel);
1999 SvREADONLY_on(GvSV(gv));
2007 if (GvAV(gv) || GvHV(gv) || GvIO(gv) || GvCV(gv) || (
2008 GvSV(gv) && (SvOK(GvSV(gv)) || SvMAGICAL(GvSV(gv)))
2010 (void)hv_store(stash,name,len,(SV *)gv,0);
2011 else SvREFCNT_dec(gv), gv = NULL;
2013 if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type);
2018 Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2021 const HV * const hv = GvSTASH(gv);
2023 PERL_ARGS_ASSERT_GV_FULLNAME4;
2025 sv_setpv(sv, prefix ? prefix : "");
2027 if (hv && (name = HvNAME(hv))) {
2028 const STRLEN len = HvNAMELEN(hv);
2029 if (keepmain || strnNE(name, "main", len)) {
2030 sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES);
2034 else sv_catpvs(sv,"__ANON__::");
2035 sv_catsv(sv,sv_2mortal(newSVhek(GvNAME_HEK(gv))));
2039 Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2041 const GV * const egv = GvEGVx(gv);
2043 PERL_ARGS_ASSERT_GV_EFULLNAME4;
2045 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
2049 Perl_gv_check(pTHX_ const HV *stash)
2054 PERL_ARGS_ASSERT_GV_CHECK;
2056 if (!HvARRAY(stash))
2058 for (i = 0; i <= (I32) HvMAX(stash); i++) {
2060 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
2063 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
2064 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
2066 if (hv != PL_defstash && hv != stash)
2067 gv_check(hv); /* nested package */
2069 else if ( *HeKEY(entry) != '_'
2070 && isIDFIRST_lazy_if(HeKEY(entry), HeUTF8(entry)) ) {
2072 gv = MUTABLE_GV(HeVAL(entry));
2073 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
2076 CopLINE_set(PL_curcop, GvLINE(gv));
2078 CopFILE(PL_curcop) = (char *)file; /* set for warning */
2080 CopFILEGV(PL_curcop)
2081 = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
2083 Perl_warner(aTHX_ packWARN(WARN_ONCE),
2084 "Name \"%"HEKf"::%"HEKf
2085 "\" used only once: possible typo",
2086 HEKfARG(HvNAME_HEK(stash)),
2087 HEKfARG(GvNAME_HEK(gv)));
2094 Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags)
2097 PERL_ARGS_ASSERT_NEWGVGEN_FLAGS;
2099 return gv_fetchpv(Perl_form(aTHX_ "%"SVf"::_GEN_%ld",
2100 SVfARG(newSVpvn_flags(pack, strlen(pack),
2106 /* hopefully this is only called on local symbol table entries */
2109 Perl_gp_ref(pTHX_ GP *gp)
2117 /* If the GP they asked for a reference to contains
2118 a method cache entry, clear it first, so that we
2119 don't infect them with our cached entry */
2120 SvREFCNT_dec(gp->gp_cv);
2129 Perl_gp_free(pTHX_ GV *gv)
2135 if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
2137 if (gp->gp_refcnt == 0) {
2138 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2139 "Attempt to free unreferenced glob pointers"
2140 pTHX__FORMAT pTHX__VALUE);
2143 if (--gp->gp_refcnt > 0) {
2144 if (gp->gp_egv == gv)
2151 /* Copy and null out all the glob slots, so destructors do not see
2153 HEK * const file_hek = gp->gp_file_hek;
2154 SV * const sv = gp->gp_sv;
2155 AV * const av = gp->gp_av;
2156 HV * const hv = gp->gp_hv;
2157 IO * const io = gp->gp_io;
2158 CV * const cv = gp->gp_cv;
2159 CV * const form = gp->gp_form;
2161 gp->gp_file_hek = NULL;
2170 unshare_hek(file_hek);
2174 /* FIXME - another reference loop GV -> symtab -> GV ?
2175 Somehow gp->gp_hv can end up pointing at freed garbage. */
2176 if (hv && SvTYPE(hv) == SVt_PVHV) {
2177 const HEK *hvname_hek = HvNAME_HEK(hv);
2178 if (PL_stashcache && hvname_hek)
2179 (void)hv_delete(PL_stashcache, HEK_KEY(hvname_hek),
2180 (HEK_UTF8(hvname_hek) ? -HEK_LEN(hvname_hek) : HEK_LEN(hvname_hek)),
2188 if (!gp->gp_file_hek
2194 && !gp->gp_form) break;
2196 if (--attempts == 0) {
2198 "panic: gp_free failed to free glob pointer - "
2199 "something is repeatedly re-creating entries"
2209 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
2211 AMT * const amtp = (AMT*)mg->mg_ptr;
2212 PERL_UNUSED_ARG(sv);
2214 PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
2216 if (amtp && AMT_AMAGIC(amtp)) {
2218 for (i = 1; i < NofAMmeth; i++) {
2219 CV * const cv = amtp->table[i];
2221 SvREFCNT_dec(MUTABLE_SV(cv));
2222 amtp->table[i] = NULL;
2229 /* Updates and caches the CV's */
2231 * 1 on success and there is some overload
2232 * 0 if there is no overload
2233 * -1 if some error occurred and it couldn't croak
2237 Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
2240 MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2242 const struct mro_meta* stash_meta = HvMROMETA(stash);
2245 PERL_ARGS_ASSERT_GV_AMUPDATE;
2247 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2249 const AMT * const amtp = (AMT*)mg->mg_ptr;
2250 if (amtp->was_ok_sub == newgen) {
2251 return AMT_OVERLOADED(amtp) ? 1 : 0;
2253 sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
2256 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
2259 amt.was_ok_sub = newgen;
2260 amt.fallback = AMGfallNO;
2264 int filled = 0, have_ovl = 0;
2267 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
2269 /* Try to find via inheritance. */
2270 GV *gv = gv_fetchmeth_pvn(stash, PL_AMG_names[0], 2, -1, 0);
2271 SV * const sv = gv ? GvSV(gv) : NULL;
2276 if (!gv_fetchmeth_pvn(stash, "((", 2, -1, 0))
2277 lim = DESTROY_amg; /* Skip overloading entries. */
2279 #ifdef PERL_DONT_CREATE_GVSV
2281 NOOP; /* Equivalent to !SvTRUE and !SvOK */
2284 else if (SvTRUE(sv))
2285 amt.fallback=AMGfallYES;
2287 amt.fallback=AMGfallNEVER;
2289 for (i = 1; i < lim; i++)
2290 amt.table[i] = NULL;
2291 for (; i < NofAMmeth; i++) {
2292 const char * const cooky = PL_AMG_names[i];
2293 /* Human-readable form, for debugging: */
2294 const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
2295 const STRLEN l = PL_AMG_namelens[i];
2297 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
2298 cp, HvNAME_get(stash)) );
2299 /* don't fill the cache while looking up!
2300 Creation of inheritance stubs in intermediate packages may
2301 conflict with the logic of runtime method substitution.
2302 Indeed, for inheritance A -> B -> C, if C overloads "+0",
2303 then we could have created stubs for "(+0" in A and C too.
2304 But if B overloads "bool", we may want to use it for
2305 numifying instead of C's "+0". */
2306 if (i >= DESTROY_amg)
2307 gv = Perl_gv_fetchmeth_pvn_autoload(aTHX_ stash, cooky, l, 0, 0);
2308 else /* Autoload taken care of below */
2309 gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
2311 if (gv && (cv = GvCV(gv))) {
2312 if(GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")){
2313 const char * const hvname = HvNAME_get(GvSTASH(CvGV(cv)));
2314 if (hvname && HEK_LEN(HvNAME_HEK(GvSTASH(CvGV(cv)))) == 8
2315 && strEQ(hvname, "overload")) {
2316 /* This is a hack to support autoloading..., while
2317 knowing *which* methods were declared as overloaded. */
2318 /* GvSV contains the name of the method. */
2320 SV *gvsv = GvSV(gv);
2322 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
2323 "\" for overloaded \"%s\" in package \"%.256s\"\n",
2324 (void*)GvSV(gv), cp, HvNAME(stash)) );
2325 if (!gvsv || !SvPOK(gvsv)
2326 || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0)))
2328 /* Can be an import stub (created by "can"). */
2333 const SV * const name = (gvsv && SvPOK(gvsv))
2335 : newSVpvs_flags("???", SVs_TEMP);
2336 /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */
2337 Perl_croak(aTHX_ "%s method \"%"SVf256
2338 "\" overloading \"%s\" "\
2339 "in package \"%"HEKf256"\"",
2340 (GvCVGEN(gv) ? "Stub found while resolving"
2348 cv = GvCV(gv = ngv);
2351 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
2352 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
2353 GvNAME(CvGV(cv))) );
2355 if (i < DESTROY_amg)
2357 } else if (gv) { /* Autoloaded... */
2358 cv = MUTABLE_CV(gv);
2361 amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
2364 AMT_AMAGIC_on(&amt);
2366 AMT_OVERLOADED_on(&amt);
2367 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2368 (char*)&amt, sizeof(AMT));
2372 /* Here we have no table: */
2374 AMT_AMAGIC_off(&amt);
2375 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2376 (char*)&amt, sizeof(AMTS));
2382 Perl_gv_handler(pTHX_ HV *stash, I32 id)
2388 struct mro_meta* stash_meta;
2390 if (!stash || !HvNAME_get(stash))
2393 stash_meta = HvMROMETA(stash);
2394 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2396 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2399 /* If we're looking up a destructor to invoke, we must avoid
2400 * that Gv_AMupdate croaks, because we might be dying already */
2401 if (Gv_AMupdate(stash, cBOOL(id == DESTROY_amg)) == -1) {
2402 /* and if it didn't found a destructor, we fall back
2403 * to a simpler method that will only look for the
2404 * destructor instead of the whole magic */
2405 if (id == DESTROY_amg) {
2406 GV * const gv = gv_fetchmethod(stash, "DESTROY");
2412 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2415 amtp = (AMT*)mg->mg_ptr;
2416 if ( amtp->was_ok_sub != newgen )
2418 if (AMT_AMAGIC(amtp)) {
2419 CV * const ret = amtp->table[id];
2420 if (ret && isGV(ret)) { /* Autoloading stab */
2421 /* Passing it through may have resulted in a warning
2422 "Inherited AUTOLOAD for a non-method deprecated", since
2423 our caller is going through a function call, not a method call.
2424 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
2425 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
2437 /* Implement tryAMAGICun_MG macro.
2438 Do get magic, then see if the stack arg is overloaded and if so call it.
2440 AMGf_set return the arg using SETs rather than assigning to
2442 AMGf_numeric apply sv_2num to the stack arg.
2446 Perl_try_amagic_un(pTHX_ int method, int flags) {
2450 SV* const arg = TOPs;
2454 if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
2455 AMGf_noright | AMGf_unary))) {
2456 if (flags & AMGf_set) {
2461 if (SvPADMY(TARG)) {
2462 sv_setsv(TARG, tmpsv);
2472 if ((flags & AMGf_numeric) && SvROK(arg))
2478 /* Implement tryAMAGICbin_MG macro.
2479 Do get magic, then see if the two stack args are overloaded and if so
2482 AMGf_set return the arg using SETs rather than assigning to
2484 AMGf_assign op may be called as mutator (eg +=)
2485 AMGf_numeric apply sv_2num to the stack arg.
2489 Perl_try_amagic_bin(pTHX_ int method, int flags) {
2492 SV* const left = TOPm1s;
2493 SV* const right = TOPs;
2499 if (SvAMAGIC(left) || SvAMAGIC(right)) {
2500 SV * const tmpsv = amagic_call(left, right, method,
2501 ((flags & AMGf_assign) && opASSIGN ? AMGf_assign: 0));
2503 if (flags & AMGf_set) {
2510 if (opASSIGN || SvPADMY(TARG)) {
2511 sv_setsv(TARG, tmpsv);
2521 if(left==right && SvGMAGICAL(left)) {
2522 SV * const left = sv_newmortal();
2524 /* Print the uninitialized warning now, so it includes the vari-
2527 if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right);
2528 sv_setsv_flags(left, &PL_sv_no, 0);
2530 else sv_setsv_flags(left, right, 0);
2533 if (flags & AMGf_numeric) {
2535 *(sp-1) = sv_2num(TOPm1s);
2537 *sp = sv_2num(right);
2543 Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
2546 PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
2548 while (SvAMAGIC(ref) &&
2549 (tmpsv = amagic_call(ref, &PL_sv_undef, method,
2550 AMGf_noright | AMGf_unary))) {
2552 Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
2553 if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
2554 /* Bail out if it returns us the same reference. */
2559 return tmpsv ? tmpsv : ref;
2563 Perl_amagic_is_enabled(pTHX_ int method)
2565 SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
2567 assert(PL_curcop->cop_hints & HINT_NO_AMAGIC);
2569 if ( !lex_mask || !SvOK(lex_mask) )
2570 /* overloading lexically disabled */
2572 else if ( lex_mask && SvPOK(lex_mask) ) {
2573 /* we have an entry in the hints hash, check if method has been
2574 * masked by overloading.pm */
2576 const int offset = method / 8;
2577 const int bit = method % 8;
2578 char *pv = SvPV(lex_mask, len);
2580 /* Bit set, so this overloading operator is disabled */
2581 if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
2588 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
2593 CV **cvp=NULL, **ocvp=NULL;
2594 AMT *amtp=NULL, *oamtp=NULL;
2595 int off = 0, off1, lr = 0, notfound = 0;
2596 int postpr = 0, force_cpy = 0;
2597 int assign = AMGf_assign & flags;
2598 const int assignshift = assign ? 1 : 0;
2599 int use_default_op = 0;
2605 PERL_ARGS_ASSERT_AMAGIC_CALL;
2607 if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
2608 if (!amagic_is_enabled(method)) return NULL;
2611 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
2612 && (stash = SvSTASH(SvRV(left))) && Gv_AMG(stash)
2613 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2614 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2615 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
2617 && ((cv = cvp[off=method+assignshift])
2618 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2624 cv = cvp[off=method])))) {
2625 lr = -1; /* Call method for left argument */
2627 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
2630 /* look for substituted methods */
2631 /* In all the covered cases we should be called with assign==0. */
2635 if ((cv = cvp[off=add_ass_amg])
2636 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
2637 right = &PL_sv_yes; lr = -1; assign = 1;
2642 if ((cv = cvp[off = subtr_ass_amg])
2643 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
2644 right = &PL_sv_yes; lr = -1; assign = 1;
2648 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
2651 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
2654 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
2657 (void)((cv = cvp[off=bool__amg])
2658 || (cv = cvp[off=numer_amg])
2659 || (cv = cvp[off=string_amg]));
2666 * SV* ref causes confusion with the interpreter variable of
2669 SV* const tmpRef=SvRV(left);
2670 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
2672 * Just to be extra cautious. Maybe in some
2673 * additional cases sv_setsv is safe, too.
2675 SV* const newref = newSVsv(tmpRef);
2676 SvOBJECT_on(newref);
2677 /* No need to do SvAMAGIC_on here, as SvAMAGIC macros
2678 delegate to the stash. */
2679 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
2685 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
2686 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
2687 SV* const nullsv=sv_2mortal(newSViv(0));
2689 SV* const lessp = amagic_call(left,nullsv,
2690 lt_amg,AMGf_noright);
2691 logic = SvTRUE(lessp);
2693 SV* const lessp = amagic_call(left,nullsv,
2694 ncmp_amg,AMGf_noright);
2695 logic = (SvNV(lessp) < 0);
2698 if (off==subtr_amg) {
2709 if ((cv = cvp[off=subtr_amg])) {
2711 left = sv_2mortal(newSViv(0));
2716 case iter_amg: /* XXXX Eventually should do to_gv. */
2717 case ftest_amg: /* XXXX Eventually should do to_gv. */
2720 return NULL; /* Delegate operation to standard mechanisms. */
2728 return left; /* Delegate operation to standard mechanisms. */
2733 if (!cv) goto not_found;
2734 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
2735 && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash)
2736 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2737 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2738 ? (amtp = (AMT*)mg->mg_ptr)->table
2740 && ((cv = cvp[off=method+assignshift])
2741 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2747 cv = cvp[off=method])))) { /* Method for right
2750 } else if (((cvp && amtp->fallback > AMGfallNEVER)
2751 || (ocvp && oamtp->fallback > AMGfallNEVER))
2752 && !(flags & AMGf_unary)) {
2753 /* We look for substitution for
2754 * comparison operations and
2756 if (method==concat_amg || method==concat_ass_amg
2757 || method==repeat_amg || method==repeat_ass_amg) {
2758 return NULL; /* Delegate operation to string conversion */
2780 if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
2784 if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
2794 not_found: /* No method found, either report or croak */
2802 return left; /* Delegate operation to standard mechanisms. */
2805 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
2806 notfound = 1; lr = -1;
2807 } else if (cvp && (cv=cvp[nomethod_amg])) {
2808 notfound = 1; lr = 1;
2809 } else if ((use_default_op =
2810 (!ocvp || oamtp->fallback >= AMGfallYES)
2811 && (!cvp || amtp->fallback >= AMGfallYES))
2813 /* Skip generating the "no method found" message. */
2817 if (off==-1) off=method;
2818 msg = sv_2mortal(Perl_newSVpvf(aTHX_
2819 "Operation \"%s\": no method found,%sargument %s%"SVf"%s%"SVf,
2820 AMG_id2name(method + assignshift),
2821 (flags & AMGf_unary ? " " : "\n\tleft "),
2823 "in overloaded package ":
2824 "has no overloaded magic",
2826 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))):
2829 ",\n\tright argument in overloaded package ":
2832 : ",\n\tright argument has no overloaded magic"),
2834 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))):
2835 SVfARG(&PL_sv_no)));
2836 if (use_default_op) {
2837 DEBUG_o( Perl_deb(aTHX_ "%"SVf, SVfARG(msg)) );
2839 Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
2843 force_cpy = force_cpy || assign;
2848 DEBUG_o(Perl_deb(aTHX_
2849 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %"SVf"%s\n",
2851 method+assignshift==off? "" :
2853 method+assignshift==off? "" :
2854 AMG_id2name(method+assignshift),
2855 method+assignshift==off? "" : "\")",
2856 flags & AMGf_unary? "" :
2857 lr==1 ? " for right argument": " for left argument",
2858 flags & AMGf_unary? " for argument" : "",
2859 stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)),
2860 fl? ",\n\tassignment variant used": "") );
2863 /* Since we use shallow copy during assignment, we need
2864 * to dublicate the contents, probably calling user-supplied
2865 * version of copy operator
2867 /* We need to copy in following cases:
2868 * a) Assignment form was called.
2869 * assignshift==1, assign==T, method + 1 == off
2870 * b) Increment or decrement, called directly.
2871 * assignshift==0, assign==0, method + 0 == off
2872 * c) Increment or decrement, translated to assignment add/subtr.
2873 * assignshift==0, assign==T,
2875 * d) Increment or decrement, translated to nomethod.
2876 * assignshift==0, assign==0,
2878 * e) Assignment form translated to nomethod.
2879 * assignshift==1, assign==T, method + 1 != off
2882 /* off is method, method+assignshift, or a result of opcode substitution.
2883 * In the latter case assignshift==0, so only notfound case is important.
2885 if ( (lr == -1) && ( ( (method + assignshift == off)
2886 && (assign || (method == inc_amg) || (method == dec_amg)))
2889 /* newSVsv does not behave as advertised, so we copy missing
2890 * information by hand */
2891 SV *tmpRef = SvRV(left);
2893 if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
2894 SvRV_set(left, rv_copy);
2896 SvREFCNT_dec(tmpRef);
2904 const bool oldcatch = CATCH_GET;
2907 Zero(&myop, 1, BINOP);
2908 myop.op_last = (OP *) &myop;
2909 myop.op_next = NULL;
2910 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
2912 PUSHSTACKi(PERLSI_OVERLOAD);
2915 PL_op = (OP *) &myop;
2916 if (PERLDB_SUB && PL_curstash != PL_debstash)
2917 PL_op->op_private |= OPpENTERSUB_DB;
2919 Perl_pp_pushmark(aTHX);
2921 EXTEND(SP, notfound + 5);
2922 PUSHs(lr>0? right: left);
2923 PUSHs(lr>0? left: right);
2924 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
2926 PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
2927 AMG_id2namelen(method + assignshift), SVs_TEMP));
2929 PUSHs(MUTABLE_SV(cv));
2932 if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
2940 CATCH_SET(oldcatch);
2947 ans=SvIV(res)<=0; break;
2950 ans=SvIV(res)<0; break;
2953 ans=SvIV(res)>=0; break;
2956 ans=SvIV(res)>0; break;
2959 ans=SvIV(res)==0; break;
2962 ans=SvIV(res)!=0; break;
2965 SvSetSV(left,res); return left;
2967 ans=!SvTRUE(res); break;
2972 } else if (method==copy_amg) {
2974 Perl_croak(aTHX_ "Copy method did not return a reference");
2976 return SvREFCNT_inc(SvRV(res));
2984 Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
2989 PERL_ARGS_ASSERT_GV_NAME_SET;
2992 Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
2994 if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
2995 unshare_hek(GvNAME_HEK(gv));
2998 PERL_HASH(hash, name, len);
2999 GvNAME_HEK(gv) = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash);
3003 =for apidoc gv_try_downgrade
3005 If the typeglob C<gv> can be expressed more succinctly, by having
3006 something other than a real GV in its place in the stash, replace it
3007 with the optimised form. Basic requirements for this are that C<gv>
3008 is a real typeglob, is sufficiently ordinary, and is only referenced
3009 from its package. This function is meant to be used when a GV has been
3010 looked up in part to see what was there, causing upgrading, but based
3011 on what was found it turns out that the real GV isn't required after all.
3013 If C<gv> is a completely empty typeglob, it is deleted from the stash.
3015 If C<gv> is a typeglob containing only a sufficiently-ordinary constant
3016 sub, the typeglob is replaced with a scalar-reference placeholder that
3017 more compactly represents the same thing.
3023 Perl_gv_try_downgrade(pTHX_ GV *gv)
3029 PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
3031 /* XXX Why and where does this leave dangling pointers during global
3033 if (PL_phase == PERL_PHASE_DESTRUCT) return;
3035 if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
3036 !SvOBJECT(gv) && !SvREADONLY(gv) &&
3037 isGV_with_GP(gv) && GvGP(gv) &&
3038 !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
3039 !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
3040 GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
3042 if (SvMAGICAL(gv)) {
3044 /* only backref magic is allowed */
3045 if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
3047 for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
3048 if (mg->mg_type != PERL_MAGIC_backref)
3054 HEK *gvnhek = GvNAME_HEK(gv);
3055 (void)hv_delete(stash, HEK_KEY(gvnhek),
3056 HEK_UTF8(gvnhek) ? -HEK_LEN(gvnhek) : HEK_LEN(gvnhek), G_DISCARD);
3057 } else if (GvMULTI(gv) && cv &&
3058 !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
3059 CvSTASH(cv) == stash && CvGV(cv) == gv &&
3060 CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
3061 !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
3062 (namehek = GvNAME_HEK(gv)) &&
3063 (gvp = hv_fetch(stash, HEK_KEY(namehek),
3064 HEK_LEN(namehek)*(HEK_UTF8(namehek) ? -1 : 1), 0)) &&
3066 SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
3070 SvFLAGS(gv) = SVt_IV|SVf_ROK;
3071 SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
3072 STRUCT_OFFSET(XPVIV, xiv_iv));
3073 SvRV_set(gv, value);
3080 core_xsub(pTHX_ CV* cv)
3083 "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
3089 * c-indentation-style: bsd
3091 * indent-tabs-mode: nil
3094 * ex: set ts=8 sts=4 sw=4 et: