This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
handy.h: Convert XDIGIT_VALUE to branchless
[perl5.git] / gv.c
1 /*    gv.c
2  *
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
5  *
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.
8  *
9  */
10
11 /*
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,'
17  * laughed Pippin.
18  *
19  *     [p.599 of _The Lord of the Rings_, III/xi: "The Palantír"]
20  */
21
22 /*
23 =head1 GV Functions
24 A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
25 It is a structure that holds a pointer to a scalar, an array, a hash etc,
26 corresponding to $foo, @foo, %foo.
27
28 GVs are usually found as values in stashes (symbol table hashes) where
29 Perl stores its global variables.
30
31 =cut
32 */
33
34 #include "EXTERN.h"
35 #define PERL_IN_GV_C
36 #include "perl.h"
37 #include "overload.inc"
38 #include "keywords.h"
39 #include "feature.h"
40
41 static const char S_autoload[] = "AUTOLOAD";
42 #define S_autolen (sizeof("AUTOLOAD")-1)
43
44 GV *
45 Perl_gv_add_by_type(pTHX_ GV *gv, svtype type)
46 {
47     SV **where;
48
49     if (
50         !gv
51      || (
52             SvTYPE((const SV *)gv) != SVt_PVGV
53          && SvTYPE((const SV *)gv) != SVt_PVLV
54         )
55     ) {
56         const char *what;
57         if (type == SVt_PVIO) {
58             /*
59              * if it walks like a dirhandle, then let's assume that
60              * this is a dirhandle.
61              */
62             what = OP_IS_DIRHOP(PL_op->op_type) ?
63                 "dirhandle" : "filehandle";
64         } else if (type == SVt_PVHV) {
65             what = "hash";
66         } else {
67             what = type == SVt_PVAV ? "array" : "scalar";
68         }
69         /* diag_listed_as: Bad symbol for filehandle */
70         Perl_croak(aTHX_ "Bad symbol for %s", what);
71     }
72
73     if (type == SVt_PVHV) {
74         where = (SV **)&GvHV(gv);
75     } else if (type == SVt_PVAV) {
76         where = (SV **)&GvAV(gv);
77     } else if (type == SVt_PVIO) {
78         where = (SV **)&GvIOp(gv);
79     } else {
80         where = &GvSV(gv);
81     }
82
83     if (!*where)
84     {
85         *where = newSV_type(type);
86             if (type == SVt_PVAV
87              && memEQs(GvNAME(gv), GvNAMELEN(gv), "ISA"))
88             sv_magic(*where, (SV *)gv, PERL_MAGIC_isa, NULL, 0);
89     }
90     return gv;
91 }
92
93 GV *
94 Perl_gv_fetchfile(pTHX_ const char *name)
95 {
96     PERL_ARGS_ASSERT_GV_FETCHFILE;
97     return gv_fetchfile_flags(name, strlen(name), 0);
98 }
99
100 GV *
101 Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
102                         const U32 flags)
103 {
104     char smallbuf[128];
105     char *tmpbuf;
106     const STRLEN tmplen = namelen + 2;
107     GV *gv;
108
109     PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS;
110     PERL_UNUSED_ARG(flags);
111
112     if (!PL_defstash)
113         return NULL;
114
115     if (tmplen <= sizeof smallbuf)
116         tmpbuf = smallbuf;
117     else
118         Newx(tmpbuf, tmplen, char);
119     /* This is where the debugger's %{"::_<$filename"} hash is created */
120     tmpbuf[0] = '_';
121     tmpbuf[1] = '<';
122     memcpy(tmpbuf + 2, name, namelen);
123     gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
124     if (!isGV(gv)) {
125         gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
126 #ifdef PERL_DONT_CREATE_GVSV
127         GvSV(gv) = newSVpvn(name, namelen);
128 #else
129         sv_setpvn(GvSV(gv), name, namelen);
130 #endif
131     }
132     if (PERLDB_LINE_OR_SAVESRC && !GvAV(gv))
133             hv_magic(GvHVn(gv), GvAVn(gv), PERL_MAGIC_dbfile);
134     if (tmpbuf != smallbuf)
135         Safefree(tmpbuf);
136     return gv;
137 }
138
139 /*
140 =for apidoc gv_const_sv
141
142 If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
143 inlining, or C<gv> is a placeholder reference that would be promoted to such
144 a typeglob, then returns the value returned by the sub.  Otherwise, returns
145 C<NULL>.
146
147 =cut
148 */
149
150 SV *
151 Perl_gv_const_sv(pTHX_ GV *gv)
152 {
153     PERL_ARGS_ASSERT_GV_CONST_SV;
154     PERL_UNUSED_CONTEXT;
155
156     if (SvTYPE(gv) == SVt_PVGV)
157         return cv_const_sv(GvCVu(gv));
158     return SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVAV && SvTYPE(SvRV(gv)) != SVt_PVCV ? SvRV(gv) : NULL;
159 }
160
161 GP *
162 Perl_newGP(pTHX_ GV *const gv)
163 {
164     GP *gp;
165     U32 hash;
166     const char *file;
167     STRLEN len;
168 #ifndef USE_ITHREADS
169     GV *filegv;
170 #endif
171     dVAR;
172
173     PERL_ARGS_ASSERT_NEWGP;
174     Newxz(gp, 1, GP);
175     gp->gp_egv = gv; /* allow compiler to reuse gv after this */
176 #ifndef PERL_DONT_CREATE_GVSV
177     gp->gp_sv = newSV(0);
178 #endif
179
180     /* PL_curcop may be null here.  E.g.,
181         INIT { bless {} and exit }
182        frees INIT before looking up DESTROY (and creating *DESTROY)
183     */
184     if (PL_curcop) {
185         gp->gp_line = CopLINE(PL_curcop); /* 0 otherwise Newxz */
186 #ifdef USE_ITHREADS
187         if (CopFILE(PL_curcop)) {
188             file = CopFILE(PL_curcop);
189             len = strlen(file);
190         }
191 #else
192         filegv = CopFILEGV(PL_curcop);
193         if (filegv) {
194             file = GvNAME(filegv)+2;
195             len = GvNAMELEN(filegv)-2;
196         }
197 #endif
198         else goto no_file;
199     }
200     else {
201         no_file:
202         file = "";
203         len = 0;
204     }
205
206     PERL_HASH(hash, file, len);
207     gp->gp_file_hek = share_hek(file, len, hash);
208     gp->gp_refcnt = 1;
209
210     return gp;
211 }
212
213 /* Assign CvGV(cv) = gv, handling weak references.
214  * See also S_anonymise_cv_maybe */
215
216 void
217 Perl_cvgv_set(pTHX_ CV* cv, GV* gv)
218 {
219     GV * const oldgv = CvNAMED(cv) ? NULL : SvANY(cv)->xcv_gv_u.xcv_gv;
220     HEK *hek;
221     PERL_ARGS_ASSERT_CVGV_SET;
222
223     if (oldgv == gv)
224         return;
225
226     if (oldgv) {
227         if (CvCVGV_RC(cv)) {
228             SvREFCNT_dec_NN(oldgv);
229             CvCVGV_RC_off(cv);
230         }
231         else {
232             sv_del_backref(MUTABLE_SV(oldgv), MUTABLE_SV(cv));
233         }
234     }
235     else if ((hek = CvNAME_HEK(cv))) {
236         unshare_hek(hek);
237         CvLEXICAL_off(cv);
238     }
239
240     CvNAMED_off(cv);
241     SvANY(cv)->xcv_gv_u.xcv_gv = gv;
242     assert(!CvCVGV_RC(cv));
243
244     if (!gv)
245         return;
246
247     if (isGV_with_GP(gv) && GvGP(gv) && (GvCV(gv) == cv || GvFORM(gv) == cv))
248         Perl_sv_add_backref(aTHX_ MUTABLE_SV(gv), MUTABLE_SV(cv));
249     else {
250         CvCVGV_RC_on(cv);
251         SvREFCNT_inc_simple_void_NN(gv);
252     }
253 }
254
255 /* Convert CvSTASH + CvNAME_HEK into a GV.  Conceptually, all subs have a
256    GV, but for efficiency that GV may not in fact exist.  This function,
257    called by CvGV, reifies it. */
258
259 GV *
260 Perl_cvgv_from_hek(pTHX_ CV *cv)
261 {
262     GV *gv;
263     SV **svp;
264     PERL_ARGS_ASSERT_CVGV_FROM_HEK;
265     assert(SvTYPE(cv) == SVt_PVCV);
266     if (!CvSTASH(cv)) return NULL;
267     ASSUME(CvNAME_HEK(cv));
268     svp = hv_fetchhek(CvSTASH(cv), CvNAME_HEK(cv), 0);
269     gv = MUTABLE_GV(svp && *svp ? *svp : newSV(0));
270     if (!isGV(gv))
271         gv_init_pvn(gv, CvSTASH(cv), HEK_KEY(CvNAME_HEK(cv)),
272                 HEK_LEN(CvNAME_HEK(cv)),
273                 SVf_UTF8 * !!HEK_UTF8(CvNAME_HEK(cv)));
274     if (!CvNAMED(cv)) { /* gv_init took care of it */
275         assert (SvANY(cv)->xcv_gv_u.xcv_gv == gv);
276         return gv;
277     }
278     unshare_hek(CvNAME_HEK(cv));
279     CvNAMED_off(cv);
280     SvANY(cv)->xcv_gv_u.xcv_gv = gv;
281     if (svp && *svp) SvREFCNT_inc_simple_void_NN(gv);
282     CvCVGV_RC_on(cv);
283     return gv;
284 }
285
286 /* Assign CvSTASH(cv) = st, handling weak references. */
287
288 void
289 Perl_cvstash_set(pTHX_ CV *cv, HV *st)
290 {
291     HV *oldst = CvSTASH(cv);
292     PERL_ARGS_ASSERT_CVSTASH_SET;
293     if (oldst == st)
294         return;
295     if (oldst)
296         sv_del_backref(MUTABLE_SV(oldst), MUTABLE_SV(cv));
297     SvANY(cv)->xcv_stash = st;
298     if (st)
299         Perl_sv_add_backref(aTHX_ MUTABLE_SV(st), MUTABLE_SV(cv));
300 }
301
302 /*
303 =for apidoc gv_init_pvn
304
305 Converts a scalar into a typeglob.  This is an incoercible typeglob;
306 assigning a reference to it will assign to one of its slots, instead of
307 overwriting it as happens with typeglobs created by C<SvSetSV>.  Converting
308 any scalar that is C<SvOK()> may produce unpredictable results and is reserved
309 for perl's internal use.
310
311 C<gv> is the scalar to be converted.
312
313 C<stash> is the parent stash/package, if any.
314
315 C<name> and C<len> give the name.  The name must be unqualified;
316 that is, it must not include the package name.  If C<gv> is a
317 stash element, it is the caller's responsibility to ensure that the name
318 passed to this function matches the name of the element.  If it does not
319 match, perl's internal bookkeeping will get out of sync.
320
321 C<flags> can be set to C<SVf_UTF8> if C<name> is a UTF-8 string, or
322 the return value of SvUTF8(sv).  It can also take the
323 C<GV_ADDMULTI> flag, which means to pretend that the GV has been
324 seen before (i.e., suppress "Used once" warnings).
325
326 =for apidoc Amnh||GV_ADDMULTI
327
328 =for apidoc gv_init
329
330 The old form of C<gv_init_pvn()>.  It does not work with UTF-8 strings, as it
331 has no flags parameter.  If the C<multi> parameter is set, the
332 C<GV_ADDMULTI> flag will be passed to C<gv_init_pvn()>.
333
334 =for apidoc gv_init_pv
335
336 Same as C<gv_init_pvn()>, but takes a nul-terminated string for the name
337 instead of separate char * and length parameters.
338
339 =for apidoc gv_init_sv
340
341 Same as C<gv_init_pvn()>, but takes an SV * for the name instead of separate
342 char * and length parameters.  C<flags> is currently unused.
343
344 =cut
345 */
346
347 void
348 Perl_gv_init_sv(pTHX_ GV *gv, HV *stash, SV* namesv, U32 flags)
349 {
350    char *namepv;
351    STRLEN namelen;
352    PERL_ARGS_ASSERT_GV_INIT_SV;
353    namepv = SvPV(namesv, namelen);
354    if (SvUTF8(namesv))
355        flags |= SVf_UTF8;
356    gv_init_pvn(gv, stash, namepv, namelen, flags);
357 }
358
359 void
360 Perl_gv_init_pv(pTHX_ GV *gv, HV *stash, const char *name, U32 flags)
361 {
362    PERL_ARGS_ASSERT_GV_INIT_PV;
363    gv_init_pvn(gv, stash, name, strlen(name), flags);
364 }
365
366 void
367 Perl_gv_init_pvn(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, U32 flags)
368 {
369     const U32 old_type = SvTYPE(gv);
370     const bool doproto = old_type > SVt_NULL;
371     char * const proto = (doproto && SvPOK(gv))
372         ? ((void)(SvIsCOW(gv) && (sv_force_normal((SV *)gv), 0)), SvPVX(gv))
373         : NULL;
374     const STRLEN protolen = proto ? SvCUR(gv) : 0;
375     const U32 proto_utf8  = proto ? SvUTF8(gv) : 0;
376     SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
377     const U32 exported_constant = has_constant ? SvPCS_IMPORTED(gv) : 0;
378     const bool really_sub =
379         has_constant && SvTYPE(has_constant) == SVt_PVCV;
380     COP * const old = PL_curcop;
381
382     PERL_ARGS_ASSERT_GV_INIT_PVN;
383     assert (!(proto && has_constant));
384
385     if (has_constant) {
386         /* The constant has to be a scalar, array or subroutine.  */
387         switch (SvTYPE(has_constant)) {
388         case SVt_PVHV:
389         case SVt_PVFM:
390         case SVt_PVIO:
391             Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
392                        sv_reftype(has_constant, 0));
393             NOT_REACHED; /* NOTREACHED */
394             break;
395
396         default: NOOP;
397         }
398         SvRV_set(gv, NULL);
399         SvROK_off(gv);
400     }
401
402
403     if (old_type < SVt_PVGV) {
404         if (old_type >= SVt_PV)
405             SvCUR_set(gv, 0);
406         sv_upgrade(MUTABLE_SV(gv), SVt_PVGV);
407     }
408     if (SvLEN(gv)) {
409         if (proto) {
410             SvPV_set(gv, NULL);
411             SvLEN_set(gv, 0);
412             SvPOK_off(gv);
413         } else
414             Safefree(SvPVX_mutable(gv));
415     }
416     SvIOK_off(gv);
417     isGV_with_GP_on(gv);
418
419     if (really_sub && !CvISXSUB(has_constant) && CvSTART(has_constant)
420      && (  CvSTART(has_constant)->op_type == OP_NEXTSTATE
421         || CvSTART(has_constant)->op_type == OP_DBSTATE))
422         PL_curcop = (COP *)CvSTART(has_constant);
423     GvGP_set(gv, Perl_newGP(aTHX_ gv));
424     PL_curcop = old;
425     GvSTASH(gv) = stash;
426     if (stash)
427         Perl_sv_add_backref(aTHX_ MUTABLE_SV(stash), MUTABLE_SV(gv));
428     gv_name_set(gv, name, len, GV_ADD | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ));
429     if (flags & GV_ADDMULTI || doproto) /* doproto means it */
430         GvMULTI_on(gv);                 /* _was_ mentioned */
431     if (really_sub) {
432         /* Not actually a constant.  Just a regular sub.  */
433         CV * const cv = (CV *)has_constant;
434         GvCV_set(gv,cv);
435         if (CvNAMED(cv) && CvSTASH(cv) == stash && (
436                CvNAME_HEK(cv) == GvNAME_HEK(gv)
437             || (  HEK_LEN(CvNAME_HEK(cv)) == HEK_LEN(GvNAME_HEK(gv))
438                && HEK_FLAGS(CvNAME_HEK(cv)) != HEK_FLAGS(GvNAME_HEK(gv))
439                && HEK_UTF8(CvNAME_HEK(cv)) == HEK_UTF8(GvNAME_HEK(gv))
440                && memEQ(HEK_KEY(CvNAME_HEK(cv)), GvNAME(gv), GvNAMELEN(gv))
441                )
442            ))
443             CvGV_set(cv,gv);
444     }
445     else if (doproto) {
446         CV *cv;
447         if (has_constant) {
448             /* newCONSTSUB takes ownership of the reference from us.  */
449             cv = newCONSTSUB_flags(stash, name, len, flags, has_constant);
450             /* In case op.c:S_process_special_blocks stole it: */
451             if (!GvCV(gv))
452                 GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv));
453             assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */
454             /* If this reference was a copy of another, then the subroutine
455                must have been "imported", by a Perl space assignment to a GV
456                from a reference to CV.  */
457             if (exported_constant)
458                 GvIMPORTED_CV_on(gv);
459             CvSTASH_set(cv, PL_curstash); /* XXX Why is this needed? */
460         } else {
461             cv = newSTUB(gv,1);
462         }
463         if (proto) {
464             sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen,
465                             SV_HAS_TRAILING_NUL);
466             if ( proto_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
467         }
468     }
469 }
470
471 STATIC void
472 S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type)
473 {
474     PERL_ARGS_ASSERT_GV_INIT_SVTYPE;
475
476     switch (sv_type) {
477     case SVt_PVIO:
478         (void)GvIOn(gv);
479         break;
480     case SVt_PVAV:
481         (void)GvAVn(gv);
482         break;
483     case SVt_PVHV:
484         (void)GvHVn(gv);
485         break;
486 #ifdef PERL_DONT_CREATE_GVSV
487     case SVt_NULL:
488     case SVt_PVCV:
489     case SVt_PVFM:
490     case SVt_PVGV:
491         break;
492     default:
493         if(GvSVn(gv)) {
494             /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13
495                If we just cast GvSVn(gv) to void, it ignores evaluating it for
496                its side effect */
497         }
498 #endif
499     }
500 }
501
502 static void core_xsub(pTHX_ CV* cv);
503
504 static GV *
505 S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
506                           const char * const name, const STRLEN len)
507 {
508     const int code = keyword(name, len, 1);
509     static const char file[] = __FILE__;
510     CV *cv, *oldcompcv = NULL;
511     int opnum = 0;
512     bool ampable = TRUE; /* &{}-able */
513     COP *oldcurcop = NULL;
514     yy_parser *oldparser = NULL;
515     I32 oldsavestack_ix = 0;
516
517     assert(gv || stash);
518     assert(name);
519
520     if (!code) return NULL; /* Not a keyword */
521     switch (code < 0 ? -code : code) {
522      /* no support for \&CORE::infix;
523         no support for funcs that do not parse like funcs */
524     case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD:
525     case KEY_BEGIN   : case KEY_CHECK  : case KEY_cmp:
526     case KEY_default : case KEY_DESTROY:
527     case KEY_do      : case KEY_dump   : case KEY_else  : case KEY_elsif  :
528     case KEY_END     : case KEY_eq     : case KEY_eval  :
529     case KEY_for     : case KEY_foreach: case KEY_format: case KEY_ge     :
530     case KEY_given   : case KEY_goto   : case KEY_grep  : case KEY_gt     :
531     case KEY_if      : case KEY_isa    : case KEY_INIT  : case KEY_last   :
532     case KEY_le      : case KEY_local  : case KEY_lt    : case KEY_m      :
533     case KEY_map     : case KEY_my:
534     case KEY_ne   : case KEY_next : case KEY_no: case KEY_or: case KEY_our:
535     case KEY_package: case KEY_print: case KEY_printf:
536     case KEY_q    : case KEY_qq   : case KEY_qr     : case KEY_qw    :
537     case KEY_qx   : case KEY_redo : case KEY_require: case KEY_return:
538     case KEY_s    : case KEY_say  : case KEY_sort   :
539     case KEY_state: case KEY_sub  :
540     case KEY_tr   : case KEY_UNITCHECK: case KEY_unless:
541     case KEY_until: case KEY_use  : case KEY_when     : case KEY_while :
542     case KEY_x    : case KEY_xor  : case KEY_y        :
543         return NULL;
544     case KEY_chdir:
545     case KEY_chomp: case KEY_chop: case KEY_defined: case KEY_delete:
546     case KEY_eof  : case KEY_exec: case KEY_exists :
547     case KEY_lstat:
548     case KEY_split:
549     case KEY_stat:
550     case KEY_system:
551     case KEY_truncate: case KEY_unlink:
552         ampable = FALSE;
553     }
554     if (!gv) {
555         gv = (GV *)newSV(0);
556         gv_init(gv, stash, name, len, TRUE);
557     }
558     GvMULTI_on(gv);
559     if (ampable) {
560         ENTER;
561         oldcurcop = PL_curcop;
562         oldparser = PL_parser;
563         lex_start(NULL, NULL, 0);
564         oldcompcv = PL_compcv;
565         PL_compcv = NULL; /* Prevent start_subparse from setting
566                              CvOUTSIDE. */
567         oldsavestack_ix = start_subparse(FALSE,0);
568         cv = PL_compcv;
569     }
570     else {
571         /* Avoid calling newXS, as it calls us, and things start to
572            get hairy. */
573         cv = MUTABLE_CV(newSV_type(SVt_PVCV));
574         GvCV_set(gv,cv);
575         GvCVGEN(gv) = 0;
576         CvISXSUB_on(cv);
577         CvXSUB(cv) = core_xsub;
578         PoisonPADLIST(cv);
579     }
580     CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE
581                          from PL_curcop. */
582     /* XSUBs can't be perl lang/perl5db.pl debugged
583     if (PERLDB_LINE_OR_SAVESRC)
584         (void)gv_fetchfile(file); */
585     CvFILE(cv) = (char *)file;
586     /* XXX This is inefficient, as doing things this order causes
587            a prototype check in newATTRSUB.  But we have to do
588            it this order as we need an op number before calling
589            new ATTRSUB. */
590     (void)core_prototype((SV *)cv, name, code, &opnum);
591     if (stash)
592         (void)hv_store(stash,name,len,(SV *)gv,0);
593     if (ampable) {
594 #ifdef DEBUGGING
595         CV *orig_cv = cv;
596 #endif
597         CvLVALUE_on(cv);
598         /* newATTRSUB will free the CV and return NULL if we're still
599            compiling after a syntax error */
600         if ((cv = newATTRSUB_x(
601                    oldsavestack_ix, (OP *)gv,
602                    NULL,NULL,
603                    coresub_op(
604                      opnum
605                        ? newSVuv((UV)opnum)
606                        : newSVpvn(name,len),
607                      code, opnum
608                    ),
609                    TRUE
610                )) != NULL) {
611             assert(GvCV(gv) == orig_cv);
612             if (opnum != OP_VEC && opnum != OP_SUBSTR && opnum != OP_POS
613                 && opnum != OP_UNDEF && opnum != OP_KEYS)
614                 CvLVALUE_off(cv); /* Now *that* was a neat trick. */
615         }
616         LEAVE;
617         PL_parser = oldparser;
618         PL_curcop = oldcurcop;
619         PL_compcv = oldcompcv;
620     }
621     if (cv) {
622         SV *opnumsv = newSViv(
623             (opnum == OP_ENTEREVAL && len == 9 && memEQ(name, "evalbytes", 9)) ?
624                 (OP_ENTEREVAL | (1<<16))
625             : opnum ? opnum : (((I32)name[2]) << 16));
626         cv_set_call_checker_flags(cv, Perl_ck_entersub_args_core, opnumsv, 0);
627         SvREFCNT_dec_NN(opnumsv);
628     }
629
630     return gv;
631 }
632
633 /*
634 =for apidoc gv_fetchmeth
635
636 Like L</gv_fetchmeth_pvn>, but lacks a flags parameter.
637
638 =for apidoc gv_fetchmeth_sv
639
640 Exactly like L</gv_fetchmeth_pvn>, but takes the name string in the form
641 of an SV instead of a string/length pair.
642
643 =cut
644 */
645
646 GV *
647 Perl_gv_fetchmeth_sv(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
648 {
649     char *namepv;
650     STRLEN namelen;
651     PERL_ARGS_ASSERT_GV_FETCHMETH_SV;
652     if (LIKELY(SvPOK_nog(namesv))) /* common case */
653         return gv_fetchmeth_internal(stash, namesv, NULL, 0, level,
654                                      flags | SvUTF8(namesv));
655     namepv = SvPV(namesv, namelen);
656     if (SvUTF8(namesv)) flags |= SVf_UTF8;
657     return gv_fetchmeth_pvn(stash, namepv, namelen, level, flags);
658 }
659
660 /*
661 =for apidoc gv_fetchmeth_pv
662
663 Exactly like L</gv_fetchmeth_pvn>, but takes a nul-terminated string 
664 instead of a string/length pair.
665
666 =cut
667 */
668
669 GV *
670 Perl_gv_fetchmeth_pv(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
671 {
672     PERL_ARGS_ASSERT_GV_FETCHMETH_PV;
673     return gv_fetchmeth_internal(stash, NULL, name, strlen(name), level, flags);
674 }
675
676 /*
677 =for apidoc gv_fetchmeth_pvn
678
679 Returns the glob with the given C<name> and a defined subroutine or
680 C<NULL>.  The glob lives in the given C<stash>, or in the stashes
681 accessible via C<@ISA> and C<UNIVERSAL::>.
682
683 The argument C<level> should be either 0 or -1.  If C<level==0>, as a
684 side-effect creates a glob with the given C<name> in the given C<stash>
685 which in the case of success contains an alias for the subroutine, and sets
686 up caching info for this glob.
687
688 The only significant values for C<flags> are C<GV_SUPER> and C<SVf_UTF8>.
689
690 C<GV_SUPER> indicates that we want to look up the method in the superclasses
691 of the C<stash>.
692
693 The
694 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
695 visible to Perl code.  So when calling C<call_sv>, you should not use
696 the GV directly; instead, you should use the method's CV, which can be
697 obtained from the GV with the C<GvCV> macro.
698
699 =for apidoc Amnh||GV_SUPER
700
701 =cut
702 */
703
704 /* NOTE: No support for tied ISA */
705
706 PERL_STATIC_INLINE GV*
707 S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len, I32 level, U32 flags)
708 {
709     GV** gvp;
710     HE* he;
711     AV* linear_av;
712     SV** linear_svp;
713     SV* linear_sv;
714     HV* cstash, *cachestash;
715     GV* candidate = NULL;
716     CV* cand_cv = NULL;
717     GV* topgv = NULL;
718     const char *hvname;
719     STRLEN hvnamelen;
720     I32 create = (level >= 0) ? HV_FETCH_LVALUE : 0;
721     I32 items;
722     U32 topgen_cmp;
723     U32 is_utf8 = flags & SVf_UTF8;
724
725     /* UNIVERSAL methods should be callable without a stash */
726     if (!stash) {
727         create = 0;  /* probably appropriate */
728         if(!(stash = gv_stashpvs("UNIVERSAL", 0)))
729             return 0;
730     }
731
732     assert(stash);
733
734     hvname = HvNAME_get(stash);
735     hvnamelen = HvNAMELEN_get(stash);
736     if (!hvname)
737       Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
738
739     assert(hvname);
740     assert(name || meth);
741
742     DEBUG_o( Perl_deb(aTHX_ "Looking for %smethod %s in package %s\n",
743                       flags & GV_SUPER ? "SUPER " : "",
744                       name ? name : SvPV_nolen(meth), hvname) );
745
746     topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation;
747
748     if (flags & GV_SUPER) {
749         if (!HvAUX(stash)->xhv_mro_meta->super)
750             HvAUX(stash)->xhv_mro_meta->super = newHV();
751         cachestash = HvAUX(stash)->xhv_mro_meta->super;
752     }
753     else cachestash = stash;
754
755     /* check locally for a real method or a cache entry */
756     he = (HE*)hv_common(
757         cachestash, meth, name, len, is_utf8 ? HVhek_UTF8 : 0, create, NULL, 0
758     );
759     if (he) gvp = (GV**)&HeVAL(he);
760     else gvp = NULL;
761
762     if(gvp) {
763         topgv = *gvp;
764       have_gv:
765         assert(topgv);
766         if (SvTYPE(topgv) != SVt_PVGV)
767         {
768             if (!name)
769                 name = SvPV_nomg(meth, len);
770             gv_init_pvn(topgv, stash, name, len, GV_ADDMULTI|is_utf8);
771         }
772         if ((cand_cv = GvCV(topgv))) {
773             /* If genuine method or valid cache entry, use it */
774             if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
775                 return topgv;
776             }
777             else {
778                 /* stale cache entry, junk it and move on */
779                 SvREFCNT_dec_NN(cand_cv);
780                 GvCV_set(topgv, NULL);
781                 cand_cv = NULL;
782                 GvCVGEN(topgv) = 0;
783             }
784         }
785         else if (GvCVGEN(topgv) == topgen_cmp) {
786             /* cache indicates no such method definitively */
787             return 0;
788         }
789         else if (stash == cachestash
790               && len > 1 /* shortest is uc */
791               && memEQs(hvname, HvNAMELEN_get(stash), "CORE")
792               && S_maybe_add_coresub(aTHX_ NULL,topgv,name,len))
793             goto have_gv;
794     }
795
796     linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
797     linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
798     items = AvFILLp(linear_av); /* no +1, to skip over self */
799     while (items--) {
800         linear_sv = *linear_svp++;
801         assert(linear_sv);
802         cstash = gv_stashsv(linear_sv, 0);
803
804         if (!cstash) {
805             if ( ckWARN(WARN_SYNTAX)) {
806                 if(     /* these are loaded from Perl_Gv_AMupdate() one way or another */
807                            ( len    && name[0] == '(' )  /* overload.pm related, in particular "()" */
808                         || ( memEQs( name, len, "DESTROY") )
809                 ) {
810                      Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
811                             "Can't locate package %" SVf " for @%" HEKf "::ISA",
812                             SVfARG(linear_sv),
813                             HEKfARG(HvNAME_HEK(stash)));
814
815                 } else if( memEQs( name, len, "AUTOLOAD") ) {
816                     /* gobble this warning */
817                 } else {
818                     Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
819                         "While trying to resolve method call %.*s->%.*s()"
820                         " can not locate package \"%" SVf "\" yet it is mentioned in @%.*s::ISA"
821                         " (perhaps you forgot to load \"%" SVf "\"?)",
822                          (int) hvnamelen, hvname,
823                          (int) len, name,
824                         SVfARG(linear_sv),
825                          (int) hvnamelen, hvname,
826                          SVfARG(linear_sv));
827                 }
828             }
829             continue;
830         }
831
832         assert(cstash);
833
834         gvp = (GV**)hv_common(
835             cstash, meth, name, len, is_utf8 ? HVhek_UTF8 : 0, HV_FETCH_JUST_SV, NULL, 0
836         );
837         if (!gvp) {
838             if (len > 1 && HvNAMELEN_get(cstash) == 4) {
839                 const char *hvname = HvNAME(cstash); assert(hvname);
840                 if (strBEGINs(hvname, "CORE")
841                  && (candidate =
842                       S_maybe_add_coresub(aTHX_ cstash,NULL,name,len)
843                     ))
844                     goto have_candidate;
845             }
846             continue;
847         }
848         else candidate = *gvp;
849        have_candidate:
850         assert(candidate);
851         if (SvTYPE(candidate) != SVt_PVGV)
852             gv_init_pvn(candidate, cstash, name, len, GV_ADDMULTI|is_utf8);
853         if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
854             /*
855              * Found real method, cache method in topgv if:
856              *  1. topgv has no synonyms (else inheritance crosses wires)
857              *  2. method isn't a stub (else AUTOLOAD fails spectacularly)
858              */
859             if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
860                   CV *old_cv = GvCV(topgv);
861                   SvREFCNT_dec(old_cv);
862                   SvREFCNT_inc_simple_void_NN(cand_cv);
863                   GvCV_set(topgv, cand_cv);
864                   GvCVGEN(topgv) = topgen_cmp;
865             }
866             return candidate;
867         }
868     }
869
870     /* Check UNIVERSAL without caching */
871     if(level == 0 || level == -1) {
872         candidate = gv_fetchmeth_internal(NULL, meth, name, len, 1,
873                                           flags &~GV_SUPER);
874         if(candidate) {
875             cand_cv = GvCV(candidate);
876             if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
877                   CV *old_cv = GvCV(topgv);
878                   SvREFCNT_dec(old_cv);
879                   SvREFCNT_inc_simple_void_NN(cand_cv);
880                   GvCV_set(topgv, cand_cv);
881                   GvCVGEN(topgv) = topgen_cmp;
882             }
883             return candidate;
884         }
885     }
886
887     if (topgv && GvREFCNT(topgv) == 1) {
888         /* cache the fact that the method is not defined */
889         GvCVGEN(topgv) = topgen_cmp;
890     }
891
892     return 0;
893 }
894
895 GV *
896 Perl_gv_fetchmeth_pvn(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
897 {
898     PERL_ARGS_ASSERT_GV_FETCHMETH_PVN;
899     return gv_fetchmeth_internal(stash, NULL, name, len, level, flags);
900 }
901
902 /*
903 =for apidoc gv_fetchmeth_autoload
904
905 This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
906 parameter.
907
908 =for apidoc gv_fetchmeth_sv_autoload
909
910 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
911 of an SV instead of a string/length pair.
912
913 =cut
914 */
915
916 GV *
917 Perl_gv_fetchmeth_sv_autoload(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
918 {
919    char *namepv;
920    STRLEN namelen;
921    PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD;
922    namepv = SvPV(namesv, namelen);
923    if (SvUTF8(namesv))
924        flags |= SVf_UTF8;
925    return gv_fetchmeth_pvn_autoload(stash, namepv, namelen, level, flags);
926 }
927
928 /*
929 =for apidoc gv_fetchmeth_pv_autoload
930
931 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
932 instead of a string/length pair.
933
934 =cut
935 */
936
937 GV *
938 Perl_gv_fetchmeth_pv_autoload(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
939 {
940     PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD;
941     return gv_fetchmeth_pvn_autoload(stash, name, strlen(name), level, flags);
942 }
943
944 /*
945 =for apidoc gv_fetchmeth_pvn_autoload
946
947 Same as C<gv_fetchmeth_pvn()>, but looks for autoloaded subroutines too.
948 Returns a glob for the subroutine.
949
950 For an autoloaded subroutine without a GV, will create a GV even
951 if C<level < 0>.  For an autoloaded subroutine without a stub, C<GvCV()>
952 of the result may be zero.
953
954 Currently, the only significant value for C<flags> is C<SVf_UTF8>.
955
956 =cut
957 */
958
959 GV *
960 Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
961 {
962     GV *gv = gv_fetchmeth_pvn(stash, name, len, level, flags);
963
964     PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD;
965
966     if (!gv) {
967         CV *cv;
968         GV **gvp;
969
970         if (!stash)
971             return NULL;        /* UNIVERSAL::AUTOLOAD could cause trouble */
972         if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
973             return NULL;
974         if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags)))
975             return NULL;
976         cv = GvCV(gv);
977         if (!(CvROOT(cv) || CvXSUB(cv)))
978             return NULL;
979         /* Have an autoload */
980         if (level < 0)  /* Cannot do without a stub */
981             gv_fetchmeth_pvn(stash, name, len, 0, flags);
982         gvp = (GV**)hv_fetch(stash, name,
983                         (flags & SVf_UTF8) ? -(I32)len : (I32)len, (level >= 0));
984         if (!gvp)
985             return NULL;
986         return *gvp;
987     }
988     return gv;
989 }
990
991 /*
992 =for apidoc gv_fetchmethod_autoload
993
994 Returns the glob which contains the subroutine to call to invoke the method
995 on the C<stash>.  In fact in the presence of autoloading this may be the
996 glob for "AUTOLOAD".  In this case the corresponding variable C<$AUTOLOAD> is
997 already setup.
998
999 The third parameter of C<gv_fetchmethod_autoload> determines whether
1000 AUTOLOAD lookup is performed if the given method is not present: non-zero
1001 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
1002 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
1003 with a non-zero C<autoload> parameter.
1004
1005 These functions grant C<"SUPER"> token
1006 as a prefix of the method name.  Note
1007 that if you want to keep the returned glob for a long time, you need to
1008 check for it being "AUTOLOAD", since at the later time the call may load a
1009 different subroutine due to C<$AUTOLOAD> changing its value.  Use the glob
1010 created as a side effect to do this.
1011
1012 These functions have the same side-effects as C<gv_fetchmeth> with
1013 C<level==0>.  The warning against passing the GV returned by
1014 C<gv_fetchmeth> to C<call_sv> applies equally to these functions.
1015
1016 =cut
1017 */
1018
1019 GV *
1020 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
1021 {
1022     PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
1023
1024     return gv_fetchmethod_flags(stash, name, autoload ? GV_AUTOLOAD : 0);
1025 }
1026
1027 GV *
1028 Perl_gv_fetchmethod_sv_flags(pTHX_ HV *stash, SV *namesv, U32 flags)
1029 {
1030     char *namepv;
1031     STRLEN namelen;
1032     PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS;
1033     namepv = SvPV(namesv, namelen);
1034     if (SvUTF8(namesv))
1035        flags |= SVf_UTF8;
1036     return gv_fetchmethod_pvn_flags(stash, namepv, namelen, flags);
1037 }
1038
1039 GV *
1040 Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
1041 {
1042     PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS;
1043     return gv_fetchmethod_pvn_flags(stash, name, strlen(name), flags);
1044 }
1045
1046 GV *
1047 Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
1048 {
1049     const char * const origname = name;
1050     const char * const name_end = name + len;
1051     const char *last_separator = NULL;
1052     GV* gv;
1053     HV* ostash = stash;
1054     SV *const error_report = MUTABLE_SV(stash);
1055     const U32 autoload = flags & GV_AUTOLOAD;
1056     const U32 do_croak = flags & GV_CROAK;
1057     const U32 is_utf8  = flags & SVf_UTF8;
1058
1059     PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS;
1060
1061     if (SvTYPE(stash) < SVt_PVHV)
1062         stash = NULL;
1063     else {
1064         /* The only way stash can become NULL later on is if last_separator is set,
1065            which in turn means that there is no need for a SVt_PVHV case
1066            the error reporting code.  */
1067     }
1068
1069     {
1070         /* check if the method name is fully qualified or
1071          * not, and separate the package name from the actual
1072          * method name.
1073          *
1074          * leaves last_separator pointing to the beginning of the
1075          * last package separator (either ' or ::) or 0
1076          * if none was found.
1077          *
1078          * leaves name pointing at the beginning of the
1079          * method name.
1080          */
1081         const char *name_cursor = name;
1082         const char * const name_em1 = name_end - 1; /* name_end minus 1 */
1083         for (name_cursor = name; name_cursor < name_end ; name_cursor++) {
1084             if (*name_cursor == '\'') {
1085                 last_separator = name_cursor;
1086                 name = name_cursor + 1;
1087             }
1088             else if (name_cursor < name_em1 && *name_cursor == ':' && name_cursor[1] == ':') {
1089                 last_separator = name_cursor++;
1090                 name = name_cursor + 1;
1091             }
1092         }
1093     }
1094
1095     /* did we find a separator? */
1096     if (last_separator) {
1097         STRLEN sep_len= last_separator - origname;
1098         if ( memEQs(origname, sep_len, "SUPER")) {
1099             /* ->SUPER::method should really be looked up in original stash */
1100             stash = CopSTASH(PL_curcop);
1101             flags |= GV_SUPER;
1102             DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
1103                          origname, HvENAME_get(stash), name) );
1104         }
1105         else if ( sep_len >= 7 &&
1106                  strBEGINs(last_separator - 7, "::SUPER")) {
1107             /* don't autovifify if ->NoSuchStash::SUPER::method */
1108             stash = gv_stashpvn(origname, sep_len - 7, is_utf8);
1109             if (stash) flags |= GV_SUPER;
1110         }
1111         else {
1112             /* don't autovifify if ->NoSuchStash::method */
1113             stash = gv_stashpvn(origname, sep_len, is_utf8);
1114         }
1115         ostash = stash;
1116     }
1117
1118     gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags);
1119     if (!gv) {
1120         /* This is the special case that exempts Foo->import and
1121            Foo->unimport from being an error even if there's no
1122           import/unimport subroutine */
1123         if (strEQ(name,"import") || strEQ(name,"unimport")) {
1124             gv = (GV*)sv_2mortal((SV*)newCONSTSUB_flags(NULL,
1125                                                 NULL, 0, 0, NULL));
1126         } else if (autoload)
1127             gv = gv_autoload_pvn(
1128                 ostash, name, name_end - name, GV_AUTOLOAD_ISMETHOD|flags
1129             );
1130         if (!gv && do_croak) {
1131             /* Right now this is exclusively for the benefit of S_method_common
1132                in pp_hot.c  */
1133             if (stash) {
1134                 /* If we can't find an IO::File method, it might be a call on
1135                  * a filehandle. If IO:File has not been loaded, try to
1136                  * require it first instead of croaking */
1137                 const char *stash_name = HvNAME_get(stash);
1138                 if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File")
1139                     && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL,
1140                                        STR_WITH_LEN("IO/File.pm"), 0,
1141                                        HV_FETCH_ISEXISTS, NULL, 0)
1142                 ) {
1143                     require_pv("IO/File.pm");
1144                     gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags);
1145                     if (gv)
1146                         return gv;
1147                 }
1148                 Perl_croak(aTHX_
1149                            "Can't locate object method \"%" UTF8f
1150                            "\" via package \"%" HEKf "\"",
1151                                     UTF8fARG(is_utf8, name_end - name, name),
1152                                     HEKfARG(HvNAME_HEK(stash)));
1153             }
1154             else {
1155                 SV* packnamesv;
1156
1157                 if (last_separator) {
1158                     packnamesv = newSVpvn_flags(origname, last_separator - origname,
1159                                                     SVs_TEMP | is_utf8);
1160                 } else {
1161                     packnamesv = error_report;
1162                 }
1163
1164                 Perl_croak(aTHX_
1165                            "Can't locate object method \"%" UTF8f
1166                            "\" via package \"%" SVf "\""
1167                            " (perhaps you forgot to load \"%" SVf "\"?)",
1168                            UTF8fARG(is_utf8, name_end - name, name),
1169                            SVfARG(packnamesv), SVfARG(packnamesv));
1170             }
1171         }
1172     }
1173     else if (autoload) {
1174         CV* const cv = GvCV(gv);
1175         if (!CvROOT(cv) && !CvXSUB(cv)) {
1176             GV* stubgv;
1177             GV* autogv;
1178
1179             if (CvANON(cv) || CvLEXICAL(cv))
1180                 stubgv = gv;
1181             else {
1182                 stubgv = CvGV(cv);
1183                 if (GvCV(stubgv) != cv)         /* orphaned import */
1184                     stubgv = gv;
1185             }
1186             autogv = gv_autoload_pvn(GvSTASH(stubgv),
1187                                   GvNAME(stubgv), GvNAMELEN(stubgv),
1188                                   GV_AUTOLOAD_ISMETHOD
1189                                    | (GvNAMEUTF8(stubgv) ? SVf_UTF8 : 0));
1190             if (autogv)
1191                 gv = autogv;
1192         }
1193     }
1194
1195     return gv;
1196 }
1197
1198 GV*
1199 Perl_gv_autoload_sv(pTHX_ HV *stash, SV* namesv, U32 flags)
1200 {
1201    char *namepv;
1202    STRLEN namelen;
1203    PERL_ARGS_ASSERT_GV_AUTOLOAD_SV;
1204    namepv = SvPV(namesv, namelen);
1205    if (SvUTF8(namesv))
1206        flags |= SVf_UTF8;
1207    return gv_autoload_pvn(stash, namepv, namelen, flags);
1208 }
1209
1210 GV*
1211 Perl_gv_autoload_pv(pTHX_ HV *stash, const char *namepv, U32 flags)
1212 {
1213    PERL_ARGS_ASSERT_GV_AUTOLOAD_PV;
1214    return gv_autoload_pvn(stash, namepv, strlen(namepv), flags);
1215 }
1216
1217 GV*
1218 Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
1219 {
1220     GV* gv;
1221     CV* cv;
1222     HV* varstash;
1223     GV* vargv;
1224     SV* varsv;
1225     SV *packname = NULL;
1226     U32 is_utf8 = flags & SVf_UTF8 ? SVf_UTF8 : 0;
1227
1228     PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN;
1229
1230     if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
1231         return NULL;
1232     if (stash) {
1233         if (SvTYPE(stash) < SVt_PVHV) {
1234             STRLEN packname_len = 0;
1235             const char * const packname_ptr = SvPV_const(MUTABLE_SV(stash), packname_len);
1236             packname = newSVpvn_flags(packname_ptr, packname_len,
1237                                       SVs_TEMP | SvUTF8(stash));
1238             stash = NULL;
1239         }
1240         else
1241             packname = sv_2mortal(newSVhek(HvNAME_HEK(stash)));
1242         if (flags & GV_SUPER) sv_catpvs(packname, "::SUPER");
1243     }
1244     if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE,
1245                                 is_utf8 | (flags & GV_SUPER))))
1246         return NULL;
1247     cv = GvCV(gv);
1248
1249     if (!(CvROOT(cv) || CvXSUB(cv)))
1250         return NULL;
1251
1252     /*
1253      * Inheriting AUTOLOAD for non-methods no longer works
1254      */
1255     if (
1256         !(flags & GV_AUTOLOAD_ISMETHOD)
1257      && (GvCVGEN(gv) || GvSTASH(gv) != stash)
1258     )
1259         Perl_croak(aTHX_ "Use of inherited AUTOLOAD for non-method %" SVf
1260                          "::%" UTF8f "() is no longer allowed",
1261                          SVfARG(packname),
1262                          UTF8fARG(is_utf8, len, name));
1263
1264     if (CvISXSUB(cv)) {
1265         /* Instead of forcing the XSUB do another lookup for $AUTOLOAD
1266          * and split that value on the last '::', pass along the same data
1267          * via the SvPVX field in the CV, and the stash in CvSTASH.
1268          *
1269          * Due to an unfortunate accident of history, the SvPVX field
1270          * serves two purposes.  It is also used for the subroutine's pro-
1271          * type.  Since SvPVX has been documented as returning the sub name
1272          * for a long time, but not as returning the prototype, we have
1273          * to preserve the SvPVX AUTOLOAD behaviour and put the prototype
1274          * elsewhere.
1275          *
1276          * We put the prototype in the same allocated buffer, but after
1277          * the sub name.  The SvPOK flag indicates the presence of a proto-
1278          * type.  The CvAUTOLOAD flag indicates the presence of a sub name.
1279          * If both flags are on, then SvLEN is used to indicate the end of
1280          * the prototype (artificially lower than what is actually allo-
1281          * cated), at the risk of having to reallocate a few bytes unneces-
1282          * sarily--but that should happen very rarely, if ever.
1283          *
1284          * We use SvUTF8 for both prototypes and sub names, so if one is
1285          * UTF8, the other must be upgraded.
1286          */
1287         CvSTASH_set(cv, stash);
1288         if (SvPOK(cv)) { /* Ouch! */
1289             SV * const tmpsv = newSVpvn_flags(name, len, is_utf8);
1290             STRLEN ulen;
1291             const char *proto = CvPROTO(cv);
1292             assert(proto);
1293             if (SvUTF8(cv))
1294                 sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2);
1295             ulen = SvCUR(tmpsv);
1296             SvCUR_set(tmpsv, SvCUR(tmpsv) + 1); /* include null in string */
1297             sv_catpvn_flags(
1298                 tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv)
1299             );
1300             SvTEMP_on(tmpsv); /* Allow theft */
1301             sv_setsv_nomg((SV *)cv, tmpsv);
1302             SvTEMP_off(tmpsv);
1303             SvREFCNT_dec_NN(tmpsv);
1304             SvLEN_set(cv, SvCUR(cv) + 1);
1305             SvCUR_set(cv, ulen);
1306         }
1307         else {
1308           sv_setpvn((SV *)cv, name, len);
1309           SvPOK_off(cv);
1310           if (is_utf8)
1311             SvUTF8_on(cv);
1312           else SvUTF8_off(cv);
1313         }
1314         CvAUTOLOAD_on(cv);
1315     }
1316
1317     /*
1318      * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
1319      * The subroutine's original name may not be "AUTOLOAD", so we don't
1320      * use that, but for lack of anything better we will use the sub's
1321      * original package to look up $AUTOLOAD.
1322      */
1323     varstash = CvNAMED(cv) ? CvSTASH(cv) : GvSTASH(CvGV(cv));
1324     vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
1325     ENTER;
1326
1327     if (!isGV(vargv)) {
1328         gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0);
1329 #ifdef PERL_DONT_CREATE_GVSV
1330         GvSV(vargv) = newSV(0);
1331 #endif
1332     }
1333     LEAVE;
1334     varsv = GvSVn(vargv);
1335     SvTAINTED_off(varsv); /* previous $AUTOLOAD taint is obsolete */
1336     /* XXX: this process is not careful to avoid extra magic gets and sets; tied $AUTOLOAD will get noise */
1337     sv_setsv(varsv, packname);
1338     sv_catpvs(varsv, "::");
1339     /* Ensure SvSETMAGIC() is called if necessary. In particular, to clear
1340        tainting if $FOO::AUTOLOAD was previously tainted, but is not now.  */
1341     sv_catpvn_flags(
1342         varsv, name, len,
1343         SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES)
1344     );
1345     if (is_utf8)
1346         SvUTF8_on(varsv);
1347     return gv;
1348 }
1349
1350
1351 /* require_tie_mod() internal routine for requiring a module
1352  * that implements the logic of automatic ties like %! and %-
1353  * It loads the module and then calls the _tie_it subroutine
1354  * with the passed gv as an argument.
1355  *
1356  * The "gv" parameter should be the glob.
1357  * "varname" holds the 1-char name of the var, used for error messages.
1358  * "namesv" holds the module name. Its refcount will be decremented.
1359  * "flags": if flag & 1 then save the scalar before loading.
1360  * For the protection of $! to work (it is set by this routine)
1361  * the sv slot must already be magicalized.
1362  */
1363 STATIC void
1364 S_require_tie_mod(pTHX_ GV *gv, const char varname, const char * name,
1365                         STRLEN len, const U32 flags)
1366 {
1367     const SV * const target = varname == '[' ? GvSV(gv) : (SV *)GvHV(gv);
1368
1369     PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
1370
1371     /* If it is not tied */
1372     if (!target || !SvRMAGICAL(target)
1373      || !mg_find(target,
1374                  varname == '[' ? PERL_MAGIC_tiedscalar : PERL_MAGIC_tied))
1375     {
1376       HV *stash;
1377       GV **gvp;
1378       dSP;
1379
1380       PUSHSTACKi(PERLSI_MAGIC);
1381       ENTER;
1382
1383 #define GET_HV_FETCH_TIE_FUNC                            \
1384     (  (gvp = (GV **)hv_fetchs(stash, "_tie_it", 0))      \
1385     && *gvp                                                \
1386     && (  (isGV(*gvp) && GvCV(*gvp))                        \
1387        || (SvROK(*gvp) && SvTYPE(SvRV(*gvp)) == SVt_PVCV)  ) \
1388     )
1389
1390       /* Load the module if it is not loaded.  */
1391       if (!(stash = gv_stashpvn(name, len, 0))
1392        || ! GET_HV_FETCH_TIE_FUNC)
1393       {
1394         SV * const module = newSVpvn(name, len);
1395         const char type = varname == '[' ? '$' : '%';
1396         if ( flags & 1 )
1397             save_scalar(gv);
1398         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
1399         assert(sp == PL_stack_sp);
1400         stash = gv_stashpvn(name, len, 0);
1401         if (!stash)
1402             Perl_croak(aTHX_ "panic: Can't use %c%c because %s is not available",
1403                     type, varname, name);
1404         else if (! GET_HV_FETCH_TIE_FUNC)
1405             Perl_croak(aTHX_ "panic: Can't use %c%c because %s does not define _tie_it",
1406                     type, varname, name);
1407       }
1408       /* Now call the tie function.  It should be in *gvp.  */
1409       assert(gvp); assert(*gvp);
1410       PUSHMARK(SP);
1411       XPUSHs((SV *)gv);
1412       PUTBACK;
1413       call_sv((SV *)*gvp, G_VOID|G_DISCARD);
1414       LEAVE;
1415       POPSTACK;
1416     }
1417 }
1418
1419 /* add a require_tie_mod_s - the _s suffix is similar to pvs type suffixes,
1420  * IOW it means we do STR_WITH_LEN() ourselves and the user should pass in
1421  * a true string WITHOUT a len.
1422  */
1423 #define require_tie_mod_s(gv, varname, name, flags) \
1424     S_require_tie_mod(aTHX_ gv, varname, STR_WITH_LEN(name), flags)
1425
1426 /*
1427 =for apidoc gv_stashpv
1428
1429 Returns a pointer to the stash for a specified package.  Uses C<strlen> to
1430 determine the length of C<name>, then calls C<gv_stashpvn()>.
1431
1432 =cut
1433 */
1434
1435 HV*
1436 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
1437 {
1438     PERL_ARGS_ASSERT_GV_STASHPV;
1439     return gv_stashpvn(name, strlen(name), create);
1440 }
1441
1442 /*
1443 =for apidoc gv_stashpvn
1444
1445 Returns a pointer to the stash for a specified package.  The C<namelen>
1446 parameter indicates the length of the C<name>, in bytes.  C<flags> is passed
1447 to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
1448 created if it does not already exist.  If the package does not exist and
1449 C<flags> is 0 (or any other setting that does not create packages) then C<NULL>
1450 is returned.
1451
1452 Flags may be one of:
1453
1454     GV_ADD
1455     SVf_UTF8
1456     GV_NOADD_NOINIT
1457     GV_NOINIT
1458     GV_NOEXPAND
1459     GV_ADDMG
1460
1461 The most important of which are probably C<GV_ADD> and C<SVf_UTF8>.
1462
1463 Note, use of C<gv_stashsv> instead of C<gv_stashpvn> where possible is strongly
1464 recommended for performance reasons.
1465
1466 =for apidoc Amnh||GV_ADD
1467 =for apidoc Amnh||GV_NOADD_NOINIT
1468 =for apidoc Amnh||GV_NOINIT
1469 =for apidoc Amnh||GV_NOEXPAND
1470 =for apidoc Amnh||GV_ADDMG
1471 =for apidoc Amnh||SVf_UTF8
1472
1473 =cut
1474 */
1475
1476 /*
1477 gv_stashpvn_internal
1478
1479 Perform the internal bits of gv_stashsvpvn_cached. You could think of this
1480 as being one half of the logic. Not to be called except from gv_stashsvpvn_cached().
1481
1482 */
1483
1484 PERL_STATIC_INLINE HV*
1485 S_gv_stashpvn_internal(pTHX_ const char *name, U32 namelen, I32 flags)
1486 {
1487     char smallbuf[128];
1488     char *tmpbuf;
1489     HV *stash;
1490     GV *tmpgv;
1491     U32 tmplen = namelen + 2;
1492
1493     PERL_ARGS_ASSERT_GV_STASHPVN_INTERNAL;
1494
1495     if (tmplen <= sizeof smallbuf)
1496         tmpbuf = smallbuf;
1497     else
1498         Newx(tmpbuf, tmplen, char);
1499     Copy(name, tmpbuf, namelen, char);
1500     tmpbuf[namelen]   = ':';
1501     tmpbuf[namelen+1] = ':';
1502     tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
1503     if (tmpbuf != smallbuf)
1504         Safefree(tmpbuf);
1505     if (!tmpgv || !isGV_with_GP(tmpgv))
1506         return NULL;
1507     stash = GvHV(tmpgv);
1508     if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL;
1509     assert(stash);
1510     if (!HvNAME_get(stash)) {
1511         hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 );
1512         
1513         /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */
1514         /* If the containing stash has multiple effective
1515            names, see that this one gets them, too. */
1516         if (HvAUX(GvSTASH(tmpgv))->xhv_name_count)
1517             mro_package_moved(stash, NULL, tmpgv, 1);
1518     }
1519     return stash;
1520 }
1521
1522 /*
1523 gv_stashsvpvn_cached
1524
1525 Returns a pointer to the stash for a specified package, possibly
1526 cached.  Implements both C<gv_stashpvn> and C<gv_stashsv>.
1527
1528 Requires one of either namesv or namepv to be non-null.
1529
1530 See C<L</gv_stashpvn>> for details on "flags".
1531
1532 Note the sv interface is strongly preferred for performance reasons.
1533
1534 */
1535
1536 #define PERL_ARGS_ASSERT_GV_STASHSVPVN_CACHED \
1537     assert(namesv || name)
1538
1539 HV*
1540 Perl_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char *name, U32 namelen, I32 flags)
1541 {
1542     HV* stash;
1543     HE* he;
1544
1545     PERL_ARGS_ASSERT_GV_STASHSVPVN_CACHED;
1546
1547     he = (HE *)hv_common(
1548         PL_stashcache, namesv, name, namelen,
1549         (flags & SVf_UTF8) ? HVhek_UTF8 : 0, 0, NULL, 0
1550     );
1551
1552     if (he) {
1553         SV *sv = HeVAL(he);
1554         HV *hv;
1555         assert(SvIOK(sv));
1556         hv = INT2PTR(HV*, SvIVX(sv));
1557         assert(SvTYPE(hv) == SVt_PVHV);
1558         return hv;
1559     }
1560     else if (flags & GV_CACHE_ONLY) return NULL;
1561
1562     if (namesv) {
1563         if (SvOK(namesv)) { /* prevent double uninit warning */
1564             STRLEN len;
1565             name = SvPV_const(namesv, len);
1566             namelen = len;
1567             flags |= SvUTF8(namesv);
1568         } else {
1569             name = ""; namelen = 0;
1570         }
1571     }
1572     stash = gv_stashpvn_internal(name, namelen, flags);
1573
1574     if (stash && namelen) {
1575         SV* const ref = newSViv(PTR2IV(stash));
1576         (void)hv_store(PL_stashcache, name,
1577             (flags & SVf_UTF8) ? -(I32)namelen : (I32)namelen, ref, 0);
1578     }
1579
1580     return stash;
1581 }
1582
1583 HV*
1584 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
1585 {
1586     PERL_ARGS_ASSERT_GV_STASHPVN;
1587     return gv_stashsvpvn_cached(NULL, name, namelen, flags);
1588 }
1589
1590 /*
1591 =for apidoc gv_stashsv
1592
1593 Returns a pointer to the stash for a specified package.  See
1594 C<L</gv_stashpvn>>.
1595
1596 Note this interface is strongly preferred over C<gv_stashpvn> for performance
1597 reasons.
1598
1599 =cut
1600 */
1601
1602 HV*
1603 Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
1604 {
1605     PERL_ARGS_ASSERT_GV_STASHSV;
1606     return gv_stashsvpvn_cached(sv, NULL, 0, flags);
1607 }
1608
1609
1610 GV *
1611 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
1612     PERL_ARGS_ASSERT_GV_FETCHPV;
1613     return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
1614 }
1615
1616 GV *
1617 Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
1618     STRLEN len;
1619     const char * const nambeg =
1620        SvPV_flags_const(name, len, flags & GV_NO_SVGMAGIC ? 0 : SV_GMAGIC);
1621     PERL_ARGS_ASSERT_GV_FETCHSV;
1622     return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
1623 }
1624
1625 PERL_STATIC_INLINE void
1626 S_gv_magicalize_isa(pTHX_ GV *gv)
1627 {
1628     AV* av;
1629
1630     PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
1631
1632     av = GvAVn(gv);
1633     GvMULTI_on(gv);
1634     sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1635              NULL, 0);
1636 }
1637
1638 /* This function grabs name and tries to split a stash and glob
1639  * from its contents. TODO better description, comments
1640  * 
1641  * If the function returns TRUE and 'name == name_end', then
1642  * 'gv' can be directly returned to the caller of gv_fetchpvn_flags
1643  */
1644 PERL_STATIC_INLINE bool
1645 S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name,
1646                STRLEN *len, const char *nambeg, STRLEN full_len,
1647                const U32 is_utf8, const I32 add)
1648 {
1649     char *tmpfullbuf = NULL; /* only malloc one big chunk of memory when the smallbuff is not large enough */
1650     const char *name_cursor;
1651     const char *const name_end = nambeg + full_len;
1652     const char *const name_em1 = name_end - 1;
1653     char smallbuf[64]; /* small buffer to avoid a malloc when possible */
1654
1655     PERL_ARGS_ASSERT_PARSE_GV_STASH_NAME;
1656     
1657     if (   full_len > 2
1658         && **name == '*'
1659         && isIDFIRST_lazy_if_safe(*name + 1, name_end, is_utf8))
1660     {
1661         /* accidental stringify on a GV? */
1662         (*name)++;
1663     }
1664
1665     for (name_cursor = *name; name_cursor < name_end; name_cursor++) {
1666         if (name_cursor < name_em1 &&
1667             ((*name_cursor == ':' && name_cursor[1] == ':')
1668            || *name_cursor == '\''))
1669         {
1670             if (!*stash)
1671                 *stash = PL_defstash;
1672             if (!*stash || !SvREFCNT(*stash)) /* symbol table under destruction */
1673                 goto notok;
1674
1675             *len = name_cursor - *name;
1676             if (name_cursor > nambeg) { /* Skip for initial :: or ' */
1677                 const char *key;
1678                 GV**gvp;
1679                 if (*name_cursor == ':') {
1680                     key = *name;
1681                     *len += 2;
1682                 }
1683                 else { /* using ' for package separator */
1684                     /* use our pre-allocated buffer when possible to save a malloc */
1685                     char *tmpbuf;
1686                     if ( *len+2 <= sizeof smallbuf)
1687                         tmpbuf = smallbuf;
1688                     else {
1689                         /* only malloc once if needed */
1690                         if (tmpfullbuf == NULL) /* only malloc&free once, a little more than needed */
1691                             Newx(tmpfullbuf, full_len+2, char);
1692                         tmpbuf = tmpfullbuf;
1693                     }
1694                     Copy(*name, tmpbuf, *len, char);
1695                     tmpbuf[(*len)++] = ':';
1696                     tmpbuf[(*len)++] = ':';
1697                     key = tmpbuf;
1698                 }
1699                 gvp = (GV**)hv_fetch(*stash, key, is_utf8 ? -((I32)*len) : (I32)*len, add);
1700                 *gv = gvp ? *gvp : NULL;
1701                 if (!*gv || *gv == (const GV *)&PL_sv_undef) {
1702                     goto notok;
1703                 }
1704                 /* here we know that *gv && *gv != &PL_sv_undef */
1705                 if (SvTYPE(*gv) != SVt_PVGV)
1706                     gv_init_pvn(*gv, *stash, key, *len, (add & GV_ADDMULTI)|is_utf8);
1707                 else
1708                     GvMULTI_on(*gv);
1709
1710                 if (!(*stash = GvHV(*gv))) {
1711                     *stash = GvHV(*gv) = newHV();
1712                     if (!HvNAME_get(*stash)) {
1713                         if (GvSTASH(*gv) == PL_defstash && *len == 6
1714                             && strBEGINs(*name, "CORE"))
1715                             hv_name_sets(*stash, "CORE", 0);
1716                         else
1717                             hv_name_set(
1718                                 *stash, nambeg, name_cursor-nambeg, is_utf8
1719                             );
1720                     /* If the containing stash has multiple effective
1721                     names, see that this one gets them, too. */
1722                     if (HvAUX(GvSTASH(*gv))->xhv_name_count)
1723                         mro_package_moved(*stash, NULL, *gv, 1);
1724                     }
1725                 }
1726                 else if (!HvNAME_get(*stash))
1727                     hv_name_set(*stash, nambeg, name_cursor - nambeg, is_utf8);
1728             }
1729
1730             if (*name_cursor == ':')
1731                 name_cursor++;
1732             *name = name_cursor+1;
1733             if (*name == name_end) {
1734                 if (!*gv) {
1735                     *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
1736                     if (SvTYPE(*gv) != SVt_PVGV) {
1737                         gv_init_pvn(*gv, PL_defstash, "main::", 6,
1738                                     GV_ADDMULTI);
1739                         GvHV(*gv) =
1740                             MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash));
1741                     }
1742                 }
1743                 goto ok;
1744             }
1745         }
1746     }
1747     *len = name_cursor - *name;
1748   ok:
1749     Safefree(tmpfullbuf); /* free our tmpfullbuf if it was used */
1750     return TRUE;
1751   notok:
1752     Safefree(tmpfullbuf); /* free our tmpfullbuf if it was used */
1753     return FALSE;
1754 }
1755
1756
1757 /* Checks if an unqualified name is in the main stash */
1758 PERL_STATIC_INLINE bool
1759 S_gv_is_in_main(pTHX_ const char *name, STRLEN len, const U32 is_utf8)
1760 {
1761     PERL_ARGS_ASSERT_GV_IS_IN_MAIN;
1762     
1763     /* If it's an alphanumeric variable */
1764     if ( len && isIDFIRST_lazy_if_safe(name, name + len, is_utf8) ) {
1765         /* Some "normal" variables are always in main::,
1766          * like INC or STDOUT.
1767          */
1768         switch (len) {
1769             case 1:
1770             if (*name == '_')
1771                 return TRUE;
1772             break;
1773             case 3:
1774             if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1775                 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1776                 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
1777                 return TRUE;
1778             break;
1779             case 4:
1780             if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1781                 && name[3] == 'V')
1782                 return TRUE;
1783             break;
1784             case 5:
1785             if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1786                 && name[3] == 'I' && name[4] == 'N')
1787                 return TRUE;
1788             break;
1789             case 6:
1790             if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1791                 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1792                     ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
1793                 return TRUE;
1794             break;
1795             case 7:
1796             if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1797                 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1798                 && name[6] == 'T')
1799                 return TRUE;
1800             break;
1801         }
1802     }
1803     /* *{""}, or a special variable like $@ */
1804     else
1805         return TRUE;
1806     
1807     return FALSE;
1808 }
1809
1810
1811 /* This function is called if parse_gv_stash_name() failed to
1812  * find a stash, or if GV_NOTQUAL or an empty name was passed
1813  * to gv_fetchpvn_flags.
1814  * 
1815  * It returns FALSE if the default stash can't be found nor created,
1816  * which might happen during global destruction.
1817  */
1818 PERL_STATIC_INLINE bool
1819 S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len,
1820                const U32 is_utf8, const I32 add,
1821                const svtype sv_type)
1822 {
1823     PERL_ARGS_ASSERT_FIND_DEFAULT_STASH;
1824     
1825     /* No stash in name, so see how we can default */
1826
1827     if ( gv_is_in_main(name, len, is_utf8) ) {
1828         *stash = PL_defstash;
1829     }
1830     else {
1831         if (IN_PERL_COMPILETIME) {
1832             *stash = PL_curstash;
1833             if (add && (PL_hints & HINT_STRICT_VARS) &&
1834                 sv_type != SVt_PVCV &&
1835                 sv_type != SVt_PVGV &&
1836                 sv_type != SVt_PVFM &&
1837                 sv_type != SVt_PVIO &&
1838                 !(len == 1 && sv_type == SVt_PV &&
1839                 (*name == 'a' || *name == 'b')) )
1840             {
1841                 GV**gvp = (GV**)hv_fetch(*stash,name,is_utf8 ? -(I32)len : (I32)len,0);
1842                 if (!gvp || *gvp == (const GV *)&PL_sv_undef ||
1843                     SvTYPE(*gvp) != SVt_PVGV)
1844                 {
1845                     *stash = NULL;
1846                 }
1847                 else if ((sv_type == SVt_PV   && !GvIMPORTED_SV(*gvp)) ||
1848                          (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1849                          (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
1850                 {
1851                     /* diag_listed_as: Variable "%s" is not imported%s */
1852                     Perl_ck_warner_d(
1853                         aTHX_ packWARN(WARN_MISC),
1854                         "Variable \"%c%" UTF8f "\" is not imported",
1855                         sv_type == SVt_PVAV ? '@' :
1856                         sv_type == SVt_PVHV ? '%' : '$',
1857                         UTF8fARG(is_utf8, len, name));
1858                     if (GvCVu(*gvp))
1859                         Perl_ck_warner_d(
1860                             aTHX_ packWARN(WARN_MISC),
1861                             "\t(Did you mean &%" UTF8f " instead?)\n",
1862                             UTF8fARG(is_utf8, len, name)
1863                         );
1864                     *stash = NULL;
1865                 }
1866             }
1867         }
1868         else {
1869             /* Use the current op's stash */
1870             *stash = CopSTASH(PL_curcop);
1871         }
1872     }
1873
1874     if (!*stash) {
1875         if (add && !PL_in_clean_all) {
1876             GV *gv;
1877             qerror(Perl_mess(aTHX_
1878                  "Global symbol \"%s%" UTF8f
1879                  "\" requires explicit package name (did you forget to "
1880                  "declare \"my %s%" UTF8f "\"?)",
1881                  (sv_type == SVt_PV ? "$"
1882                   : sv_type == SVt_PVAV ? "@"
1883                   : sv_type == SVt_PVHV ? "%"
1884                   : ""), UTF8fARG(is_utf8, len, name),
1885                  (sv_type == SVt_PV ? "$"
1886                   : sv_type == SVt_PVAV ? "@"
1887                   : sv_type == SVt_PVHV ? "%"
1888                   : ""), UTF8fARG(is_utf8, len, name)));
1889             /* To maintain the output of errors after the strict exception
1890              * above, and to keep compat with older releases, rather than
1891              * placing the variables in the pad, we place
1892              * them in the <none>:: stash.
1893              */
1894             gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
1895             if (!gv) {
1896                 /* symbol table under destruction */
1897                 return FALSE;
1898             }
1899             *stash = GvHV(gv);
1900         }
1901         else
1902             return FALSE;
1903     }
1904
1905     if (!SvREFCNT(*stash))   /* symbol table under destruction */
1906         return FALSE;
1907
1908     return TRUE;
1909 }
1910
1911 /* gv_magicalize only turns on the SVf_READONLY flag, not SVf_PROTECT.  So
1912    redefine SvREADONLY_on for that purpose.  We don’t use it later on in
1913    this file.  */
1914 #undef SvREADONLY_on
1915 #define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)
1916
1917 /* gv_magicalize() is called by gv_fetchpvn_flags when creating
1918  * a new GV.
1919  * Note that it does not insert the GV into the stash prior to
1920  * magicalization, which some variables require need in order
1921  * to work (like %+, %-, %!), so callers must take care of
1922  * that.
1923  * 
1924  * It returns true if the gv did turn out to be magical one; i.e.,
1925  * if gv_magicalize actually did something.
1926  */
1927 PERL_STATIC_INLINE bool
1928 S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
1929                       const svtype sv_type)
1930 {
1931     SSize_t paren;
1932
1933     PERL_ARGS_ASSERT_GV_MAGICALIZE;
1934     
1935     if (stash != PL_defstash) { /* not the main stash */
1936         /* We only have to check for a few names here: a, b, EXPORT, ISA
1937            and VERSION. All the others apply only to the main stash or to
1938            CORE (which is checked right after this). */
1939         if (len) {
1940             switch (*name) {
1941             case 'E':
1942                 if (
1943                     len >= 6 && name[1] == 'X' &&
1944                     (memEQs(name, len, "EXPORT")
1945                     ||memEQs(name, len, "EXPORT_OK")
1946                     ||memEQs(name, len, "EXPORT_FAIL")
1947                     ||memEQs(name, len, "EXPORT_TAGS"))
1948                 )
1949                     GvMULTI_on(gv);
1950                 break;
1951             case 'I':
1952                 if (memEQs(name, len, "ISA"))
1953                     gv_magicalize_isa(gv);
1954                 break;
1955             case 'V':
1956                 if (memEQs(name, len, "VERSION"))
1957                     GvMULTI_on(gv);
1958                 break;
1959             case 'a':
1960                 if (stash == PL_debstash && memEQs(name, len, "args")) {
1961                     GvMULTI_on(gv_AVadd(gv));
1962                     break;
1963                 }
1964                 /* FALLTHROUGH */
1965             case 'b':
1966                 if (len == 1 && sv_type == SVt_PV)
1967                     GvMULTI_on(gv);
1968                 /* FALLTHROUGH */
1969             default:
1970                 goto try_core;
1971             }
1972             goto ret;
1973         }
1974       try_core:
1975         if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
1976           /* Avoid null warning: */
1977           const char * const stashname = HvNAME(stash); assert(stashname);
1978           if (strBEGINs(stashname, "CORE"))
1979             S_maybe_add_coresub(aTHX_ 0, gv, name, len);
1980         }
1981     }
1982     else if (len > 1) {
1983 #ifndef EBCDIC
1984         if (*name > 'V' ) {
1985             NOOP;
1986             /* Nothing else to do.
1987                The compiler will probably turn the switch statement into a
1988                branch table. Make sure we avoid even that small overhead for
1989                the common case of lower case variable names.  (On EBCDIC
1990                platforms, we can't just do:
1991                  if (NATIVE_TO_ASCII(*name) > NATIVE_TO_ASCII('V') ) {
1992                because cases like '\027' in the switch statement below are
1993                C1 (non-ASCII) controls on those platforms, so the remapping
1994                would make them larger than 'V')
1995              */
1996         } else
1997 #endif
1998         {
1999             switch (*name) {
2000             case 'A':
2001                 if (memEQs(name, len, "ARGV")) {
2002                     IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
2003                 }
2004                 else if (memEQs(name, len, "ARGVOUT")) {
2005                     GvMULTI_on(gv);
2006                 }
2007                 break;
2008             case 'E':
2009                 if (
2010                     len >= 6 && name[1] == 'X' &&
2011                     (memEQs(name, len, "EXPORT")
2012                     ||memEQs(name, len, "EXPORT_OK")
2013                     ||memEQs(name, len, "EXPORT_FAIL")
2014                     ||memEQs(name, len, "EXPORT_TAGS"))
2015                 )
2016                     GvMULTI_on(gv);
2017                 break;
2018             case 'I':
2019                 if (memEQs(name, len, "ISA")) {
2020                     gv_magicalize_isa(gv);
2021                 }
2022                 break;
2023             case 'S':
2024                 if (memEQs(name, len, "SIG")) {
2025                     HV *hv;
2026                     I32 i;
2027                     if (!PL_psig_name) {
2028                         Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
2029                         Newxz(PL_psig_pend, SIG_SIZE, int);
2030                         PL_psig_ptr = PL_psig_name + SIG_SIZE;
2031                     } else {
2032                         /* I think that the only way to get here is to re-use an
2033                            embedded perl interpreter, where the previous
2034                            use didn't clean up fully because
2035                            PL_perl_destruct_level was 0. I'm not sure that we
2036                            "support" that, in that I suspect in that scenario
2037                            there are sufficient other garbage values left in the
2038                            interpreter structure that something else will crash
2039                            before we get here. I suspect that this is one of
2040                            those "doctor, it hurts when I do this" bugs.  */
2041                         Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
2042                         Zero(PL_psig_pend, SIG_SIZE, int);
2043                     }
2044                     GvMULTI_on(gv);
2045                     hv = GvHVn(gv);
2046                     hv_magic(hv, NULL, PERL_MAGIC_sig);
2047                     for (i = 1; i < SIG_SIZE; i++) {
2048                         SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
2049                         if (init)
2050                             sv_setsv(*init, &PL_sv_undef);
2051                     }
2052                 }
2053                 break;
2054             case 'V':
2055                 if (memEQs(name, len, "VERSION"))
2056                     GvMULTI_on(gv);
2057                 break;
2058             case '\003':        /* $^CHILD_ERROR_NATIVE */
2059                 if (memEQs(name, len, "\003HILD_ERROR_NATIVE"))
2060                     goto magicalize;
2061                                 /* @{^CAPTURE} %{^CAPTURE} */
2062                 if (memEQs(name, len, "\003APTURE")) {
2063                     AV* const av = GvAVn(gv);
2064                     const Size_t n = *name;
2065
2066                     sv_magic(MUTABLE_SV(av), (SV*)n, PERL_MAGIC_regdata, NULL, 0);
2067                     SvREADONLY_on(av);
2068
2069                     require_tie_mod_s(gv, '+', "Tie::Hash::NamedCapture",0);
2070
2071                 } else          /* %{^CAPTURE_ALL} */
2072                 if (memEQs(name, len, "\003APTURE_ALL")) {
2073                     require_tie_mod_s(gv, '-', "Tie::Hash::NamedCapture",0);
2074                 }
2075                 break;
2076             case '\005':        /* $^ENCODING */
2077                 if (memEQs(name, len, "\005NCODING"))
2078                     goto magicalize;
2079                 break;
2080             case '\007':        /* $^GLOBAL_PHASE */
2081                 if (memEQs(name, len, "\007LOBAL_PHASE"))
2082                     goto ro_magicalize;
2083                 break;
2084             case '\014':        /* $^LAST_FH */
2085                 if (memEQs(name, len, "\014AST_FH"))
2086                     goto ro_magicalize;
2087                 break;
2088             case '\015':        /* $^MATCH */
2089                 if (memEQs(name, len, "\015ATCH")) {
2090                     paren = RX_BUFF_IDX_CARET_FULLMATCH;
2091                     goto storeparen;
2092                 }
2093                 break;
2094             case '\017':        /* $^OPEN */
2095                 if (memEQs(name, len, "\017PEN"))
2096                     goto magicalize;
2097                 break;
2098             case '\020':        /* $^PREMATCH  $^POSTMATCH */
2099                 if (memEQs(name, len, "\020REMATCH")) {
2100                     paren = RX_BUFF_IDX_CARET_PREMATCH;
2101                     goto storeparen;
2102                 }
2103                 if (memEQs(name, len, "\020OSTMATCH")) {
2104                     paren = RX_BUFF_IDX_CARET_POSTMATCH;
2105                     goto storeparen;
2106                 }
2107                 break;
2108             case '\023':
2109                 if (memEQs(name, len, "\023AFE_LOCALES"))
2110                     goto ro_magicalize;
2111                 break;
2112             case '\024':        /* ${^TAINT} */
2113                 if (memEQs(name, len, "\024AINT"))
2114                     goto ro_magicalize;
2115                 break;
2116             case '\025':        /* ${^UNICODE}, ${^UTF8LOCALE} */
2117                 if (memEQs(name, len, "\025NICODE"))
2118                     goto ro_magicalize;
2119                 if (memEQs(name, len, "\025TF8LOCALE"))
2120                     goto ro_magicalize;
2121                 if (memEQs(name, len, "\025TF8CACHE"))
2122                     goto magicalize;
2123                 break;
2124             case '\027':        /* $^WARNING_BITS */
2125                 if (memEQs(name, len, "\027ARNING_BITS"))
2126                     goto magicalize;
2127 #ifdef WIN32
2128                 else if (memEQs(name, len, "\027IN32_SLOPPY_STAT"))
2129                     goto magicalize;
2130 #endif
2131                 break;
2132             case '1':
2133             case '2':
2134             case '3':
2135             case '4':
2136             case '5':
2137             case '6':
2138             case '7':
2139             case '8':
2140             case '9':
2141             {
2142                 /* Ensures that we have an all-digit variable, ${"1foo"} fails
2143                    this test  */
2144                 UV uv;
2145                 if (!grok_atoUV(name, &uv, NULL) || uv > I32_MAX)
2146                     goto ret;
2147                 /* XXX why are we using a SSize_t? */
2148                 paren = (SSize_t)(I32)uv;
2149                 goto storeparen;
2150             }
2151             }
2152         }
2153     } else {
2154         /* Names of length 1.  (Or 0. But name is NUL terminated, so that will
2155            be case '\0' in this switch statement (ie a default case)  */
2156         switch (*name) {
2157         case '&':               /* $& */
2158             paren = RX_BUFF_IDX_FULLMATCH;
2159             goto sawampersand;
2160         case '`':               /* $` */
2161             paren = RX_BUFF_IDX_PREMATCH;
2162             goto sawampersand;
2163         case '\'':              /* $' */
2164             paren = RX_BUFF_IDX_POSTMATCH;
2165         sawampersand:
2166 #ifdef PERL_SAWAMPERSAND
2167             if (!(
2168                 sv_type == SVt_PVAV ||
2169                 sv_type == SVt_PVHV ||
2170                 sv_type == SVt_PVCV ||
2171                 sv_type == SVt_PVFM ||
2172                 sv_type == SVt_PVIO
2173                 )) { PL_sawampersand |=
2174                         (*name == '`')
2175                             ? SAWAMPERSAND_LEFT
2176                             : (*name == '&')
2177                                 ? SAWAMPERSAND_MIDDLE
2178                                 : SAWAMPERSAND_RIGHT;
2179                 }
2180 #endif
2181             goto storeparen;
2182         case '1':               /* $1 */
2183         case '2':               /* $2 */
2184         case '3':               /* $3 */
2185         case '4':               /* $4 */
2186         case '5':               /* $5 */
2187         case '6':               /* $6 */
2188         case '7':               /* $7 */
2189         case '8':               /* $8 */
2190         case '9':               /* $9 */
2191             paren = *name - '0';
2192
2193         storeparen:
2194             /* Flag the capture variables with a NULL mg_ptr
2195                Use mg_len for the array index to lookup.  */
2196             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, NULL, paren);
2197             break;
2198
2199         case ':':               /* $: */
2200             sv_setpv(GvSVn(gv),PL_chopset);
2201             goto magicalize;
2202
2203         case '?':               /* $? */
2204 #ifdef COMPLEX_STATUS
2205             SvUPGRADE(GvSVn(gv), SVt_PVLV);
2206 #endif
2207             goto magicalize;
2208
2209         case '!':               /* $! */
2210             GvMULTI_on(gv);
2211             /* If %! has been used, automatically load Errno.pm. */
2212
2213             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
2214
2215             /* magicalization must be done before require_tie_mod_s is called */
2216             if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
2217                 require_tie_mod_s(gv, '!', "Errno", 1);
2218
2219             break;
2220         case '-':               /* $-, %-, @- */
2221         case '+':               /* $+, %+, @+ */
2222             GvMULTI_on(gv); /* no used once warnings here */
2223             {   /* $- $+ */
2224                 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
2225                 if (*name == '+')
2226                     SvREADONLY_on(GvSVn(gv));
2227             }
2228             {   /* %- %+ */
2229                 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
2230                     require_tie_mod_s(gv, *name, "Tie::Hash::NamedCapture",0);
2231             }
2232             {   /* @- @+ */
2233                 AV* const av = GvAVn(gv);
2234                 const Size_t n = *name;
2235
2236                 sv_magic(MUTABLE_SV(av), (SV*)n, PERL_MAGIC_regdata, NULL, 0);
2237                 SvREADONLY_on(av);
2238             }
2239             break;
2240         case '*':               /* $* */
2241         case '#':               /* $# */
2242         if (sv_type == SVt_PV)
2243             /* diag_listed_as: $* is no longer supported as of Perl 5.30 */
2244             Perl_croak(aTHX_ "$%c is no longer supported as of Perl 5.30", *name);
2245         break;
2246         case '\010':    /* $^H */
2247             {
2248                 HV *const hv = GvHVn(gv);
2249                 hv_magic(hv, NULL, PERL_MAGIC_hints);
2250             }
2251             goto magicalize;
2252         case '\023':    /* $^S */
2253         ro_magicalize:
2254             SvREADONLY_on(GvSVn(gv));
2255             /* FALLTHROUGH */
2256         case '0':               /* $0 */
2257         case '^':               /* $^ */
2258         case '~':               /* $~ */
2259         case '=':               /* $= */
2260         case '%':               /* $% */
2261         case '.':               /* $. */
2262         case '(':               /* $( */
2263         case ')':               /* $) */
2264         case '<':               /* $< */
2265         case '>':               /* $> */
2266         case '\\':              /* $\ */
2267         case '/':               /* $/ */
2268         case '|':               /* $| */
2269         case '$':               /* $$ */
2270         case '[':               /* $[ */
2271         case '\001':    /* $^A */
2272         case '\003':    /* $^C */
2273         case '\004':    /* $^D */
2274         case '\005':    /* $^E */
2275         case '\006':    /* $^F */
2276         case '\011':    /* $^I, NOT \t in EBCDIC */
2277         case '\016':    /* $^N */
2278         case '\017':    /* $^O */
2279         case '\020':    /* $^P */
2280         case '\024':    /* $^T */
2281         case '\027':    /* $^W */
2282         magicalize:
2283             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
2284             break;
2285
2286         case '\014':    /* $^L */
2287             sv_setpvs(GvSVn(gv),"\f");
2288             break;
2289         case ';':               /* $; */
2290             sv_setpvs(GvSVn(gv),"\034");
2291             break;
2292         case ']':               /* $] */
2293         {
2294             SV * const sv = GvSV(gv);
2295             if (!sv_derived_from(PL_patchlevel, "version"))
2296                 upg_version(PL_patchlevel, TRUE);
2297             GvSV(gv) = vnumify(PL_patchlevel);
2298             SvREADONLY_on(GvSV(gv));
2299             SvREFCNT_dec(sv);
2300         }
2301         break;
2302         case '\026':    /* $^V */
2303         {
2304             SV * const sv = GvSV(gv);
2305             GvSV(gv) = new_version(PL_patchlevel);
2306             SvREADONLY_on(GvSV(gv));
2307             SvREFCNT_dec(sv);
2308         }
2309         break;
2310         case 'a':
2311         case 'b':
2312             if (sv_type == SVt_PV)
2313                 GvMULTI_on(gv);
2314         }
2315     }
2316
2317    ret:
2318     /* Return true if we actually did something.  */
2319     return GvAV(gv) || GvHV(gv) || GvIO(gv) || GvCV(gv)
2320         || ( GvSV(gv) && (
2321                            SvOK(GvSV(gv)) || SvMAGICAL(GvSV(gv))
2322                          )
2323            );
2324 }
2325
2326 /* If we do ever start using this later on in the file, we need to make
2327    sure we don’t accidentally use the wrong definition.  */
2328 #undef SvREADONLY_on
2329
2330 /* This function is called when the stash already holds the GV of the magic
2331  * variable we're looking for, but we need to check that it has the correct
2332  * kind of magic.  For example, if someone first uses $! and then %!, the
2333  * latter would end up here, and we add the Errno tie to the HASH slot of
2334  * the *! glob.
2335  */
2336 PERL_STATIC_INLINE void
2337 S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type)
2338 {
2339     PERL_ARGS_ASSERT_MAYBE_MULTIMAGIC_GV;
2340
2341     if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
2342         if (*name == '!')
2343             require_tie_mod_s(gv, '!', "Errno", 1);
2344         else if (*name == '-' || *name == '+')
2345             require_tie_mod_s(gv, *name, "Tie::Hash::NamedCapture", 0);
2346     } else if (sv_type == SVt_PV) {
2347         if (*name == '*' || *name == '#') {
2348             /* diag_listed_as: $* is no longer supported as of Perl 5.30 */
2349             Perl_croak(aTHX_ "$%c is no longer supported as of Perl 5.30", *name);
2350         }
2351     }
2352     if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
2353       switch (*name) {
2354 #ifdef PERL_SAWAMPERSAND
2355       case '`':
2356           PL_sawampersand |= SAWAMPERSAND_LEFT;
2357           (void)GvSVn(gv);
2358           break;
2359       case '&':
2360           PL_sawampersand |= SAWAMPERSAND_MIDDLE;
2361           (void)GvSVn(gv);
2362           break;
2363       case '\'':
2364           PL_sawampersand |= SAWAMPERSAND_RIGHT;
2365           (void)GvSVn(gv);
2366           break;
2367 #endif
2368       }
2369     }
2370 }
2371
2372 GV *
2373 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
2374                        const svtype sv_type)
2375 {
2376     const char *name = nambeg;
2377     GV *gv = NULL;
2378     GV**gvp;
2379     STRLEN len;
2380     HV *stash = NULL;
2381     const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
2382     const I32 no_expand = flags & GV_NOEXPAND;
2383     const I32 add = flags & ~GV_NOADD_MASK;
2384     const U32 is_utf8 = flags & SVf_UTF8;
2385     bool addmg = cBOOL(flags & GV_ADDMG);
2386     const char *const name_end = nambeg + full_len;
2387     U32 faking_it;
2388
2389     PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
2390
2391      /* If we have GV_NOTQUAL, the caller promised that
2392       * there is no stash, so we can skip the check.
2393       * Similarly if full_len is 0, since then we're
2394       * dealing with something like *{""} or ""->foo()
2395       */
2396     if ((flags & GV_NOTQUAL) || !full_len) {
2397         len = full_len;
2398     }
2399     else if (parse_gv_stash_name(&stash, &gv, &name, &len, nambeg, full_len, is_utf8, add)) {
2400         if (name == name_end) return gv;
2401     }
2402     else {
2403         return NULL;
2404     }
2405
2406     if (!stash && !find_default_stash(&stash, name, len, is_utf8, add, sv_type)) {
2407         return NULL;
2408     }
2409     
2410     /* By this point we should have a stash and a name */
2411     gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -(I32)len : (I32)len,add);
2412     if (!gvp || *gvp == (const GV *)&PL_sv_undef) {
2413         if (addmg) gv = (GV *)newSV(0);
2414         else return NULL;
2415     }
2416     else gv = *gvp, addmg = 0;
2417     /* From this point on, addmg means gv has not been inserted in the
2418        symtab yet. */
2419
2420     if (SvTYPE(gv) == SVt_PVGV) {
2421         /* The GV already exists, so return it, but check if we need to do
2422          * anything else with it before that.
2423          */
2424         if (add) {
2425             /* This is the heuristic that handles if a variable triggers the
2426              * 'used only once' warning.  If there's already a GV in the stash
2427              * with this name, then we assume that the variable has been used
2428              * before and turn its MULTI flag on.
2429              * It's a heuristic because it can easily be "tricked", like with
2430              * BEGIN { $a = 1; $::{foo} = *a }; () = $foo
2431              * not warning about $main::foo being used just once
2432              */
2433             GvMULTI_on(gv);
2434             gv_init_svtype(gv, sv_type);
2435             /* You reach this path once the typeglob has already been created,
2436                either by the same or a different sigil.  If this path didn't
2437                exist, then (say) referencing $! first, and %! second would
2438                mean that %! was not handled correctly.  */
2439             if (len == 1 && stash == PL_defstash) {
2440                 maybe_multimagic_gv(gv, name, sv_type);
2441             }
2442             else if (sv_type == SVt_PVAV
2443                   && memEQs(name, len, "ISA")
2444                   && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
2445                 gv_magicalize_isa(gv);
2446         }
2447         return gv;
2448     } else if (no_init) {
2449         assert(!addmg);
2450         return gv;
2451     }
2452     /* If GV_NOEXPAND is true and what we got off the stash is a ref,
2453      * don't expand it to a glob. This is an optimization so that things
2454      * copying constants over, like Exporter, don't have to be rewritten
2455      * to take into account that you can store more than just globs in
2456      * stashes.
2457      */
2458     else if (no_expand && SvROK(gv)) {
2459         assert(!addmg);
2460         return gv;
2461     }
2462
2463     /* Adding a new symbol.
2464        Unless of course there was already something non-GV here, in which case
2465        we want to behave as if there was always a GV here, containing some sort
2466        of subroutine.
2467        Otherwise we run the risk of creating things like GvIO, which can cause
2468        subtle bugs. eg the one that tripped up SQL::Translator  */
2469
2470     faking_it = SvOK(gv);
2471
2472     if (add & GV_ADDWARN)
2473         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2474                 "Had to create %" UTF8f " unexpectedly",
2475                  UTF8fARG(is_utf8, name_end-nambeg, nambeg));
2476     gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8);
2477
2478     if (   full_len != 0
2479         && isIDFIRST_lazy_if_safe(name, name + full_len, is_utf8)
2480         && !ckWARN(WARN_ONCE) )
2481     {
2482         GvMULTI_on(gv) ;
2483     }
2484
2485     /* set up magic where warranted */
2486     if ( gv_magicalize(gv, stash, name, len, sv_type) ) {
2487         /* See 23496c6 */
2488         if (addmg) {
2489                 /* gv_magicalize magicalised this gv, so we want it
2490                  * stored in the symtab.
2491                  * Effectively the caller is asking, â€˜Does this gv exist?’ 
2492                  * And we respond, â€˜Er, *now* it does!’
2493                  */
2494                 (void)hv_store(stash,name,len,(SV *)gv,0);
2495         }
2496     }
2497     else if (addmg) {
2498                 /* The temporary GV created above */
2499                 SvREFCNT_dec_NN(gv);
2500                 gv = NULL;
2501     }
2502     
2503     if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type);
2504     return gv;
2505 }
2506
2507 void
2508 Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2509 {
2510     const char *name;
2511     const HV * const hv = GvSTASH(gv);
2512
2513     PERL_ARGS_ASSERT_GV_FULLNAME4;
2514
2515     sv_setpv(sv, prefix ? prefix : "");
2516
2517     if (hv && (name = HvNAME(hv))) {
2518       const STRLEN len = HvNAMELEN(hv);
2519       if (keepmain || ! memBEGINs(name, len, "main")) {
2520         sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES);
2521         sv_catpvs(sv,"::");
2522       }
2523     }
2524     else sv_catpvs(sv,"__ANON__::");
2525     sv_catsv(sv,sv_2mortal(newSVhek(GvNAME_HEK(gv))));
2526 }
2527
2528 void
2529 Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2530 {
2531     const GV * const egv = GvEGVx(gv);
2532
2533     PERL_ARGS_ASSERT_GV_EFULLNAME4;
2534
2535     gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
2536 }
2537
2538
2539 /* recursively scan a stash and any nested stashes looking for entries
2540  * that need the "only used once" warning raised
2541  */
2542
2543 void
2544 Perl_gv_check(pTHX_ HV *stash)
2545 {
2546     I32 i;
2547
2548     PERL_ARGS_ASSERT_GV_CHECK;
2549
2550     if (!SvOOK(stash))
2551         return;
2552
2553     assert(HvARRAY(stash));
2554
2555     for (i = 0; i <= (I32) HvMAX(stash); i++) {
2556         const HE *entry;
2557         /* mark stash is being scanned, to avoid recursing */
2558         HvAUX(stash)->xhv_aux_flags |= HvAUXf_SCAN_STASH;
2559         for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
2560             GV *gv;
2561             HV *hv;
2562             STRLEN keylen = HeKLEN(entry);
2563             const char * const key = HeKEY(entry);
2564
2565             if (keylen >= 2 && key[keylen-2] == ':'  && key[keylen-1] == ':' &&
2566                 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
2567             {
2568                 if (hv != PL_defstash && hv != stash
2569                     && !(SvOOK(hv)
2570                         && (HvAUX(hv)->xhv_aux_flags & HvAUXf_SCAN_STASH))
2571                 )
2572                      gv_check(hv);              /* nested package */
2573             }
2574             else if (   HeKLEN(entry) != 0
2575                      && *HeKEY(entry) != '_'
2576                      && isIDFIRST_lazy_if_safe(HeKEY(entry),
2577                                                HeKEY(entry) + HeKLEN(entry),
2578                                                HeUTF8(entry)) )
2579             {
2580                 const char *file;
2581                 gv = MUTABLE_GV(HeVAL(entry));
2582                 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
2583                     continue;
2584                 file = GvFILE(gv);
2585                 CopLINE_set(PL_curcop, GvLINE(gv));
2586 #ifdef USE_ITHREADS
2587                 CopFILE(PL_curcop) = (char *)file;      /* set for warning */
2588 #else
2589                 CopFILEGV(PL_curcop)
2590                     = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
2591 #endif
2592                 Perl_warner(aTHX_ packWARN(WARN_ONCE),
2593                         "Name \"%" HEKf "::%" HEKf
2594                         "\" used only once: possible typo",
2595                             HEKfARG(HvNAME_HEK(stash)),
2596                             HEKfARG(GvNAME_HEK(gv)));
2597             }
2598         }
2599         HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_SCAN_STASH;
2600     }
2601 }
2602
2603 GV *
2604 Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags)
2605 {
2606     PERL_ARGS_ASSERT_NEWGVGEN_FLAGS;
2607     assert(!(flags & ~SVf_UTF8));
2608
2609     return gv_fetchpv(Perl_form(aTHX_ "%" UTF8f "::_GEN_%ld",
2610                                 UTF8fARG(flags, strlen(pack), pack),
2611                                 (long)PL_gensym++),
2612                       GV_ADD, SVt_PVGV);
2613 }
2614
2615 /* hopefully this is only called on local symbol table entries */
2616
2617 GP*
2618 Perl_gp_ref(pTHX_ GP *gp)
2619 {
2620     if (!gp)
2621         return NULL;
2622     gp->gp_refcnt++;
2623     if (gp->gp_cv) {
2624         if (gp->gp_cvgen) {
2625             /* If the GP they asked for a reference to contains
2626                a method cache entry, clear it first, so that we
2627                don't infect them with our cached entry */
2628             SvREFCNT_dec_NN(gp->gp_cv);
2629             gp->gp_cv = NULL;
2630             gp->gp_cvgen = 0;
2631         }
2632     }
2633     return gp;
2634 }
2635
2636 void
2637 Perl_gp_free(pTHX_ GV *gv)
2638 {
2639     GP* gp;
2640     int attempts = 100;
2641
2642     if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
2643         return;
2644     if (gp->gp_refcnt == 0) {
2645         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2646                          "Attempt to free unreferenced glob pointers"
2647                          pTHX__FORMAT pTHX__VALUE);
2648         return;
2649     }
2650     if (gp->gp_refcnt > 1) {
2651        borrowed:
2652         if (gp->gp_egv == gv)
2653             gp->gp_egv = 0;
2654         gp->gp_refcnt--;
2655         GvGP_set(gv, NULL);
2656         return;
2657     }
2658
2659     while (1) {
2660       /* Copy and null out all the glob slots, so destructors do not see
2661          freed SVs. */
2662       HEK * const file_hek = gp->gp_file_hek;
2663       SV  * const sv       = gp->gp_sv;
2664       AV  * const av       = gp->gp_av;
2665       HV  * const hv       = gp->gp_hv;
2666       IO  * const io       = gp->gp_io;
2667       CV  * const cv       = gp->gp_cv;
2668       CV  * const form     = gp->gp_form;
2669
2670       gp->gp_file_hek = NULL;
2671       gp->gp_sv       = NULL;
2672       gp->gp_av       = NULL;
2673       gp->gp_hv       = NULL;
2674       gp->gp_io       = NULL;
2675       gp->gp_cv       = NULL;
2676       gp->gp_form     = NULL;
2677
2678       if (file_hek)
2679         unshare_hek(file_hek);
2680
2681       SvREFCNT_dec(sv);
2682       SvREFCNT_dec(av);
2683       /* FIXME - another reference loop GV -> symtab -> GV ?
2684          Somehow gp->gp_hv can end up pointing at freed garbage.  */
2685       if (hv && SvTYPE(hv) == SVt_PVHV) {
2686         const HEK *hvname_hek = HvNAME_HEK(hv);
2687         if (PL_stashcache && hvname_hek) {
2688            DEBUG_o(Perl_deb(aTHX_
2689                           "gp_free clearing PL_stashcache for '%" HEKf "'\n",
2690                            HEKfARG(hvname_hek)));
2691            (void)hv_deletehek(PL_stashcache, hvname_hek, G_DISCARD);
2692         }
2693         SvREFCNT_dec(hv);
2694       }
2695       if (io && SvREFCNT(io) == 1 && IoIFP(io)
2696              && (IoTYPE(io) == IoTYPE_WRONLY ||
2697                  IoTYPE(io) == IoTYPE_RDWR   ||
2698                  IoTYPE(io) == IoTYPE_APPEND)
2699              && ckWARN_d(WARN_IO)
2700              && IoIFP(io) != PerlIO_stdin()
2701              && IoIFP(io) != PerlIO_stdout()
2702              && IoIFP(io) != PerlIO_stderr()
2703              && !(IoFLAGS(io) & IOf_FAKE_DIRP))
2704         io_close(io, gv, FALSE, TRUE);
2705       SvREFCNT_dec(io);
2706       SvREFCNT_dec(cv);
2707       SvREFCNT_dec(form);
2708
2709       /* Possibly reallocated by a destructor */
2710       gp = GvGP(gv);
2711
2712       if (!gp->gp_file_hek
2713        && !gp->gp_sv
2714        && !gp->gp_av
2715        && !gp->gp_hv
2716        && !gp->gp_io
2717        && !gp->gp_cv
2718        && !gp->gp_form) break;
2719
2720       if (--attempts == 0) {
2721         Perl_die(aTHX_
2722           "panic: gp_free failed to free glob pointer - "
2723           "something is repeatedly re-creating entries"
2724         );
2725       }
2726     }
2727
2728     /* Possibly incremented by a destructor doing glob assignment */
2729     if (gp->gp_refcnt > 1) goto borrowed;
2730     Safefree(gp);
2731     GvGP_set(gv, NULL);
2732 }
2733
2734 int
2735 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
2736 {
2737     AMT * const amtp = (AMT*)mg->mg_ptr;
2738     PERL_UNUSED_ARG(sv);
2739
2740     PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
2741
2742     if (amtp && AMT_AMAGIC(amtp)) {
2743         int i;
2744         for (i = 1; i < NofAMmeth; i++) {
2745             CV * const cv = amtp->table[i];
2746             if (cv) {
2747                 SvREFCNT_dec_NN(MUTABLE_SV(cv));
2748                 amtp->table[i] = NULL;
2749             }
2750         }
2751     }
2752  return 0;
2753 }
2754
2755 /* Updates and caches the CV's */
2756 /* Returns:
2757  * 1 on success and there is some overload
2758  * 0 if there is no overload
2759  * -1 if some error occurred and it couldn't croak
2760  */
2761
2762 int
2763 Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
2764 {
2765   MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2766   AMT amt;
2767   const struct mro_meta* stash_meta = HvMROMETA(stash);
2768   U32 newgen;
2769
2770   PERL_ARGS_ASSERT_GV_AMUPDATE;
2771
2772   newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2773   if (mg) {
2774       const AMT * const amtp = (AMT*)mg->mg_ptr;
2775       if (amtp->was_ok_sub == newgen) {
2776           return AMT_AMAGIC(amtp) ? 1 : 0;
2777       }
2778       sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
2779   }
2780
2781   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
2782
2783   Zero(&amt,1,AMT);
2784   amt.was_ok_sub = newgen;
2785   amt.fallback = AMGfallNO;
2786   amt.flags = 0;
2787
2788   {
2789     int filled = 0;
2790     int i;
2791     bool deref_seen = 0;
2792
2793
2794     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
2795
2796     /* Try to find via inheritance. */
2797     GV *gv = gv_fetchmeth_pvn(stash, PL_AMG_names[0], 2, -1, 0);
2798     SV * const sv = gv ? GvSV(gv) : NULL;
2799     CV* cv;
2800
2801     if (!gv)
2802     {
2803       if (!gv_fetchmeth_pvn(stash, "((", 2, -1, 0))
2804         goto no_table;
2805     }
2806 #ifdef PERL_DONT_CREATE_GVSV
2807     else if (!sv) {
2808         NOOP;   /* Equivalent to !SvTRUE and !SvOK  */
2809     }
2810 #endif
2811     else if (SvTRUE(sv))
2812         /* don't need to set overloading here because fallback => 1
2813          * is the default setting for classes without overloading */
2814         amt.fallback=AMGfallYES;
2815     else if (SvOK(sv)) {
2816         amt.fallback=AMGfallNEVER;
2817         filled = 1;
2818     }
2819     else {
2820         filled = 1;
2821     }
2822
2823     assert(SvOOK(stash));
2824     /* initially assume the worst */
2825     HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_NO_DEREF;
2826
2827     for (i = 1; i < NofAMmeth; i++) {
2828         const char * const cooky = PL_AMG_names[i];
2829         /* Human-readable form, for debugging: */
2830         const char * const cp = AMG_id2name(i);
2831         const STRLEN l = PL_AMG_namelens[i];
2832
2833         DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
2834                      cp, HvNAME_get(stash)) );
2835         /* don't fill the cache while looking up!
2836            Creation of inheritance stubs in intermediate packages may
2837            conflict with the logic of runtime method substitution.
2838            Indeed, for inheritance A -> B -> C, if C overloads "+0",
2839            then we could have created stubs for "(+0" in A and C too.
2840            But if B overloads "bool", we may want to use it for
2841            numifying instead of C's "+0". */
2842         gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
2843         cv = 0;
2844         if (gv && (cv = GvCV(gv)) && CvHASGV(cv)) {
2845             const HEK * const gvhek = CvGvNAME_HEK(cv);
2846             const HEK * const stashek =
2847                 HvNAME_HEK(CvNAMED(cv) ? CvSTASH(cv) : GvSTASH(CvGV(cv)));
2848             if (memEQs(HEK_KEY(gvhek), HEK_LEN(gvhek), "nil")
2849              && stashek
2850              && memEQs(HEK_KEY(stashek), HEK_LEN(stashek), "overload")) {
2851                 /* This is a hack to support autoloading..., while
2852                    knowing *which* methods were declared as overloaded. */
2853                 /* GvSV contains the name of the method. */
2854                 GV *ngv = NULL;
2855                 SV *gvsv = GvSV(gv);
2856
2857                 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%" SVf256\
2858                         "\" for overloaded \"%s\" in package \"%.256s\"\n",
2859                              (void*)GvSV(gv), cp, HvNAME(stash)) );
2860                 if (!gvsv || !SvPOK(gvsv)
2861                     || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0)))
2862                 {
2863                     /* Can be an import stub (created by "can"). */
2864                     if (destructing) {
2865                         return -1;
2866                     }
2867                     else {
2868                         const SV * const name = (gvsv && SvPOK(gvsv))
2869                                                     ? gvsv
2870                                                     : newSVpvs_flags("???", SVs_TEMP);
2871                         /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */
2872                         Perl_croak(aTHX_ "%s method \"%" SVf256
2873                                     "\" overloading \"%s\" "\
2874                                     "in package \"%" HEKf256 "\"",
2875                                    (GvCVGEN(gv) ? "Stub found while resolving"
2876                                     : "Can't resolve"),
2877                                    SVfARG(name), cp,
2878                                    HEKfARG(
2879                                         HvNAME_HEK(stash)
2880                                    ));
2881                     }
2882                 }
2883                 cv = GvCV(gv = ngv);
2884             }
2885             DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
2886                          cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
2887                          GvNAME(CvGV(cv))) );
2888             filled = 1;
2889         } else if (gv) {                /* Autoloaded... */
2890             cv = MUTABLE_CV(gv);
2891             filled = 1;
2892         }
2893         amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
2894
2895         if (gv) {
2896             switch (i) {
2897             case to_sv_amg:
2898             case to_av_amg:
2899             case to_hv_amg:
2900             case to_gv_amg:
2901             case to_cv_amg:
2902             case nomethod_amg:
2903                 deref_seen = 1;
2904                 break;
2905             }
2906         }
2907     }
2908     if (!deref_seen)
2909         /* none of @{} etc overloaded; we can do $obj->[N] quicker.
2910          * NB - aux var invalid here, HvARRAY() could have been
2911          * reallocated since it was assigned to */
2912         HvAUX(stash)->xhv_aux_flags |= HvAUXf_NO_DEREF;
2913
2914     if (filled) {
2915       AMT_AMAGIC_on(&amt);
2916       sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2917                                                 (char*)&amt, sizeof(AMT));
2918       return TRUE;
2919     }
2920   }
2921   /* Here we have no table: */
2922  no_table:
2923   AMT_AMAGIC_off(&amt);
2924   sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2925                                                 (char*)&amt, sizeof(AMTS));
2926   return 0;
2927 }
2928
2929
2930 CV*
2931 Perl_gv_handler(pTHX_ HV *stash, I32 id)
2932 {
2933     MAGIC *mg;
2934     AMT *amtp;
2935     U32 newgen;
2936     struct mro_meta* stash_meta;
2937
2938     if (!stash || !HvNAME_get(stash))
2939         return NULL;
2940
2941     stash_meta = HvMROMETA(stash);
2942     newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2943
2944     mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2945     if (!mg) {
2946       do_update:
2947         if (Gv_AMupdate(stash, 0) == -1)
2948             return NULL;
2949         mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2950     }
2951     assert(mg);
2952     amtp = (AMT*)mg->mg_ptr;
2953     if ( amtp->was_ok_sub != newgen )
2954         goto do_update;
2955     if (AMT_AMAGIC(amtp)) {
2956         CV * const ret = amtp->table[id];
2957         if (ret && isGV(ret)) {         /* Autoloading stab */
2958             /* Passing it through may have resulted in a warning
2959                "Inherited AUTOLOAD for a non-method deprecated", since
2960                our caller is going through a function call, not a method call.
2961                So return the CV for AUTOLOAD, setting $AUTOLOAD. */
2962             GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
2963
2964             if (gv && GvCV(gv))
2965                 return GvCV(gv);
2966         }
2967         return ret;
2968     }
2969
2970     return NULL;
2971 }
2972
2973
2974 /* Implement tryAMAGICun_MG macro.
2975    Do get magic, then see if the stack arg is overloaded and if so call it.
2976    Flags:
2977         AMGf_numeric apply sv_2num to the stack arg.
2978 */
2979
2980 bool
2981 Perl_try_amagic_un(pTHX_ int method, int flags) {
2982     dSP;
2983     SV* tmpsv;
2984     SV* const arg = TOPs;
2985
2986     SvGETMAGIC(arg);
2987
2988     if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
2989                                               AMGf_noright | AMGf_unary
2990                                             | (flags & AMGf_numarg))))
2991     {
2992         /* where the op is of the form:
2993          *    $lex = $x op $y (where the assign is optimised away)
2994          * then assign the returned value to targ and return that;
2995          * otherwise return the value directly
2996          */
2997         if (   (PL_opargs[PL_op->op_type] & OA_TARGLEX)
2998             && (PL_op->op_private & OPpTARGET_MY))
2999         {
3000             dTARGET;
3001             sv_setsv(TARG, tmpsv);
3002             SETTARG;
3003         }
3004         else
3005             SETs(tmpsv);
3006
3007         PUTBACK;
3008         return TRUE;
3009     }
3010
3011     if ((flags & AMGf_numeric) && SvROK(arg))
3012         *sp = sv_2num(arg);
3013     return FALSE;
3014 }
3015
3016
3017 /* Implement tryAMAGICbin_MG macro.
3018    Do get magic, then see if the two stack args are overloaded and if so
3019    call it.
3020    Flags:
3021         AMGf_assign  op may be called as mutator (eg +=)
3022         AMGf_numeric apply sv_2num to the stack arg.
3023 */
3024
3025 bool
3026 Perl_try_amagic_bin(pTHX_ int method, int flags) {
3027     dSP;
3028     SV* const left = TOPm1s;
3029     SV* const right = TOPs;
3030
3031     SvGETMAGIC(left);
3032     if (left != right)
3033         SvGETMAGIC(right);
3034
3035     if (SvAMAGIC(left) || SvAMAGIC(right)) {
3036         SV * tmpsv;
3037         /* STACKED implies mutator variant, e.g. $x += 1 */
3038         bool mutator = (flags & AMGf_assign) && (PL_op->op_flags & OPf_STACKED);
3039
3040         tmpsv = amagic_call(left, right, method,
3041                     (mutator ? AMGf_assign: 0)
3042                   | (flags & AMGf_numarg));
3043         if (tmpsv) {
3044             (void)POPs;
3045             /* where the op is one of the two forms:
3046              *    $x op= $y
3047              *    $lex = $x op $y (where the assign is optimised away)
3048              * then assign the returned value to targ and return that;
3049              * otherwise return the value directly
3050              */
3051             if (   mutator
3052                 || (   (PL_opargs[PL_op->op_type] & OA_TARGLEX)
3053                     && (PL_op->op_private & OPpTARGET_MY)))
3054             {
3055                 dTARG;
3056                 TARG = mutator ? *SP : PAD_SV(PL_op->op_targ);
3057                 sv_setsv(TARG, tmpsv);
3058                 SETTARG;
3059             }
3060             else
3061                 SETs(tmpsv);
3062
3063             PUTBACK;
3064             return TRUE;
3065         }
3066     }
3067
3068     if(left==right && SvGMAGICAL(left)) {
3069         SV * const left = sv_newmortal();
3070         *(sp-1) = left;
3071         /* Print the uninitialized warning now, so it includes the vari-
3072            able name. */
3073         if (!SvOK(right)) {
3074             if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right);
3075             sv_setsv_flags(left, &PL_sv_no, 0);
3076         }
3077         else sv_setsv_flags(left, right, 0);
3078         SvGETMAGIC(right);
3079     }
3080     if (flags & AMGf_numeric) {
3081         if (SvROK(TOPm1s))
3082             *(sp-1) = sv_2num(TOPm1s);
3083         if (SvROK(right))
3084             *sp     = sv_2num(right);
3085     }
3086     return FALSE;
3087 }
3088
3089 SV *
3090 Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
3091     SV *tmpsv = NULL;
3092     HV *stash;
3093
3094     PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
3095
3096     if (!SvAMAGIC(ref))
3097         return ref;
3098     /* return quickly if none of the deref ops are overloaded */
3099     stash = SvSTASH(SvRV(ref));
3100     assert(SvOOK(stash));
3101     if (HvAUX(stash)->xhv_aux_flags & HvAUXf_NO_DEREF)
3102         return ref;
3103
3104     while ((tmpsv = amagic_call(ref, &PL_sv_undef, method,
3105                                 AMGf_noright | AMGf_unary))) { 
3106         if (!SvROK(tmpsv))
3107             Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
3108         if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
3109             /* Bail out if it returns us the same reference.  */
3110             return tmpsv;
3111         }
3112         ref = tmpsv;
3113         if (!SvAMAGIC(ref))
3114             break;
3115     }
3116     return tmpsv ? tmpsv : ref;
3117 }
3118
3119 bool
3120 Perl_amagic_is_enabled(pTHX_ int method)
3121 {
3122       SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
3123
3124       assert(PL_curcop->cop_hints & HINT_NO_AMAGIC);
3125
3126       if ( !lex_mask || !SvOK(lex_mask) )
3127           /* overloading lexically disabled */
3128           return FALSE;
3129       else if ( lex_mask && SvPOK(lex_mask) ) {
3130           /* we have an entry in the hints hash, check if method has been
3131            * masked by overloading.pm */
3132           STRLEN len;
3133           const int offset = method / 8;
3134           const int bit    = method % 8;
3135           char *pv = SvPV(lex_mask, len);
3136
3137           /* Bit set, so this overloading operator is disabled */
3138           if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
3139               return FALSE;
3140       }
3141       return TRUE;
3142 }
3143
3144 SV*
3145 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
3146 {
3147   dVAR;
3148   MAGIC *mg;
3149   CV *cv=NULL;
3150   CV **cvp=NULL, **ocvp=NULL;
3151   AMT *amtp=NULL, *oamtp=NULL;
3152   int off = 0, off1, lr = 0, notfound = 0;
3153   int postpr = 0, force_cpy = 0;
3154   int assign = AMGf_assign & flags;
3155   const int assignshift = assign ? 1 : 0;
3156   int use_default_op = 0;
3157   int force_scalar = 0;
3158 #ifdef DEBUGGING
3159   int fl=0;
3160 #endif
3161   HV* stash=NULL;
3162
3163   PERL_ARGS_ASSERT_AMAGIC_CALL;
3164
3165   if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
3166       if (!amagic_is_enabled(method)) return NULL;
3167   }
3168
3169   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
3170       && (stash = SvSTASH(SvRV(left))) && Gv_AMG(stash)
3171       && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
3172       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
3173                         ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
3174                         : NULL))
3175       && ((cv = cvp[off=method+assignshift])
3176           || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
3177                                                           * usual method */
3178                   (
3179 #ifdef DEBUGGING
3180                    fl = 1,
3181 #endif
3182                    cv = cvp[off=method])))) {
3183     lr = -1;                    /* Call method for left argument */
3184   } else {
3185     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
3186       int logic;
3187
3188       /* look for substituted methods */
3189       /* In all the covered cases we should be called with assign==0. */
3190          switch (method) {
3191          case inc_amg:
3192            force_cpy = 1;
3193            if ((cv = cvp[off=add_ass_amg])
3194                || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
3195              right = &PL_sv_yes; lr = -1; assign = 1;
3196            }
3197            break;
3198          case dec_amg:
3199            force_cpy = 1;
3200            if ((cv = cvp[off = subtr_ass_amg])
3201                || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
3202              right = &PL_sv_yes; lr = -1; assign = 1;
3203            }
3204            break;
3205          case bool__amg:
3206            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
3207            break;
3208          case numer_amg:
3209            (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
3210            break;
3211          case string_amg:
3212            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
3213            break;
3214          case not_amg:
3215            (void)((cv = cvp[off=bool__amg])
3216                   || (cv = cvp[off=numer_amg])
3217                   || (cv = cvp[off=string_amg]));
3218            if (cv)
3219                postpr = 1;
3220            break;
3221          case copy_amg:
3222            {
3223              /*
3224                   * SV* ref causes confusion with the interpreter variable of
3225                   * the same name
3226                   */
3227              SV* const tmpRef=SvRV(left);
3228              if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
3229                 /*
3230                  * Just to be extra cautious.  Maybe in some
3231                  * additional cases sv_setsv is safe, too.
3232                  */
3233                 SV* const newref = newSVsv(tmpRef);
3234                 SvOBJECT_on(newref);
3235                 /* No need to do SvAMAGIC_on here, as SvAMAGIC macros
3236                    delegate to the stash. */
3237                 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
3238                 return newref;
3239              }
3240            }
3241            break;
3242          case abs_amg:
3243            if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
3244                && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
3245              SV* const nullsv=&PL_sv_zero;
3246              if (off1==lt_amg) {
3247                SV* const lessp = amagic_call(left,nullsv,
3248                                        lt_amg,AMGf_noright);
3249                logic = SvTRUE_NN(lessp);
3250              } else {
3251                SV* const lessp = amagic_call(left,nullsv,
3252                                        ncmp_amg,AMGf_noright);
3253                logic = (SvNV(lessp) < 0);
3254              }
3255              if (logic) {
3256                if (off==subtr_amg) {
3257                  right = left;
3258                  left = nullsv;
3259                  lr = 1;
3260                }
3261              } else {
3262                return left;
3263              }
3264            }
3265            break;
3266          case neg_amg:
3267            if ((cv = cvp[off=subtr_amg])) {
3268              right = left;
3269              left = &PL_sv_zero;
3270              lr = 1;
3271            }
3272            break;
3273          case int_amg:
3274          case iter_amg:                 /* XXXX Eventually should do to_gv. */
3275          case ftest_amg:                /* XXXX Eventually should do to_gv. */
3276          case regexp_amg:
3277              /* FAIL safe */
3278              return NULL;       /* Delegate operation to standard mechanisms. */
3279
3280          case to_sv_amg:
3281          case to_av_amg:
3282          case to_hv_amg:
3283          case to_gv_amg:
3284          case to_cv_amg:
3285              /* FAIL safe */
3286              return left;       /* Delegate operation to standard mechanisms. */
3287
3288          default:
3289            goto not_found;
3290          }
3291          if (!cv) goto not_found;
3292     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
3293                && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash)
3294                && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
3295                && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
3296                           ? (amtp = (AMT*)mg->mg_ptr)->table
3297                           : NULL))
3298                && (cv = cvp[off=method])) { /* Method for right
3299                                              * argument found */
3300       lr=1;
3301     } else if (((cvp && amtp->fallback > AMGfallNEVER)
3302                 || (ocvp && oamtp->fallback > AMGfallNEVER))
3303                && !(flags & AMGf_unary)) {
3304                                 /* We look for substitution for
3305                                  * comparison operations and
3306                                  * concatenation */
3307       if (method==concat_amg || method==concat_ass_amg
3308           || method==repeat_amg || method==repeat_ass_amg) {
3309         return NULL;            /* Delegate operation to string conversion */
3310       }
3311       off = -1;
3312       switch (method) {
3313          case lt_amg:
3314          case le_amg:
3315          case gt_amg:
3316          case ge_amg:
3317          case eq_amg:
3318          case ne_amg:
3319              off = ncmp_amg;
3320              break;
3321          case slt_amg:
3322          case sle_amg:
3323          case sgt_amg:
3324          case sge_amg:
3325          case seq_amg:
3326          case sne_amg:
3327              off = scmp_amg;
3328              break;
3329          }
3330       if (off != -1) {
3331           if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
3332               cv = ocvp[off];
3333               lr = -1;
3334           }
3335           if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
3336               cv = cvp[off];
3337               lr = 1;
3338           }
3339       }
3340       if (cv)
3341           postpr = 1;
3342       else
3343           goto not_found;
3344     } else {
3345     not_found:                  /* No method found, either report or croak */
3346       switch (method) {
3347          case to_sv_amg:
3348          case to_av_amg:
3349          case to_hv_amg:
3350          case to_gv_amg:
3351          case to_cv_amg:
3352              /* FAIL safe */
3353              return left;       /* Delegate operation to standard mechanisms. */
3354       }
3355       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
3356         notfound = 1; lr = -1;
3357       } else if (cvp && (cv=cvp[nomethod_amg])) {
3358         notfound = 1; lr = 1;
3359       } else if ((use_default_op =
3360                   (!ocvp || oamtp->fallback >= AMGfallYES)
3361                   && (!cvp || amtp->fallback >= AMGfallYES))
3362                  && !DEBUG_o_TEST) {
3363         /* Skip generating the "no method found" message.  */
3364         return NULL;
3365       } else {
3366         SV *msg;
3367         if (off==-1) off=method;
3368         msg = sv_2mortal(Perl_newSVpvf(aTHX_
3369                       "Operation \"%s\": no method found,%sargument %s%" SVf "%s%" SVf,
3370                       AMG_id2name(method + assignshift),
3371                       (flags & AMGf_unary ? " " : "\n\tleft "),
3372                       SvAMAGIC(left)?
3373                         "in overloaded package ":
3374                         "has no overloaded magic",
3375                       SvAMAGIC(left)?
3376                         SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))):
3377                         SVfARG(&PL_sv_no),
3378                       SvAMAGIC(right)?
3379                         ",\n\tright argument in overloaded package ":
3380                         (flags & AMGf_unary
3381                          ? ""
3382                          : ",\n\tright argument has no overloaded magic"),
3383                       SvAMAGIC(right)?
3384                         SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))):
3385                         SVfARG(&PL_sv_no)));
3386         if (use_default_op) {
3387           DEBUG_o( Perl_deb(aTHX_ "%" SVf, SVfARG(msg)) );
3388         } else {
3389           Perl_croak(aTHX_ "%" SVf, SVfARG(msg));
3390         }
3391         return NULL;
3392       }
3393       force_cpy = force_cpy || assign;
3394     }
3395   }
3396
3397   switch (method) {
3398     /* in these cases, we're calling '+' or '-' as a fallback for a ++ or --
3399      * operation. we need this to return a value, so that it can be assigned
3400      * later on, in the postpr block (case inc_amg/dec_amg), even if the
3401      * increment or decrement was itself called in void context */
3402     case inc_amg:
3403       if (off == add_amg)
3404         force_scalar = 1;
3405       break;
3406     case dec_amg:
3407       if (off == subtr_amg)
3408         force_scalar = 1;
3409       break;
3410     /* in these cases, we're calling an assignment variant of an operator
3411      * (+= rather than +, for instance). regardless of whether it's a
3412      * fallback or not, it always has to return a value, which will be
3413      * assigned to the proper variable later */
3414     case add_amg:
3415     case subtr_amg:
3416     case mult_amg:
3417     case div_amg:
3418     case modulo_amg:
3419     case pow_amg:
3420     case lshift_amg:
3421     case rshift_amg:
3422     case repeat_amg:
3423     case concat_amg:
3424     case band_amg:
3425     case bor_amg:
3426     case bxor_amg:
3427     case sband_amg:
3428     case sbor_amg:
3429     case sbxor_amg:
3430       if (assign)
3431         force_scalar = 1;
3432       break;
3433     /* the copy constructor always needs to return a value */
3434     case copy_amg:
3435       force_scalar = 1;
3436       break;
3437     /* because of the way these are implemented (they don't perform the
3438      * dereferencing themselves, they return a reference that perl then
3439      * dereferences later), they always have to be in scalar context */
3440     case to_sv_amg:
3441     case to_av_amg:
3442     case to_hv_amg:
3443     case to_gv_amg:
3444     case to_cv_amg:
3445       force_scalar = 1;
3446       break;
3447     /* these don't have an op of their own; they're triggered by their parent
3448      * op, so the context there isn't meaningful ('$a and foo()' in void
3449      * context still needs to pass scalar context on to $a's bool overload) */
3450     case bool__amg:
3451     case numer_amg:
3452     case string_amg:
3453       force_scalar = 1;
3454       break;
3455   }
3456
3457 #ifdef DEBUGGING
3458   if (!notfound) {
3459     DEBUG_o(Perl_deb(aTHX_
3460                      "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %" SVf "%s\n",
3461                      AMG_id2name(off),
3462                      method+assignshift==off? "" :
3463                      " (initially \"",
3464                      method+assignshift==off? "" :
3465                      AMG_id2name(method+assignshift),
3466                      method+assignshift==off? "" : "\")",
3467                      flags & AMGf_unary? "" :
3468                      lr==1 ? " for right argument": " for left argument",
3469                      flags & AMGf_unary? " for argument" : "",
3470                      stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)),
3471                      fl? ",\n\tassignment variant used": "") );
3472   }
3473 #endif
3474     /* Since we use shallow copy during assignment, we need
3475      * to dublicate the contents, probably calling user-supplied
3476      * version of copy operator
3477      */
3478     /* We need to copy in following cases:
3479      * a) Assignment form was called.
3480      *          assignshift==1,  assign==T, method + 1 == off
3481      * b) Increment or decrement, called directly.
3482      *          assignshift==0,  assign==0, method + 0 == off
3483      * c) Increment or decrement, translated to assignment add/subtr.
3484      *          assignshift==0,  assign==T,
3485      *          force_cpy == T
3486      * d) Increment or decrement, translated to nomethod.
3487      *          assignshift==0,  assign==0,
3488      *          force_cpy == T
3489      * e) Assignment form translated to nomethod.
3490      *          assignshift==1,  assign==T, method + 1 != off
3491      *          force_cpy == T
3492      */
3493     /*  off is method, method+assignshift, or a result of opcode substitution.
3494      *  In the latter case assignshift==0, so only notfound case is important.
3495      */
3496   if ( (lr == -1) && ( ( (method + assignshift == off)
3497         && (assign || (method == inc_amg) || (method == dec_amg)))
3498       || force_cpy) )
3499   {
3500       /* newSVsv does not behave as advertised, so we copy missing
3501        * information by hand */
3502       SV *tmpRef = SvRV(left);
3503       SV *rv_copy;
3504       if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
3505           SvRV_set(left, rv_copy);
3506           SvSETMAGIC(left);
3507           SvREFCNT_dec_NN(tmpRef);  
3508       }
3509   }
3510
3511   {
3512     dSP;
3513     BINOP myop;
3514     SV* res;
3515     const bool oldcatch = CATCH_GET;
3516     I32 oldmark, nret;
3517                 /* for multiconcat, we may call overload several times,
3518                  * with the context of individual concats being scalar,
3519                  * regardless of the overall context of the multiconcat op
3520                  */
3521     U8 gimme = (force_scalar || PL_op->op_type == OP_MULTICONCAT)
3522                     ? G_SCALAR : GIMME_V;
3523
3524     CATCH_SET(TRUE);
3525     Zero(&myop, 1, BINOP);
3526     myop.op_last = (OP *) &myop;
3527     myop.op_next = NULL;
3528     myop.op_flags = OPf_STACKED;
3529
3530     switch (gimme) {
3531         case G_VOID:
3532             myop.op_flags |= OPf_WANT_VOID;
3533             break;
3534         case G_ARRAY:
3535             if (flags & AMGf_want_list) {
3536                 myop.op_flags |= OPf_WANT_LIST;
3537                 break;
3538             }
3539             /* FALLTHROUGH */
3540         default:
3541             myop.op_flags |= OPf_WANT_SCALAR;
3542             break;
3543     }
3544
3545     PUSHSTACKi(PERLSI_OVERLOAD);
3546     ENTER;
3547     SAVEOP();
3548     PL_op = (OP *) &myop;
3549     if (PERLDB_SUB && PL_curstash != PL_debstash)
3550         PL_op->op_private |= OPpENTERSUB_DB;
3551     Perl_pp_pushmark(aTHX);
3552
3553     EXTEND(SP, notfound + 5);
3554     PUSHs(lr>0? right: left);
3555     PUSHs(lr>0? left: right);
3556     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
3557     if (notfound) {
3558       PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
3559                            AMG_id2namelen(method + assignshift), SVs_TEMP));
3560     }
3561     else if (flags & AMGf_numarg)
3562       PUSHs(&PL_sv_undef);
3563     if (flags & AMGf_numarg)
3564       PUSHs(&PL_sv_yes);
3565     PUSHs(MUTABLE_SV(cv));
3566     PUTBACK;
3567     oldmark = TOPMARK;
3568
3569     if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
3570       CALLRUNOPS(aTHX);
3571     LEAVE;
3572     SPAGAIN;
3573     nret = SP - (PL_stack_base + oldmark);
3574
3575     switch (gimme) {
3576         case G_VOID:
3577             /* returning NULL has another meaning, and we check the context
3578              * at the call site too, so this can be differentiated from the
3579              * scalar case */
3580             res = &PL_sv_undef;
3581             SP = PL_stack_base + oldmark;
3582             break;
3583         case G_ARRAY:
3584             if (flags & AMGf_want_list) {
3585                 res = sv_2mortal((SV *)newAV());
3586                 av_extend((AV *)res, nret);
3587                 while (nret--)
3588                     av_store((AV *)res, nret, POPs);
3589                 break;
3590             }
3591             /* FALLTHROUGH */
3592         default:
3593             res = POPs;
3594             break;
3595     }
3596
3597     PUTBACK;
3598     POPSTACK;
3599     CATCH_SET(oldcatch);
3600
3601     if (postpr) {
3602       int ans;
3603       switch (method) {
3604       case le_amg:
3605       case sle_amg:
3606         ans=SvIV(res)<=0; break;
3607       case lt_amg:
3608       case slt_amg:
3609         ans=SvIV(res)<0; break;
3610       case ge_amg:
3611       case sge_amg:
3612         ans=SvIV(res)>=0; break;
3613       case gt_amg:
3614       case sgt_amg:
3615         ans=SvIV(res)>0; break;
3616       case eq_amg:
3617       case seq_amg:
3618         ans=SvIV(res)==0; break;
3619       case ne_amg:
3620       case sne_amg:
3621         ans=SvIV(res)!=0; break;
3622       case inc_amg:
3623       case dec_amg:
3624         SvSetSV(left,res); return left;
3625       case not_amg:
3626         ans=!SvTRUE_NN(res); break;
3627       default:
3628         ans=0; break;
3629       }
3630       return boolSV(ans);
3631     } else if (method==copy_amg) {
3632       if (!SvROK(res)) {
3633         Perl_croak(aTHX_ "Copy method did not return a reference");
3634       }
3635       return SvREFCNT_inc(SvRV(res));
3636     } else {
3637       return res;
3638     }
3639   }
3640 }
3641
3642 void
3643 Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
3644 {
3645     dVAR;
3646     U32 hash;
3647
3648     PERL_ARGS_ASSERT_GV_NAME_SET;
3649
3650     if (len > I32_MAX)
3651         Perl_croak(aTHX_ "panic: gv name too long (%" UVuf ")", (UV) len);
3652
3653     if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
3654         unshare_hek(GvNAME_HEK(gv));
3655     }
3656
3657     PERL_HASH(hash, name, len);
3658     GvNAME_HEK(gv) = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash);
3659 }
3660
3661 /*
3662 =for apidoc gv_try_downgrade
3663
3664 If the typeglob C<gv> can be expressed more succinctly, by having
3665 something other than a real GV in its place in the stash, replace it
3666 with the optimised form.  Basic requirements for this are that C<gv>
3667 is a real typeglob, is sufficiently ordinary, and is only referenced
3668 from its package.  This function is meant to be used when a GV has been
3669 looked up in part to see what was there, causing upgrading, but based
3670 on what was found it turns out that the real GV isn't required after all.
3671
3672 If C<gv> is a completely empty typeglob, it is deleted from the stash.
3673
3674 If C<gv> is a typeglob containing only a sufficiently-ordinary constant
3675 sub, the typeglob is replaced with a scalar-reference placeholder that
3676 more compactly represents the same thing.
3677
3678 =cut
3679 */
3680
3681 void
3682 Perl_gv_try_downgrade(pTHX_ GV *gv)
3683 {
3684     HV *stash;
3685     CV *cv;
3686     HEK *namehek;
3687     SV **gvp;
3688     PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
3689
3690     /* XXX Why and where does this leave dangling pointers during global
3691        destruction? */
3692     if (PL_phase == PERL_PHASE_DESTRUCT) return;
3693
3694     if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
3695             !SvOBJECT(gv) && !SvREADONLY(gv) &&
3696             isGV_with_GP(gv) && GvGP(gv) &&
3697             !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
3698             !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
3699             GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
3700         return;
3701     if (gv == PL_statgv || gv == PL_last_in_gv || gv == PL_stderrgv)
3702         return;
3703     if (SvMAGICAL(gv)) {
3704         MAGIC *mg;
3705         /* only backref magic is allowed */
3706         if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
3707             return;
3708         for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
3709             if (mg->mg_type != PERL_MAGIC_backref)
3710                 return;
3711         }
3712     }
3713     cv = GvCV(gv);
3714     if (!cv) {
3715         HEK *gvnhek = GvNAME_HEK(gv);
3716         (void)hv_deletehek(stash, gvnhek, G_DISCARD);
3717     } else if (GvMULTI(gv) && cv && SvREFCNT(cv) == 1 &&
3718             !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
3719             CvSTASH(cv) == stash && !CvNAMED(cv) && CvGV(cv) == gv &&
3720             CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
3721             !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
3722             (namehek = GvNAME_HEK(gv)) &&
3723             (gvp = hv_fetchhek(stash, namehek, 0)) &&
3724             *gvp == (SV*)gv) {
3725         SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
3726         const bool imported = !!GvIMPORTED_CV(gv);
3727         SvREFCNT(gv) = 0;
3728         sv_clear((SV*)gv);
3729         SvREFCNT(gv) = 1;
3730         SvFLAGS(gv) = SVt_IV|SVf_ROK|SVprv_PCS_IMPORTED * imported;
3731
3732         /* See also: 'SET_SVANY_FOR_BODYLESS_IV' in sv.c */
3733         SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
3734                                 STRUCT_OFFSET(XPVIV, xiv_iv));
3735         SvRV_set(gv, value);
3736     }
3737 }
3738
3739 GV *
3740 Perl_gv_override(pTHX_ const char * const name, const STRLEN len)
3741 {
3742     GV *gv = gv_fetchpvn(name, len, GV_NOTQUAL, SVt_PVCV);
3743     GV * const *gvp;
3744     PERL_ARGS_ASSERT_GV_OVERRIDE;
3745     if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) return gv;
3746     gvp = (GV**)hv_fetch(PL_globalstash, name, len, FALSE);
3747     gv = gvp ? *gvp : NULL;
3748     if (gv && !isGV(gv)) {
3749         if (!SvPCS_IMPORTED(gv)) return NULL;
3750         gv_init(gv, PL_globalstash, name, len, 0);
3751         return gv;
3752     }
3753     return gv && GvCVu(gv) && GvIMPORTED_CV(gv) ? gv : NULL;
3754 }
3755
3756 #include "XSUB.h"
3757
3758 static void
3759 core_xsub(pTHX_ CV* cv)
3760 {
3761     Perl_croak(aTHX_
3762        "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
3763     );
3764 }
3765
3766 /*
3767  * ex: set ts=8 sts=4 sw=4 et:
3768  */