This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
8600665256781cd3f21bf49428ecdc06333c33ee
[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
25 A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
26 It is a structure that holds a pointer to a scalar, an array, a hash etc,
27 corresponding to $foo, @foo, %foo.
28
29 GVs are usually found as values in stashes (symbol table hashes) where
30 Perl stores its global variables.
31
32 =cut
33 */
34
35 #include "EXTERN.h"
36 #define PERL_IN_GV_C
37 #include "perl.h"
38 #include "overload.c"
39 #include "keywords.h"
40
41 static const char S_autoload[] = "AUTOLOAD";
42 static const STRLEN S_autolen = sizeof(S_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             /* diag_listed_as: Bad symbol for filehandle */
65         } else if (type == SVt_PVHV) {
66             what = "hash";
67         } else {
68             what = type == SVt_PVAV ? "array" : "scalar";
69         }
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         *where = newSV_type(type);
85     return gv;
86 }
87
88 GV *
89 Perl_gv_fetchfile(pTHX_ const char *name)
90 {
91     PERL_ARGS_ASSERT_GV_FETCHFILE;
92     return gv_fetchfile_flags(name, strlen(name), 0);
93 }
94
95 GV *
96 Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
97                         const U32 flags)
98 {
99     dVAR;
100     char smallbuf[128];
101     char *tmpbuf;
102     const STRLEN tmplen = namelen + 2;
103     GV *gv;
104
105     PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS;
106     PERL_UNUSED_ARG(flags);
107
108     if (!PL_defstash)
109         return NULL;
110
111     if (tmplen <= sizeof smallbuf)
112         tmpbuf = smallbuf;
113     else
114         Newx(tmpbuf, tmplen, char);
115     /* This is where the debugger's %{"::_<$filename"} hash is created */
116     tmpbuf[0] = '_';
117     tmpbuf[1] = '<';
118     memcpy(tmpbuf + 2, name, namelen);
119     gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
120     if (!isGV(gv)) {
121         gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
122 #ifdef PERL_DONT_CREATE_GVSV
123         GvSV(gv) = newSVpvn(name, namelen);
124 #else
125         sv_setpvn(GvSV(gv), name, namelen);
126 #endif
127     }
128     if ((PERLDB_LINE || PERLDB_SAVESRC) && !GvAV(gv))
129             hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
130     if (tmpbuf != smallbuf)
131         Safefree(tmpbuf);
132     return gv;
133 }
134
135 /*
136 =for apidoc gv_const_sv
137
138 If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
139 inlining, or C<gv> is a placeholder reference that would be promoted to such
140 a typeglob, then returns the value returned by the sub.  Otherwise, returns
141 NULL.
142
143 =cut
144 */
145
146 SV *
147 Perl_gv_const_sv(pTHX_ GV *gv)
148 {
149     PERL_ARGS_ASSERT_GV_CONST_SV;
150
151     if (SvTYPE(gv) == SVt_PVGV)
152         return cv_const_sv(GvCVu(gv));
153     return SvROK(gv) ? SvRV(gv) : NULL;
154 }
155
156 GP *
157 Perl_newGP(pTHX_ GV *const gv)
158 {
159     GP *gp;
160     U32 hash;
161 #ifdef USE_ITHREADS
162     const char *const file
163         = (PL_curcop && CopFILE(PL_curcop)) ? CopFILE(PL_curcop) : "";
164     const STRLEN len = strlen(file);
165 #else
166     SV *const temp_sv = CopFILESV(PL_curcop);
167     const char *file;
168     STRLEN len;
169
170     PERL_ARGS_ASSERT_NEWGP;
171
172     if (temp_sv) {
173         file = SvPVX(temp_sv);
174         len = SvCUR(temp_sv);
175     } else {
176         file = "";
177         len = 0;
178     }
179 #endif
180
181     PERL_HASH(hash, file, len);
182
183     Newxz(gp, 1, GP);
184
185 #ifndef PERL_DONT_CREATE_GVSV
186     gp->gp_sv = newSV(0);
187 #endif
188
189     gp->gp_line = PL_curcop ? CopLINE(PL_curcop) : 0;
190     /* XXX Ideally this cast would be replaced with a change to const char*
191        in the struct.  */
192     gp->gp_file_hek = share_hek(file, len, hash);
193     gp->gp_egv = gv;
194     gp->gp_refcnt = 1;
195
196     return gp;
197 }
198
199 /* Assign CvGV(cv) = gv, handling weak references.
200  * See also S_anonymise_cv_maybe */
201
202 void
203 Perl_cvgv_set(pTHX_ CV* cv, GV* gv)
204 {
205     GV * const oldgv = CvGV(cv);
206     PERL_ARGS_ASSERT_CVGV_SET;
207
208     if (oldgv == gv)
209         return;
210
211     if (oldgv) {
212         if (CvCVGV_RC(cv)) {
213             SvREFCNT_dec(oldgv);
214             CvCVGV_RC_off(cv);
215         }
216         else {
217             sv_del_backref(MUTABLE_SV(oldgv), MUTABLE_SV(cv));
218         }
219     }
220
221     SvANY(cv)->xcv_gv = gv;
222     assert(!CvCVGV_RC(cv));
223
224     if (!gv)
225         return;
226
227     if (isGV_with_GP(gv) && GvGP(gv) && (GvCV(gv) == cv || GvFORM(gv) == cv))
228         Perl_sv_add_backref(aTHX_ MUTABLE_SV(gv), MUTABLE_SV(cv));
229     else {
230         CvCVGV_RC_on(cv);
231         SvREFCNT_inc_simple_void_NN(gv);
232     }
233 }
234
235 /* Assign CvSTASH(cv) = st, handling weak references. */
236
237 void
238 Perl_cvstash_set(pTHX_ CV *cv, HV *st)
239 {
240     HV *oldst = CvSTASH(cv);
241     PERL_ARGS_ASSERT_CVSTASH_SET;
242     if (oldst == st)
243         return;
244     if (oldst)
245         sv_del_backref(MUTABLE_SV(oldst), MUTABLE_SV(cv));
246     SvANY(cv)->xcv_stash = st;
247     if (st)
248         Perl_sv_add_backref(aTHX_ MUTABLE_SV(st), MUTABLE_SV(cv));
249 }
250
251 /*
252 =for apidoc gv_init_pvn
253
254 Converts a scalar into a typeglob.  This is an incoercible typeglob;
255 assigning a reference to it will assign to one of its slots, instead of
256 overwriting it as happens with typeglobs created by SvSetSV.  Converting
257 any scalar that is SvOK() may produce unpredictable results and is reserved
258 for perl's internal use.
259
260 C<gv> is the scalar to be converted.
261
262 C<stash> is the parent stash/package, if any.
263
264 C<name> and C<len> give the name.  The name must be unqualified;
265 that is, it must not include the package name.  If C<gv> is a
266 stash element, it is the caller's responsibility to ensure that the name
267 passed to this function matches the name of the element.  If it does not
268 match, perl's internal bookkeeping will get out of sync.
269
270 C<flags> can be set to SVf_UTF8 if C<name> is a UTF8 string, or
271 the return value of SvUTF8(sv).  It can also take the
272 GV_ADDMULTI flag, which means to pretend that the GV has been
273 seen before (i.e., suppress "Used once" warnings).
274
275 =for apidoc gv_init
276
277 The old form of gv_init_pvn().  It does not work with UTF8 strings, as it
278 has no flags parameter.  If the C<multi> parameter is set, the
279 GV_ADDMULTI flag will be passed to gv_init_pvn().
280
281 =for apidoc gv_init_pv
282
283 Same as gv_init_pvn(), but takes a nul-terminated string for the name
284 instead of separate char * and length parameters.
285
286 =for apidoc gv_init_sv
287
288 Same as gv_init_pvn(), but takes an SV * for the name instead of separate
289 char * and length parameters.  C<flags> is currently unused.
290
291 =cut
292 */
293
294 void
295 Perl_gv_init_sv(pTHX_ GV *gv, HV *stash, SV* namesv, U32 flags)
296 {
297    char *namepv;
298    STRLEN namelen;
299    PERL_ARGS_ASSERT_GV_INIT_SV;
300    namepv = SvPV(namesv, namelen);
301    if (SvUTF8(namesv))
302        flags |= SVf_UTF8;
303    gv_init_pvn(gv, stash, namepv, namelen, flags);
304 }
305
306 void
307 Perl_gv_init_pv(pTHX_ GV *gv, HV *stash, const char *name, U32 flags)
308 {
309    PERL_ARGS_ASSERT_GV_INIT_PV;
310    gv_init_pvn(gv, stash, name, strlen(name), flags);
311 }
312
313 void
314 Perl_gv_init_pvn(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, U32 flags)
315 {
316     dVAR;
317     const U32 old_type = SvTYPE(gv);
318     const bool doproto = old_type > SVt_NULL;
319     char * const proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
320     const STRLEN protolen = proto ? SvCUR(gv) : 0;
321     const U32 proto_utf8  = proto ? SvUTF8(gv) : 0;
322     SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
323     const U32 exported_constant = has_constant ? SvPCS_IMPORTED(gv) : 0;
324
325     PERL_ARGS_ASSERT_GV_INIT_PVN;
326     assert (!(proto && has_constant));
327
328     if (has_constant) {
329         /* The constant has to be a simple scalar type.  */
330         switch (SvTYPE(has_constant)) {
331         case SVt_PVAV:
332         case SVt_PVHV:
333         case SVt_PVCV:
334         case SVt_PVFM:
335         case SVt_PVIO:
336             Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
337                        sv_reftype(has_constant, 0));
338         default: NOOP;
339         }
340         SvRV_set(gv, NULL);
341         SvROK_off(gv);
342     }
343
344
345     if (old_type < SVt_PVGV) {
346         if (old_type >= SVt_PV)
347             SvCUR_set(gv, 0);
348         sv_upgrade(MUTABLE_SV(gv), SVt_PVGV);
349     }
350     if (SvLEN(gv)) {
351         if (proto) {
352             SvPV_set(gv, NULL);
353             SvLEN_set(gv, 0);
354             SvPOK_off(gv);
355         } else
356             Safefree(SvPVX_mutable(gv));
357     }
358     SvIOK_off(gv);
359     isGV_with_GP_on(gv);
360
361     GvGP_set(gv, Perl_newGP(aTHX_ gv));
362     GvSTASH(gv) = stash;
363     if (stash)
364         Perl_sv_add_backref(aTHX_ MUTABLE_SV(stash), MUTABLE_SV(gv));
365     gv_name_set(gv, name, len, GV_ADD | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ));
366     if (flags & GV_ADDMULTI || doproto) /* doproto means it */
367         GvMULTI_on(gv);                 /* _was_ mentioned */
368     if (doproto) {                      /* Replicate part of newSUB here. */
369         CV *cv;
370         ENTER;
371         if (has_constant) {
372             /* newCONSTSUB takes ownership of the reference from us.  */
373             cv = newCONSTSUB_flags(stash, name, len, flags, has_constant);
374             /* In case op.c:S_process_special_blocks stole it: */
375             if (!GvCV(gv))
376                 GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv));
377             assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */
378             /* If this reference was a copy of another, then the subroutine
379                must have been "imported", by a Perl space assignment to a GV
380                from a reference to CV.  */
381             if (exported_constant)
382                 GvIMPORTED_CV_on(gv);
383         } else {
384             (void) start_subparse(0,0); /* Create empty CV in compcv. */
385             cv = PL_compcv;
386             GvCV_set(gv,cv);
387         }
388         LEAVE;
389
390         mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar($) { (shift) } sub ASDF::baz($); *ASDF::baz = \&Foo::bar */
391         CvGV_set(cv, gv);
392         CvFILE_set_from_cop(cv, PL_curcop);
393         CvSTASH_set(cv, PL_curstash);
394         if (proto) {
395             sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen,
396                             SV_HAS_TRAILING_NUL);
397             if ( proto_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
398         }
399     }
400 }
401
402 STATIC void
403 S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type)
404 {
405     PERL_ARGS_ASSERT_GV_INIT_SVTYPE;
406
407     switch (sv_type) {
408     case SVt_PVIO:
409         (void)GvIOn(gv);
410         break;
411     case SVt_PVAV:
412         (void)GvAVn(gv);
413         break;
414     case SVt_PVHV:
415         (void)GvHVn(gv);
416         break;
417 #ifdef PERL_DONT_CREATE_GVSV
418     case SVt_NULL:
419     case SVt_PVCV:
420     case SVt_PVFM:
421     case SVt_PVGV:
422         break;
423     default:
424         if(GvSVn(gv)) {
425             /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13
426                If we just cast GvSVn(gv) to void, it ignores evaluating it for
427                its side effect */
428         }
429 #endif
430     }
431 }
432
433 static void core_xsub(pTHX_ CV* cv);
434
435 static GV *
436 S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
437                           const char * const name, const STRLEN len,
438                           const char * const fullname, STRLEN const fullen)
439 {
440     const int code = keyword(name, len, 1);
441     static const char file[] = __FILE__;
442     CV *cv, *oldcompcv = NULL;
443     int opnum = 0;
444     SV *opnumsv;
445     bool ampable = TRUE; /* &{}-able */
446     COP *oldcurcop = NULL;
447     yy_parser *oldparser = NULL;
448     I32 oldsavestack_ix = 0;
449
450     assert(gv || stash);
451     assert(name);
452     assert(stash || fullname);
453
454     if (!fullname && !HvENAME(stash)) return NULL; /* pathological case
455                                                      that would require
456                                                     inlining newATTRSUB */
457     if (code >= 0) return NULL; /* not overridable */
458     switch (-code) {
459      /* no support for \&CORE::infix;
460         no support for funcs that take labels, as their parsing is
461         weird  */
462     case KEY_and: case KEY_cmp: case KEY_CORE: case KEY_dump:
463     case KEY_eq: case KEY_ge:
464     case KEY_gt: case KEY_le: case KEY_lt: case KEY_ne:
465     case KEY_or: case KEY_x: case KEY_xor:
466         return NULL;
467     case KEY_chdir:
468     case KEY_chomp: case KEY_chop:
469     case KEY_each: case KEY_eof: case KEY_exec:
470     case KEY_keys:
471     case KEY_lstat:
472     case KEY_pop:
473     case KEY_push:
474     case KEY_shift:
475     case KEY_splice:
476     case KEY_stat:
477     case KEY_system:
478     case KEY_truncate: case KEY_unlink:
479     case KEY_unshift:
480     case KEY_values:
481         ampable = FALSE;
482     }
483     if (!gv) {
484         gv = (GV *)newSV(0);
485         gv_init(gv, stash, name, len, TRUE);
486     }
487     if (ampable) {
488         ENTER;
489         oldcurcop = PL_curcop;
490         oldparser = PL_parser;
491         lex_start(NULL, NULL, 0);
492         oldcompcv = PL_compcv;
493         PL_compcv = NULL; /* Prevent start_subparse from setting
494                              CvOUTSIDE. */
495         oldsavestack_ix = start_subparse(FALSE,0);
496         cv = PL_compcv;
497     }
498     else {
499         /* Avoid calling newXS, as it calls us, and things start to
500            get hairy. */
501         cv = MUTABLE_CV(newSV_type(SVt_PVCV));
502         GvCV_set(gv,cv);
503         GvCVGEN(gv) = 0;
504         mro_method_changed_in(GvSTASH(gv));
505         CvISXSUB_on(cv);
506         CvXSUB(cv) = core_xsub;
507     }
508     CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE
509                          from PL_curcop. */
510     (void)gv_fetchfile(file);
511     CvFILE(cv) = (char *)file;
512     /* XXX This is inefficient, as doing things this order causes
513            a prototype check in newATTRSUB.  But we have to do
514            it this order as we need an op number before calling
515            new ATTRSUB. */
516     (void)core_prototype((SV *)cv, name, code, &opnum);
517     if (stash && (fullname || !fullen))
518         (void)hv_store(stash,name,len,(SV *)gv,0);
519     if (ampable) {
520         SV *tmpstr;
521         CvLVALUE_on(cv);
522         if (!fullname) {
523             tmpstr = newSVhek(HvENAME_HEK(stash));
524             sv_catpvs(tmpstr, "::");
525             sv_catpvn(tmpstr,name,len);
526         }
527         else tmpstr = newSVpvn_share(fullname,fullen,0);
528         newATTRSUB(oldsavestack_ix,
529                    newSVOP(OP_CONST, 0, tmpstr),
530                    NULL,NULL,
531                    coresub_op(
532                      opnum
533                        ? newSVuv((UV)opnum)
534                        : newSVpvn(name,len),
535                      code, opnum
536                    )
537         );
538         assert(GvCV(gv) == cv);
539         if (opnum != OP_VEC && opnum != OP_SUBSTR)
540             CvLVALUE_off(cv); /* Now *that* was a neat trick. */
541         LEAVE;
542         PL_parser = oldparser;
543         PL_curcop = oldcurcop;
544         PL_compcv = oldcompcv;
545     }
546     opnumsv = opnum ? newSVuv((UV)opnum) : (SV *)NULL;
547     cv_set_call_checker(
548        cv, Perl_ck_entersub_args_core, opnumsv ? opnumsv : (SV *)cv
549     );
550     SvREFCNT_dec(opnumsv);
551     return gv;
552 }
553
554 /*
555 =for apidoc gv_fetchmeth
556
557 Like L</gv_fetchmeth_pvn>, but lacks a flags parameter.
558
559 =for apidoc gv_fetchmeth_sv
560
561 Exactly like L</gv_fetchmeth_pvn>, but takes the name string in the form
562 of an SV instead of a string/length pair.
563
564 =cut
565 */
566
567 GV *
568 Perl_gv_fetchmeth_sv(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
569 {
570    char *namepv;
571    STRLEN namelen;
572    PERL_ARGS_ASSERT_GV_FETCHMETH_SV;
573    namepv = SvPV(namesv, namelen);
574    if (SvUTF8(namesv))
575        flags |= SVf_UTF8;
576    return gv_fetchmeth_pvn(stash, namepv, namelen, level, flags);
577 }
578
579 /*
580 =for apidoc gv_fetchmeth_pv
581
582 Exactly like L</gv_fetchmeth_pvn>, but takes a nul-terminated string 
583 instead of a string/length pair.
584
585 =cut
586 */
587
588 GV *
589 Perl_gv_fetchmeth_pv(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
590 {
591     PERL_ARGS_ASSERT_GV_FETCHMETH_PV;
592     return gv_fetchmeth_pvn(stash, name, strlen(name), level, flags);
593 }
594
595 /*
596 =for apidoc gv_fetchmeth_pvn
597
598 Returns the glob with the given C<name> and a defined subroutine or
599 C<NULL>.  The glob lives in the given C<stash>, or in the stashes
600 accessible via @ISA and UNIVERSAL::.
601
602 The argument C<level> should be either 0 or -1.  If C<level==0>, as a
603 side-effect creates a glob with the given C<name> in the given C<stash>
604 which in the case of success contains an alias for the subroutine, and sets
605 up caching info for this glob.
606
607 Currently, the only significant value for C<flags> is SVf_UTF8.
608
609 This function grants C<"SUPER"> token as a postfix of the stash name. The
610 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
611 visible to Perl code.  So when calling C<call_sv>, you should not use
612 the GV directly; instead, you should use the method's CV, which can be
613 obtained from the GV with the C<GvCV> macro.
614
615 =cut
616 */
617
618 /* NOTE: No support for tied ISA */
619
620 GV *
621 Perl_gv_fetchmeth_pvn(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
622 {
623     dVAR;
624     GV** gvp;
625     AV* linear_av;
626     SV** linear_svp;
627     SV* linear_sv;
628     HV* cstash;
629     GV* candidate = NULL;
630     CV* cand_cv = NULL;
631     GV* topgv = NULL;
632     const char *hvname;
633     I32 create = (level >= 0) ? 1 : 0;
634     I32 items;
635     STRLEN packlen;
636     U32 topgen_cmp;
637     U32 is_utf8 = flags & SVf_UTF8;
638
639     PERL_ARGS_ASSERT_GV_FETCHMETH_PVN;
640
641     /* UNIVERSAL methods should be callable without a stash */
642     if (!stash) {
643         create = 0;  /* probably appropriate */
644         if(!(stash = gv_stashpvs("UNIVERSAL", 0)))
645             return 0;
646     }
647
648     assert(stash);
649
650     hvname = HvNAME_get(stash);
651     if (!hvname)
652       Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
653
654     assert(hvname);
655     assert(name);
656
657     DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,hvname) );
658
659     topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation;
660
661     /* check locally for a real method or a cache entry */
662     gvp = (GV**)hv_fetch(stash, name, is_utf8 ? -(I32)len : (I32)len, create);
663     if(gvp) {
664         topgv = *gvp;
665       have_gv:
666         assert(topgv);
667         if (SvTYPE(topgv) != SVt_PVGV)
668             gv_init_pvn(topgv, stash, name, len, GV_ADDMULTI|is_utf8);
669         if ((cand_cv = GvCV(topgv))) {
670             /* If genuine method or valid cache entry, use it */
671             if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
672                 return topgv;
673             }
674             else {
675                 /* stale cache entry, junk it and move on */
676                 SvREFCNT_dec(cand_cv);
677                 GvCV_set(topgv, NULL);
678                 cand_cv = NULL;
679                 GvCVGEN(topgv) = 0;
680             }
681         }
682         else if (GvCVGEN(topgv) == topgen_cmp) {
683             /* cache indicates no such method definitively */
684             return 0;
685         }
686         else if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4
687               && strnEQ(hvname, "CORE", 4)
688               && S_maybe_add_coresub(aTHX_ stash,topgv,name,len,0,1))
689             goto have_gv;
690     }
691
692     packlen = HvNAMELEN_get(stash);
693     if (packlen >= 7 && strEQ(hvname + packlen - 7, "::SUPER")) {
694         HV* basestash;
695         packlen -= 7;
696         basestash = gv_stashpvn(hvname, packlen,
697                                 GV_ADD | (HvNAMEUTF8(stash) ? SVf_UTF8 : 0));
698         linear_av = mro_get_linear_isa(basestash);
699     }
700     else {
701         linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
702     }
703
704     linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
705     items = AvFILLp(linear_av); /* no +1, to skip over self */
706     while (items--) {
707         linear_sv = *linear_svp++;
708         assert(linear_sv);
709         cstash = gv_stashsv(linear_sv, 0);
710
711         if (!cstash) {
712             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
713                            "Can't locate package %"SVf" for @%"HEKf"::ISA",
714                            SVfARG(linear_sv),
715                            HEKfARG(HvNAME_HEK(stash)));
716             continue;
717         }
718
719         assert(cstash);
720
721         gvp = (GV**)hv_fetch(cstash, name, is_utf8 ? -(I32)len : (I32)len, 0);
722         if (!gvp) {
723             if (len > 1 && HvNAMELEN_get(cstash) == 4) {
724                 const char *hvname = HvNAME(cstash); assert(hvname);
725                 if (strnEQ(hvname, "CORE", 4)
726                  && (candidate =
727                       S_maybe_add_coresub(aTHX_ cstash,NULL,name,len,0,0)
728                     ))
729                     goto have_candidate;
730             }
731             continue;
732         }
733         else candidate = *gvp;
734        have_candidate:
735         assert(candidate);
736         if (SvTYPE(candidate) != SVt_PVGV)
737             gv_init_pvn(candidate, cstash, name, len, GV_ADDMULTI|is_utf8);
738         if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
739             /*
740              * Found real method, cache method in topgv if:
741              *  1. topgv has no synonyms (else inheritance crosses wires)
742              *  2. method isn't a stub (else AUTOLOAD fails spectacularly)
743              */
744             if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
745                   CV *old_cv = GvCV(topgv);
746                   SvREFCNT_dec(old_cv);
747                   SvREFCNT_inc_simple_void_NN(cand_cv);
748                   GvCV_set(topgv, cand_cv);
749                   GvCVGEN(topgv) = topgen_cmp;
750             }
751             return candidate;
752         }
753     }
754
755     /* Check UNIVERSAL without caching */
756     if(level == 0 || level == -1) {
757         candidate = gv_fetchmeth_pvn(NULL, name, len, 1, flags);
758         if(candidate) {
759             cand_cv = GvCV(candidate);
760             if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
761                   CV *old_cv = GvCV(topgv);
762                   SvREFCNT_dec(old_cv);
763                   SvREFCNT_inc_simple_void_NN(cand_cv);
764                   GvCV_set(topgv, cand_cv);
765                   GvCVGEN(topgv) = topgen_cmp;
766             }
767             return candidate;
768         }
769     }
770
771     if (topgv && GvREFCNT(topgv) == 1) {
772         /* cache the fact that the method is not defined */
773         GvCVGEN(topgv) = topgen_cmp;
774     }
775
776     return 0;
777 }
778
779 /*
780 =for apidoc gv_fetchmeth_autoload
781
782 This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
783 parameter.
784
785 =for apidoc gv_fetchmeth_sv_autoload
786
787 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
788 of an SV instead of a string/length pair.
789
790 =cut
791 */
792
793 GV *
794 Perl_gv_fetchmeth_sv_autoload(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
795 {
796    char *namepv;
797    STRLEN namelen;
798    PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD;
799    namepv = SvPV(namesv, namelen);
800    if (SvUTF8(namesv))
801        flags |= SVf_UTF8;
802    return gv_fetchmeth_pvn_autoload(stash, namepv, namelen, level, flags);
803 }
804
805 /*
806 =for apidoc gv_fetchmeth_pv_autoload
807
808 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
809 instead of a string/length pair.
810
811 =cut
812 */
813
814 GV *
815 Perl_gv_fetchmeth_pv_autoload(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
816 {
817     PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD;
818     return gv_fetchmeth_pvn_autoload(stash, name, strlen(name), level, flags);
819 }
820
821 /*
822 =for apidoc gv_fetchmeth_pvn_autoload
823
824 Same as gv_fetchmeth_pvn(), but looks for autoloaded subroutines too.
825 Returns a glob for the subroutine.
826
827 For an autoloaded subroutine without a GV, will create a GV even
828 if C<level < 0>.  For an autoloaded subroutine without a stub, GvCV()
829 of the result may be zero.
830
831 Currently, the only significant value for C<flags> is SVf_UTF8.
832
833 =cut
834 */
835
836 GV *
837 Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
838 {
839     GV *gv = gv_fetchmeth_pvn(stash, name, len, level, flags);
840
841     PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD;
842
843     if (!gv) {
844         CV *cv;
845         GV **gvp;
846
847         if (!stash)
848             return NULL;        /* UNIVERSAL::AUTOLOAD could cause trouble */
849         if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
850             return NULL;
851         if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags)))
852             return NULL;
853         cv = GvCV(gv);
854         if (!(CvROOT(cv) || CvXSUB(cv)))
855             return NULL;
856         /* Have an autoload */
857         if (level < 0)  /* Cannot do without a stub */
858             gv_fetchmeth_pvn(stash, name, len, 0, flags);
859         gvp = (GV**)hv_fetch(stash, name,
860                         (flags & SVf_UTF8) ? -(I32)len : (I32)len, (level >= 0));
861         if (!gvp)
862             return NULL;
863         return *gvp;
864     }
865     return gv;
866 }
867
868 /*
869 =for apidoc gv_fetchmethod_autoload
870
871 Returns the glob which contains the subroutine to call to invoke the method
872 on the C<stash>.  In fact in the presence of autoloading this may be the
873 glob for "AUTOLOAD".  In this case the corresponding variable $AUTOLOAD is
874 already setup.
875
876 The third parameter of C<gv_fetchmethod_autoload> determines whether
877 AUTOLOAD lookup is performed if the given method is not present: non-zero
878 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
879 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
880 with a non-zero C<autoload> parameter.
881
882 These functions grant C<"SUPER"> token as a prefix of the method name. Note
883 that if you want to keep the returned glob for a long time, you need to
884 check for it being "AUTOLOAD", since at the later time the call may load a
885 different subroutine due to $AUTOLOAD changing its value. Use the glob
886 created via a side effect to do this.
887
888 These functions have the same side-effects and as C<gv_fetchmeth> with
889 C<level==0>.  C<name> should be writable if contains C<':'> or C<'
890 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
891 C<call_sv> apply equally to these functions.
892
893 =cut
894 */
895
896 STATIC HV*
897 S_gv_get_super_pkg(pTHX_ const char* name, I32 namelen, U32 flags)
898 {
899     AV* superisa;
900     GV** gvp;
901     GV* gv;
902     HV* stash;
903
904     PERL_ARGS_ASSERT_GV_GET_SUPER_PKG;
905
906     stash = gv_stashpvn(name, namelen, flags);
907     if(stash) return stash;
908
909     /* If we must create it, give it an @ISA array containing
910        the real package this SUPER is for, so that it's tied
911        into the cache invalidation code correctly */
912     stash = gv_stashpvn(name, namelen, GV_ADD | flags);
913     gvp = (GV**)hv_fetchs(stash, "ISA", TRUE);
914     gv = *gvp;
915     gv_init(gv, stash, "ISA", 3, TRUE);
916     superisa = GvAVn(gv);
917     GvMULTI_on(gv);
918     sv_magic(MUTABLE_SV(superisa), MUTABLE_SV(gv), PERL_MAGIC_isa, NULL, 0);
919 #ifdef USE_ITHREADS
920     av_push(superisa, newSVpvn_flags(CopSTASHPV(PL_curcop),
921                                      strlen(CopSTASHPV(PL_curcop)),
922                                      CopSTASH_flags(PL_curcop)
923                                     ));
924 #else
925     av_push(superisa, newSVhek(CopSTASH(PL_curcop)
926                                ? HvNAME_HEK(CopSTASH(PL_curcop)) : NULL));
927 #endif
928
929     return stash;
930 }
931
932 GV *
933 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
934 {
935     PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
936
937     return gv_fetchmethod_flags(stash, name, autoload ? GV_AUTOLOAD : 0);
938 }
939
940 GV *
941 Perl_gv_fetchmethod_sv_flags(pTHX_ HV *stash, SV *namesv, U32 flags)
942 {
943     char *namepv;
944     STRLEN namelen;
945     PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS;
946     namepv = SvPV(namesv, namelen);
947     if (SvUTF8(namesv))
948        flags |= SVf_UTF8;
949     return gv_fetchmethod_pvn_flags(stash, namepv, namelen, flags);
950 }
951
952 GV *
953 Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
954 {
955     PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS;
956     return gv_fetchmethod_pvn_flags(stash, name, strlen(name), flags);
957 }
958
959 /* Don't merge this yet, as it's likely to get a len parameter, and possibly
960    even a U32 hash */
961 GV *
962 Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
963 {
964     dVAR;
965     register const char *nend;
966     const char *nsplit = NULL;
967     GV* gv;
968     HV* ostash = stash;
969     const char * const origname = name;
970     SV *const error_report = MUTABLE_SV(stash);
971     const U32 autoload = flags & GV_AUTOLOAD;
972     const U32 do_croak = flags & GV_CROAK;
973     const U32 is_utf8  = flags & SVf_UTF8;
974
975     PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS;
976
977     if (SvTYPE(stash) < SVt_PVHV)
978         stash = NULL;
979     else {
980         /* The only way stash can become NULL later on is if nsplit is set,
981            which in turn means that there is no need for a SVt_PVHV case
982            the error reporting code.  */
983     }
984
985     for (nend = name; *nend || nend != (origname + len); nend++) {
986         if (*nend == '\'') {
987             nsplit = nend;
988             name = nend + 1;
989         }
990         else if (*nend == ':' && *(nend + 1) == ':') {
991             nsplit = nend++;
992             name = nend + 1;
993         }
994     }
995     if (nsplit) {
996         if ((nsplit - origname) == 5 && memEQ(origname, "SUPER", 5)) {
997             /* ->SUPER::method should really be looked up in original stash */
998             SV * const tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_
999                      "%"HEKf"::SUPER",
1000                       HEKfARG(HvNAME_HEK((HV*)CopSTASH(PL_curcop)))
1001             ));
1002             /* __PACKAGE__::SUPER stash should be autovivified */
1003             stash = gv_get_super_pkg(SvPVX_const(tmpstr), SvCUR(tmpstr), SvUTF8(tmpstr));
1004             DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
1005                          origname, HvNAME_get(stash), name) );
1006         }
1007         else {
1008             /* don't autovifify if ->NoSuchStash::method */
1009             stash = gv_stashpvn(origname, nsplit - origname, is_utf8);
1010
1011             /* however, explicit calls to Pkg::SUPER::method may
1012                happen, and may require autovivification to work */
1013             if (!stash && (nsplit - origname) >= 7 &&
1014                 strnEQ(nsplit - 7, "::SUPER", 7) &&
1015                 gv_stashpvn(origname, nsplit - origname - 7, is_utf8))
1016               stash = gv_get_super_pkg(origname, nsplit - origname, flags);
1017         }
1018         ostash = stash;
1019     }
1020
1021     gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
1022     if (!gv) {
1023         if (strEQ(name,"import") || strEQ(name,"unimport"))
1024             gv = MUTABLE_GV(&PL_sv_yes);
1025         else if (autoload)
1026             gv = gv_autoload_pvn(
1027                 ostash, name, nend - name, GV_AUTOLOAD_ISMETHOD|flags
1028             );
1029         if (!gv && do_croak) {
1030             /* Right now this is exclusively for the benefit of S_method_common
1031                in pp_hot.c  */
1032             if (stash) {
1033                 /* If we can't find an IO::File method, it might be a call on
1034                  * a filehandle. If IO:File has not been loaded, try to
1035                  * require it first instead of croaking */
1036                 const char *stash_name = HvNAME_get(stash);
1037                 if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File")
1038                     && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL,
1039                                        STR_WITH_LEN("IO/File.pm"), 0,
1040                                        HV_FETCH_ISEXISTS, NULL, 0)
1041                 ) {
1042                     require_pv("IO/File.pm");
1043                     gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
1044                     if (gv)
1045                         return gv;
1046                 }
1047                 Perl_croak(aTHX_
1048                            "Can't locate object method \"%"SVf
1049                            "\" via package \"%"HEKf"\"",
1050                                     SVfARG(newSVpvn_flags(name, nend - name,
1051                                            SVs_TEMP | is_utf8)),
1052                                     HEKfARG(HvNAME_HEK(stash)));
1053             }
1054             else {
1055                 SV* packnamesv;
1056
1057                 if (nsplit) {
1058                     packnamesv = newSVpvn_flags(origname, nsplit - origname,
1059                                                     SVs_TEMP | is_utf8);
1060                 } else {
1061                     packnamesv = sv_2mortal(newSVsv(error_report));
1062                 }
1063
1064                 Perl_croak(aTHX_
1065                            "Can't locate object method \"%"SVf"\" via package \"%"SVf"\""
1066                            " (perhaps you forgot to load \"%"SVf"\"?)",
1067                            SVfARG(newSVpvn_flags(name, nend - name,
1068                                 SVs_TEMP | is_utf8)),
1069                            SVfARG(packnamesv), SVfARG(packnamesv));
1070             }
1071         }
1072     }
1073     else if (autoload) {
1074         CV* const cv = GvCV(gv);
1075         if (!CvROOT(cv) && !CvXSUB(cv)) {
1076             GV* stubgv;
1077             GV* autogv;
1078
1079             if (CvANON(cv))
1080                 stubgv = gv;
1081             else {
1082                 stubgv = CvGV(cv);
1083                 if (GvCV(stubgv) != cv)         /* orphaned import */
1084                     stubgv = gv;
1085             }
1086             autogv = gv_autoload_pvn(GvSTASH(stubgv),
1087                                   GvNAME(stubgv), GvNAMELEN(stubgv),
1088                                   GV_AUTOLOAD_ISMETHOD
1089                                    | (GvNAMEUTF8(stubgv) ? SVf_UTF8 : 0));
1090             if (autogv)
1091                 gv = autogv;
1092         }
1093     }
1094
1095     return gv;
1096 }
1097
1098 GV*
1099 Perl_gv_autoload_sv(pTHX_ HV *stash, SV* namesv, U32 flags)
1100 {
1101    char *namepv;
1102    STRLEN namelen;
1103    PERL_ARGS_ASSERT_GV_AUTOLOAD_SV;
1104    namepv = SvPV(namesv, namelen);
1105    if (SvUTF8(namesv))
1106        flags |= SVf_UTF8;
1107    return gv_autoload_pvn(stash, namepv, namelen, flags);
1108 }
1109
1110 GV*
1111 Perl_gv_autoload_pv(pTHX_ HV *stash, const char *namepv, U32 flags)
1112 {
1113    PERL_ARGS_ASSERT_GV_AUTOLOAD_PV;
1114    return gv_autoload_pvn(stash, namepv, strlen(namepv), flags);
1115 }
1116
1117 GV*
1118 Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
1119 {
1120     dVAR;
1121     GV* gv;
1122     CV* cv;
1123     HV* varstash;
1124     GV* vargv;
1125     SV* varsv;
1126     SV *packname = NULL;
1127     U32 is_utf8 = flags & SVf_UTF8 ? SVf_UTF8 : 0;
1128
1129     PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN;
1130
1131     if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
1132         return NULL;
1133     if (stash) {
1134         if (SvTYPE(stash) < SVt_PVHV) {
1135             STRLEN packname_len = 0;
1136             const char * const packname_ptr = SvPV_const(MUTABLE_SV(stash), packname_len);
1137             packname = newSVpvn_flags(packname_ptr, packname_len,
1138                                       SVs_TEMP | SvUTF8(stash));
1139             stash = NULL;
1140         }
1141         else
1142             packname = sv_2mortal(newSVhek(HvNAME_HEK(stash)));
1143     }
1144     if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, is_utf8)))
1145         return NULL;
1146     cv = GvCV(gv);
1147
1148     if (!(CvROOT(cv) || CvXSUB(cv)))
1149         return NULL;
1150
1151     /*
1152      * Inheriting AUTOLOAD for non-methods works ... for now.
1153      */
1154     if (
1155         !(flags & GV_AUTOLOAD_ISMETHOD)
1156      && (GvCVGEN(gv) || GvSTASH(gv) != stash)
1157     )
1158         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
1159                          "Use of inherited AUTOLOAD for non-method %"SVf"::%"SVf"() is deprecated",
1160                          SVfARG(packname),
1161                          SVfARG(newSVpvn_flags(name, len, SVs_TEMP | is_utf8)));
1162
1163     if (CvISXSUB(cv)) {
1164         /* Instead of forcing the XSUB do another lookup for $AUTOLOAD
1165          * and split that value on the last '::', pass along the same data
1166          * via the SvPVX field in the CV, and the stash in CvSTASH.
1167          *
1168          * Due to an unfortunate accident of history, the SvPVX field
1169          * serves two purposes.  It is also used for the subroutine's pro-
1170          * type.  Since SvPVX has been documented as returning the sub name
1171          * for a long time, but not as returning the prototype, we have
1172          * to preserve the SvPVX AUTOLOAD behaviour and put the prototype
1173          * elsewhere.
1174          *
1175          * We put the prototype in the same allocated buffer, but after
1176          * the sub name.  The SvPOK flag indicates the presence of a proto-
1177          * type.  The CvAUTOLOAD flag indicates the presence of a sub name.
1178          * If both flags are on, then SvLEN is used to indicate the end of
1179          * the prototype (artificially lower than what is actually allo-
1180          * cated), at the risk of having to reallocate a few bytes unneces-
1181          * sarily--but that should happen very rarely, if ever.
1182          *
1183          * We use SvUTF8 for both prototypes and sub names, so if one is
1184          * UTF8, the other must be upgraded.
1185          */
1186         CvSTASH_set(cv, stash);
1187         if (SvPOK(cv)) { /* Ouch! */
1188             SV *tmpsv = newSVpvn_flags(name, len, is_utf8);
1189             STRLEN ulen;
1190             const char *proto = CvPROTO(cv);
1191             assert(proto);
1192             if (SvUTF8(cv))
1193                 sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2);
1194             ulen = SvCUR(tmpsv);
1195             SvCUR(tmpsv)++; /* include null in string */
1196             sv_catpvn_flags(
1197                 tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv)
1198             );
1199             SvTEMP_on(tmpsv); /* Allow theft */
1200             sv_setsv_nomg((SV *)cv, tmpsv);
1201             SvTEMP_off(tmpsv);
1202             SvREFCNT_dec(tmpsv);
1203             SvLEN(cv) = SvCUR(cv) + 1;
1204             SvCUR(cv) = ulen;
1205         }
1206         else {
1207           sv_setpvn((SV *)cv, name, len);
1208           SvPOK_off(cv);
1209           if (is_utf8)
1210             SvUTF8_on(cv);
1211           else SvUTF8_off(cv);
1212         }
1213         CvAUTOLOAD_on(cv);
1214     }
1215
1216     /*
1217      * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
1218      * The subroutine's original name may not be "AUTOLOAD", so we don't
1219      * use that, but for lack of anything better we will use the sub's
1220      * original package to look up $AUTOLOAD.
1221      */
1222     varstash = GvSTASH(CvGV(cv));
1223     vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
1224     ENTER;
1225
1226     if (!isGV(vargv)) {
1227         gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0);
1228 #ifdef PERL_DONT_CREATE_GVSV
1229         GvSV(vargv) = newSV(0);
1230 #endif
1231     }
1232     LEAVE;
1233     varsv = GvSVn(vargv);
1234     sv_setsv(varsv, packname);
1235     sv_catpvs(varsv, "::");
1236     /* Ensure SvSETMAGIC() is called if necessary. In particular, to clear
1237        tainting if $FOO::AUTOLOAD was previously tainted, but is not now.  */
1238     sv_catpvn_flags(
1239         varsv, name, len,
1240         SV_GMAGIC|SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES)
1241     );
1242     if (is_utf8)
1243         SvUTF8_on(varsv);
1244     return gv;
1245 }
1246
1247
1248 /* require_tie_mod() internal routine for requiring a module
1249  * that implements the logic of automatic ties like %! and %-
1250  *
1251  * The "gv" parameter should be the glob.
1252  * "varpv" holds the name of the var, used for error messages.
1253  * "namesv" holds the module name. Its refcount will be decremented.
1254  * "methpv" holds the method name to test for to check that things
1255  *   are working reasonably close to as expected.
1256  * "flags": if flag & 1 then save the scalar before loading.
1257  * For the protection of $! to work (it is set by this routine)
1258  * the sv slot must already be magicalized.
1259  */
1260 STATIC HV*
1261 S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv,const U32 flags)
1262 {
1263     dVAR;
1264     HV* stash = gv_stashsv(namesv, 0);
1265
1266     PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
1267
1268     if (!stash || !(gv_fetchmethod(stash, methpv))) {
1269         SV *module = newSVsv(namesv);
1270         char varname = *varpv; /* varpv might be clobbered by load_module,
1271                                   so save it. For the moment it's always
1272                                   a single char. */
1273         const char type = varname == '[' ? '$' : '%';
1274         dSP;
1275         ENTER;
1276         if ( flags & 1 )
1277             save_scalar(gv);
1278         PUSHSTACKi(PERLSI_MAGIC);
1279         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
1280         POPSTACK;
1281         LEAVE;
1282         SPAGAIN;
1283         stash = gv_stashsv(namesv, 0);
1284         if (!stash)
1285             Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" is not available",
1286                     type, varname, SVfARG(namesv));
1287         else if (!gv_fetchmethod(stash, methpv))
1288             Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" does not support method %s",
1289                     type, varname, SVfARG(namesv), methpv);
1290     }
1291     SvREFCNT_dec(namesv);
1292     return stash;
1293 }
1294
1295 /*
1296 =for apidoc gv_stashpv
1297
1298 Returns a pointer to the stash for a specified package.  Uses C<strlen> to
1299 determine the length of C<name>, then calls C<gv_stashpvn()>.
1300
1301 =cut
1302 */
1303
1304 HV*
1305 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
1306 {
1307     PERL_ARGS_ASSERT_GV_STASHPV;
1308     return gv_stashpvn(name, strlen(name), create);
1309 }
1310
1311 /*
1312 =for apidoc gv_stashpvn
1313
1314 Returns a pointer to the stash for a specified package.  The C<namelen>
1315 parameter indicates the length of the C<name>, in bytes.  C<flags> is passed
1316 to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
1317 created if it does not already exist.  If the package does not exist and
1318 C<flags> is 0 (or any other setting that does not create packages) then NULL
1319 is returned.
1320
1321
1322 =cut
1323 */
1324
1325 HV*
1326 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
1327 {
1328     char smallbuf[128];
1329     char *tmpbuf;
1330     HV *stash;
1331     GV *tmpgv;
1332     U32 tmplen = namelen + 2;
1333
1334     PERL_ARGS_ASSERT_GV_STASHPVN;
1335
1336     if (tmplen <= sizeof smallbuf)
1337         tmpbuf = smallbuf;
1338     else
1339         Newx(tmpbuf, tmplen, char);
1340     Copy(name, tmpbuf, namelen, char);
1341     tmpbuf[namelen]   = ':';
1342     tmpbuf[namelen+1] = ':';
1343     tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
1344     if (tmpbuf != smallbuf)
1345         Safefree(tmpbuf);
1346     if (!tmpgv)
1347         return NULL;
1348     stash = GvHV(tmpgv);
1349     if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL;
1350     assert(stash);
1351     if (!HvNAME_get(stash)) {
1352         hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 );
1353         
1354         /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */
1355         /* If the containing stash has multiple effective
1356            names, see that this one gets them, too. */
1357         if (HvAUX(GvSTASH(tmpgv))->xhv_name_count)
1358             mro_package_moved(stash, NULL, tmpgv, 1);
1359     }
1360     return stash;
1361 }
1362
1363 /*
1364 =for apidoc gv_stashsv
1365
1366 Returns a pointer to the stash for a specified package.  See C<gv_stashpvn>.
1367
1368 =cut
1369 */
1370
1371 HV*
1372 Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
1373 {
1374     STRLEN len;
1375     const char * const ptr = SvPV_const(sv,len);
1376
1377     PERL_ARGS_ASSERT_GV_STASHSV;
1378
1379     return gv_stashpvn(ptr, len, flags | SvUTF8(sv));
1380 }
1381
1382
1383 GV *
1384 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
1385     PERL_ARGS_ASSERT_GV_FETCHPV;
1386     return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
1387 }
1388
1389 GV *
1390 Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
1391     STRLEN len;
1392     const char * const nambeg =
1393        SvPV_flags_const(name, len, flags & GV_NO_SVGMAGIC ? 0 : SV_GMAGIC);
1394     PERL_ARGS_ASSERT_GV_FETCHSV;
1395     return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
1396 }
1397
1398 STATIC void
1399 S_gv_magicalize_isa(pTHX_ GV *gv)
1400 {
1401     AV* av;
1402
1403     PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
1404
1405     av = GvAVn(gv);
1406     GvMULTI_on(gv);
1407     sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1408              NULL, 0);
1409 }
1410
1411 STATIC void
1412 S_gv_magicalize_overload(pTHX_ GV *gv)
1413 {
1414     HV* hv;
1415
1416     PERL_ARGS_ASSERT_GV_MAGICALIZE_OVERLOAD;
1417
1418     hv = GvHVn(gv);
1419     GvMULTI_on(gv);
1420     hv_magic(hv, NULL, PERL_MAGIC_overload);
1421 }
1422
1423 GV *
1424 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
1425                        const svtype sv_type)
1426 {
1427     dVAR;
1428     register const char *name = nambeg;
1429     register GV *gv = NULL;
1430     GV**gvp;
1431     I32 len;
1432     register const char *name_cursor;
1433     HV *stash = NULL;
1434     const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
1435     const I32 no_expand = flags & GV_NOEXPAND;
1436     const I32 add = flags & ~GV_NOADD_MASK;
1437     const U32 is_utf8 = flags & SVf_UTF8;
1438     bool addmg = !!(flags & GV_ADDMG);
1439     const char *const name_end = nambeg + full_len;
1440     const char *const name_em1 = name_end - 1;
1441     U32 faking_it;
1442
1443     PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
1444
1445     if (flags & GV_NOTQUAL) {
1446         /* Caller promised that there is no stash, so we can skip the check. */
1447         len = full_len;
1448         goto no_stash;
1449     }
1450
1451     if (full_len > 2 && *name == '*' && isIDFIRST_lazy_if(name + 1, is_utf8)) {
1452         /* accidental stringify on a GV? */
1453         name++;
1454     }
1455
1456     for (name_cursor = name; name_cursor < name_end; name_cursor++) {
1457         if (name_cursor < name_em1 &&
1458             ((*name_cursor == ':'
1459              && name_cursor[1] == ':')
1460             || *name_cursor == '\''))
1461         {
1462             if (!stash)
1463                 stash = PL_defstash;
1464             if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
1465                 return NULL;
1466
1467             len = name_cursor - name;
1468             if (name_cursor > nambeg) { /* Skip for initial :: or ' */
1469                 const char *key;
1470                 if (*name_cursor == ':') {
1471                     key = name;
1472                     len += 2;
1473                 } else {
1474                     char *tmpbuf;
1475                     Newx(tmpbuf, len+2, char);
1476                     Copy(name, tmpbuf, len, char);
1477                     tmpbuf[len++] = ':';
1478                     tmpbuf[len++] = ':';
1479                     key = tmpbuf;
1480                 }
1481                 gvp = (GV**)hv_fetch(stash, key, is_utf8 ? -len : len, add);
1482                 gv = gvp ? *gvp : NULL;
1483                 if (gv && gv != (const GV *)&PL_sv_undef) {
1484                     if (SvTYPE(gv) != SVt_PVGV)
1485                         gv_init_pvn(gv, stash, key, len, (add & GV_ADDMULTI)|is_utf8);
1486                     else
1487                         GvMULTI_on(gv);
1488                 }
1489                 if (key != name)
1490                     Safefree(key);
1491                 if (!gv || gv == (const GV *)&PL_sv_undef)
1492                     return NULL;
1493
1494                 if (!(stash = GvHV(gv)))
1495                 {
1496                     stash = GvHV(gv) = newHV();
1497                     if (!HvNAME_get(stash)) {
1498                         if (GvSTASH(gv) == PL_defstash && len == 6
1499                          && strnEQ(name, "CORE", 4))
1500                             hv_name_set(stash, "CORE", 4, 0);
1501                         else
1502                             hv_name_set(
1503                                 stash, nambeg, name_cursor-nambeg, is_utf8
1504                             );
1505                         /* If the containing stash has multiple effective
1506                            names, see that this one gets them, too. */
1507                         if (HvAUX(GvSTASH(gv))->xhv_name_count)
1508                             mro_package_moved(stash, NULL, gv, 1);
1509                     }
1510                 }
1511                 else if (!HvNAME_get(stash))
1512                     hv_name_set(stash, nambeg, name_cursor - nambeg, is_utf8);
1513             }
1514
1515             if (*name_cursor == ':')
1516                 name_cursor++;
1517             name = name_cursor+1;
1518             if (name == name_end)
1519                 return gv
1520                     ? gv : MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
1521         }
1522     }
1523     len = name_cursor - name;
1524
1525     /* No stash in name, so see how we can default */
1526
1527     if (!stash) {
1528     no_stash:
1529         if (len && isIDFIRST_lazy(name)) {
1530             bool global = FALSE;
1531
1532             switch (len) {
1533             case 1:
1534                 if (*name == '_')
1535                     global = TRUE;
1536                 break;
1537             case 3:
1538                 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1539                     || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1540                     || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
1541                     global = TRUE;
1542                 break;
1543             case 4:
1544                 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1545                     && name[3] == 'V')
1546                     global = TRUE;
1547                 break;
1548             case 5:
1549                 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1550                     && name[3] == 'I' && name[4] == 'N')
1551                     global = TRUE;
1552                 break;
1553             case 6:
1554                 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1555                     &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1556                        ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
1557                     global = TRUE;
1558                 break;
1559             case 7:
1560                 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1561                     && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1562                     && name[6] == 'T')
1563                     global = TRUE;
1564                 break;
1565             }
1566
1567             if (global)
1568                 stash = PL_defstash;
1569             else if (IN_PERL_COMPILETIME) {
1570                 stash = PL_curstash;
1571                 if (add && (PL_hints & HINT_STRICT_VARS) &&
1572                     sv_type != SVt_PVCV &&
1573                     sv_type != SVt_PVGV &&
1574                     sv_type != SVt_PVFM &&
1575                     sv_type != SVt_PVIO &&
1576                     !(len == 1 && sv_type == SVt_PV &&
1577                       (*name == 'a' || *name == 'b')) )
1578                 {
1579                     gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -len : len,0);
1580                     if (!gvp ||
1581                         *gvp == (const GV *)&PL_sv_undef ||
1582                         SvTYPE(*gvp) != SVt_PVGV)
1583                     {
1584                         stash = NULL;
1585                     }
1586                     else if ((sv_type == SVt_PV   && !GvIMPORTED_SV(*gvp)) ||
1587                              (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1588                              (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
1589                     {
1590                         SV* namesv = newSVpvn_flags(name, len, SVs_TEMP | is_utf8);
1591                         /* diag_listed_as: Variable "%s" is not imported%s */
1592                         Perl_ck_warner_d(
1593                             aTHX_ packWARN(WARN_MISC),
1594                             "Variable \"%c%"SVf"\" is not imported",
1595                             sv_type == SVt_PVAV ? '@' :
1596                             sv_type == SVt_PVHV ? '%' : '$',
1597                             SVfARG(namesv));
1598                         if (GvCVu(*gvp))
1599                             Perl_ck_warner_d(
1600                                 aTHX_ packWARN(WARN_MISC),
1601                                 "\t(Did you mean &%"SVf" instead?)\n", SVfARG(namesv)
1602                             );
1603                         stash = NULL;
1604                     }
1605                 }
1606             }
1607             else
1608                 stash = CopSTASH(PL_curcop);
1609         }
1610         else
1611             stash = PL_defstash;
1612     }
1613
1614     /* By this point we should have a stash and a name */
1615
1616     if (!stash) {
1617         if (add) {
1618             SV * const err = Perl_mess(aTHX_
1619                  "Global symbol \"%s%"SVf"\" requires explicit package name",
1620                  (sv_type == SVt_PV ? "$"
1621                   : sv_type == SVt_PVAV ? "@"
1622                   : sv_type == SVt_PVHV ? "%"
1623                   : ""), SVfARG(newSVpvn_flags(name, len, SVs_TEMP | is_utf8)));
1624             GV *gv;
1625             if (USE_UTF8_IN_NAMES)
1626                 SvUTF8_on(err);
1627             qerror(err);
1628             gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
1629             if(!gv) {
1630                 /* symbol table under destruction */
1631                 return NULL;
1632             }   
1633             stash = GvHV(gv);
1634         }
1635         else
1636             return NULL;
1637     }
1638
1639     if (!SvREFCNT(stash))       /* symbol table under destruction */
1640         return NULL;
1641
1642     gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -len : len,add);
1643     if (!gvp || *gvp == (const GV *)&PL_sv_undef) {
1644         if (addmg) gv = (GV *)newSV(0);
1645         else return NULL;
1646     }
1647     else gv = *gvp, addmg = 0;
1648     /* From this point on, addmg means gv has not been inserted in the
1649        symtab yet. */
1650
1651     if (SvTYPE(gv) == SVt_PVGV) {
1652         if (add) {
1653             GvMULTI_on(gv);
1654             gv_init_svtype(gv, sv_type);
1655             if (len == 1 && stash == PL_defstash) {
1656               if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
1657                 if (*name == '!')
1658                     require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1659                 else if (*name == '-' || *name == '+')
1660                     require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1661               }
1662               if ((sv_type==SVt_PV || sv_type==SVt_PVGV) && *name == '[')
1663                 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1664             }
1665             else if (len == 3 && sv_type == SVt_PVAV
1666                   && strnEQ(name, "ISA", 3)
1667                   && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
1668                 gv_magicalize_isa(gv);
1669         }
1670         return gv;
1671     } else if (no_init) {
1672         assert(!addmg);
1673         return gv;
1674     } else if (no_expand && SvROK(gv)) {
1675         assert(!addmg);
1676         return gv;
1677     }
1678
1679     /* Adding a new symbol.
1680        Unless of course there was already something non-GV here, in which case
1681        we want to behave as if there was always a GV here, containing some sort
1682        of subroutine.
1683        Otherwise we run the risk of creating things like GvIO, which can cause
1684        subtle bugs. eg the one that tripped up SQL::Translator  */
1685
1686     faking_it = SvOK(gv);
1687
1688     if (add & GV_ADDWARN)
1689         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "Had to create %"SVf" unexpectedly",
1690                 SVfARG(newSVpvn_flags(nambeg, name_end-nambeg, SVs_TEMP | is_utf8 )));
1691     gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8);
1692
1693     if ( isIDFIRST_lazy_if(name, is_utf8)
1694                 && ! (isLEXWARN_on ? ckWARN(WARN_ONCE) : (PL_dowarn & G_WARN_ON ) ) )
1695         GvMULTI_on(gv) ;
1696
1697     /* set up magic where warranted */
1698     if (stash != PL_defstash) { /* not the main stash */
1699         /* We only have to check for four names here: EXPORT, ISA, OVERLOAD
1700            and VERSION. All the others apply only to the main stash or to
1701            CORE (which is checked right after this). */
1702         if (len > 2) {
1703             const char * const name2 = name + 1;
1704             switch (*name) {
1705             case 'E':
1706                 if (strnEQ(name2, "XPORT", 5))
1707                     GvMULTI_on(gv);
1708                 break;
1709             case 'I':
1710                 if (strEQ(name2, "SA"))
1711                     gv_magicalize_isa(gv);
1712                 break;
1713             case 'O':
1714                 if (strEQ(name2, "VERLOAD"))
1715                     gv_magicalize_overload(gv);
1716                 break;
1717             case 'V':
1718                 if (strEQ(name2, "ERSION"))
1719                     GvMULTI_on(gv);
1720                 break;
1721             default:
1722                 goto try_core;
1723             }
1724             goto add_magical_gv;
1725         }
1726       try_core:
1727         if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
1728           /* Avoid null warning: */
1729           const char * const stashname = HvNAME(stash); assert(stashname);
1730           if (strnEQ(stashname, "CORE", 4)
1731            && S_maybe_add_coresub(aTHX_
1732                 addmg ? stash : 0, gv, name, len, nambeg, full_len
1733               ))
1734             addmg = 0;
1735         }
1736     }
1737     else if (len > 1) {
1738 #ifndef EBCDIC
1739         if (*name > 'V' ) {
1740             NOOP;
1741             /* Nothing else to do.
1742                The compiler will probably turn the switch statement into a
1743                branch table. Make sure we avoid even that small overhead for
1744                the common case of lower case variable names.  */
1745         } else
1746 #endif
1747         {
1748             const char * const name2 = name + 1;
1749             switch (*name) {
1750             case 'A':
1751                 if (strEQ(name2, "RGV")) {
1752                     IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1753                 }
1754                 else if (strEQ(name2, "RGVOUT")) {
1755                     GvMULTI_on(gv);
1756                 }
1757                 break;
1758             case 'E':
1759                 if (strnEQ(name2, "XPORT", 5))
1760                     GvMULTI_on(gv);
1761                 break;
1762             case 'I':
1763                 if (strEQ(name2, "SA")) {
1764                     gv_magicalize_isa(gv);
1765                 }
1766                 break;
1767             case 'O':
1768                 if (strEQ(name2, "VERLOAD")) {
1769                     gv_magicalize_overload(gv);
1770                 }
1771                 break;
1772             case 'S':
1773                 if (strEQ(name2, "IG")) {
1774                     HV *hv;
1775                     I32 i;
1776                     if (!PL_psig_name) {
1777                         Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
1778                         Newxz(PL_psig_pend, SIG_SIZE, int);
1779                         PL_psig_ptr = PL_psig_name + SIG_SIZE;
1780                     } else {
1781                         /* I think that the only way to get here is to re-use an
1782                            embedded perl interpreter, where the previous
1783                            use didn't clean up fully because
1784                            PL_perl_destruct_level was 0. I'm not sure that we
1785                            "support" that, in that I suspect in that scenario
1786                            there are sufficient other garbage values left in the
1787                            interpreter structure that something else will crash
1788                            before we get here. I suspect that this is one of
1789                            those "doctor, it hurts when I do this" bugs.  */
1790                         Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
1791                         Zero(PL_psig_pend, SIG_SIZE, int);
1792                     }
1793                     GvMULTI_on(gv);
1794                     hv = GvHVn(gv);
1795                     hv_magic(hv, NULL, PERL_MAGIC_sig);
1796                     for (i = 1; i < SIG_SIZE; i++) {
1797                         SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1798                         if (init)
1799                             sv_setsv(*init, &PL_sv_undef);
1800                     }
1801                 }
1802                 break;
1803             case 'V':
1804                 if (strEQ(name2, "ERSION"))
1805                     GvMULTI_on(gv);
1806                 break;
1807             case '\003':        /* $^CHILD_ERROR_NATIVE */
1808                 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1809                     goto magicalize;
1810                 break;
1811             case '\005':        /* $^ENCODING */
1812                 if (strEQ(name2, "NCODING"))
1813                     goto magicalize;
1814                 break;
1815             case '\007':        /* $^GLOBAL_PHASE */
1816                 if (strEQ(name2, "LOBAL_PHASE"))
1817                     goto ro_magicalize;
1818                 break;
1819             case '\015':        /* $^MATCH */
1820                 if (strEQ(name2, "ATCH"))
1821                     goto magicalize;
1822             case '\017':        /* $^OPEN */
1823                 if (strEQ(name2, "PEN"))
1824                     goto magicalize;
1825                 break;
1826             case '\020':        /* $^PREMATCH  $^POSTMATCH */
1827                 if (strEQ(name2, "REMATCH") || strEQ(name2, "OSTMATCH"))
1828                     goto magicalize;
1829                 break;
1830             case '\024':        /* ${^TAINT} */
1831                 if (strEQ(name2, "AINT"))
1832                     goto ro_magicalize;
1833                 break;
1834             case '\025':        /* ${^UNICODE}, ${^UTF8LOCALE} */
1835                 if (strEQ(name2, "NICODE"))
1836                     goto ro_magicalize;
1837                 if (strEQ(name2, "TF8LOCALE"))
1838                     goto ro_magicalize;
1839                 if (strEQ(name2, "TF8CACHE"))
1840                     goto magicalize;
1841                 break;
1842             case '\027':        /* $^WARNING_BITS */
1843                 if (strEQ(name2, "ARNING_BITS"))
1844                     goto magicalize;
1845                 break;
1846             case '1':
1847             case '2':
1848             case '3':
1849             case '4':
1850             case '5':
1851             case '6':
1852             case '7':
1853             case '8':
1854             case '9':
1855             {
1856                 /* Ensures that we have an all-digit variable, ${"1foo"} fails
1857                    this test  */
1858                 /* This snippet is taken from is_gv_magical */
1859                 const char *end = name + len;
1860                 while (--end > name) {
1861                     if (!isDIGIT(*end)) goto add_magical_gv;
1862                 }
1863                 goto magicalize;
1864             }
1865             }
1866         }
1867     } else {
1868         /* Names of length 1.  (Or 0. But name is NUL terminated, so that will
1869            be case '\0' in this switch statement (ie a default case)  */
1870         switch (*name) {
1871         case '&':               /* $& */
1872         case '`':               /* $` */
1873         case '\'':              /* $' */
1874             if (
1875                 sv_type == SVt_PVAV ||
1876                 sv_type == SVt_PVHV ||
1877                 sv_type == SVt_PVCV ||
1878                 sv_type == SVt_PVFM ||
1879                 sv_type == SVt_PVIO
1880                 ) { break; }
1881             PL_sawampersand = TRUE;
1882             goto magicalize;
1883
1884         case ':':               /* $: */
1885             sv_setpv(GvSVn(gv),PL_chopset);
1886             goto magicalize;
1887
1888         case '?':               /* $? */
1889 #ifdef COMPLEX_STATUS
1890             SvUPGRADE(GvSVn(gv), SVt_PVLV);
1891 #endif
1892             goto magicalize;
1893
1894         case '!':               /* $! */
1895             GvMULTI_on(gv);
1896             /* If %! has been used, automatically load Errno.pm. */
1897
1898             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1899
1900             /* magicalization must be done before require_tie_mod is called */
1901             if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1902                 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1903
1904             break;
1905         case '-':               /* $- */
1906         case '+':               /* $+ */
1907         GvMULTI_on(gv); /* no used once warnings here */
1908         {
1909             AV* const av = GvAVn(gv);
1910             SV* const avc = (*name == '+') ? MUTABLE_SV(av) : NULL;
1911
1912             sv_magic(MUTABLE_SV(av), avc, PERL_MAGIC_regdata, NULL, 0);
1913             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1914             if (avc)
1915                 SvREADONLY_on(GvSVn(gv));
1916             SvREADONLY_on(av);
1917
1918             if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1919                 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1920
1921             break;
1922         }
1923         case '*':               /* $* */
1924         case '#':               /* $# */
1925             if (sv_type == SVt_PV)
1926                 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1927                                  "$%c is no longer supported", *name);
1928             break;
1929         case '|':               /* $| */
1930             sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
1931             goto magicalize;
1932
1933         case '\010':    /* $^H */
1934             {
1935                 HV *const hv = GvHVn(gv);
1936                 hv_magic(hv, NULL, PERL_MAGIC_hints);
1937             }
1938             goto magicalize;
1939         case '[':               /* $[ */
1940             if (sv_type == SVt_PV || sv_type == SVt_PVGV) {
1941                 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1942                 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1943                 addmg = 0;
1944             }
1945             break;
1946         case '\023':    /* $^S */
1947         ro_magicalize:
1948             SvREADONLY_on(GvSVn(gv));
1949             /* FALL THROUGH */
1950         case '0':               /* $0 */
1951         case '1':               /* $1 */
1952         case '2':               /* $2 */
1953         case '3':               /* $3 */
1954         case '4':               /* $4 */
1955         case '5':               /* $5 */
1956         case '6':               /* $6 */
1957         case '7':               /* $7 */
1958         case '8':               /* $8 */
1959         case '9':               /* $9 */
1960         case '^':               /* $^ */
1961         case '~':               /* $~ */
1962         case '=':               /* $= */
1963         case '%':               /* $% */
1964         case '.':               /* $. */
1965         case '(':               /* $( */
1966         case ')':               /* $) */
1967         case '<':               /* $< */
1968         case '>':               /* $> */
1969         case '\\':              /* $\ */
1970         case '/':               /* $/ */
1971         case '$':               /* $$ */
1972         case '\001':    /* $^A */
1973         case '\003':    /* $^C */
1974         case '\004':    /* $^D */
1975         case '\005':    /* $^E */
1976         case '\006':    /* $^F */
1977         case '\011':    /* $^I, NOT \t in EBCDIC */
1978         case '\016':    /* $^N */
1979         case '\017':    /* $^O */
1980         case '\020':    /* $^P */
1981         case '\024':    /* $^T */
1982         case '\027':    /* $^W */
1983         magicalize:
1984             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1985             break;
1986
1987         case '\014':    /* $^L */
1988             sv_setpvs(GvSVn(gv),"\f");
1989             PL_formfeed = GvSVn(gv);
1990             break;
1991         case ';':               /* $; */
1992             sv_setpvs(GvSVn(gv),"\034");
1993             break;
1994         case ']':               /* $] */
1995         {
1996             SV * const sv = GvSV(gv);
1997             if (!sv_derived_from(PL_patchlevel, "version"))
1998                 upg_version(PL_patchlevel, TRUE);
1999             GvSV(gv) = vnumify(PL_patchlevel);
2000             SvREADONLY_on(GvSV(gv));
2001             SvREFCNT_dec(sv);
2002         }
2003         break;
2004         case '\026':    /* $^V */
2005         {
2006             SV * const sv = GvSV(gv);
2007             GvSV(gv) = new_version(PL_patchlevel);
2008             SvREADONLY_on(GvSV(gv));
2009             SvREFCNT_dec(sv);
2010         }
2011         break;
2012         }
2013     }
2014   add_magical_gv:
2015     if (addmg) {
2016         if (GvAV(gv) || GvHV(gv) || GvIO(gv) || GvCV(gv) || (
2017              GvSV(gv) && (SvOK(GvSV(gv)) || SvMAGICAL(GvSV(gv)))
2018            ))
2019             (void)hv_store(stash,name,len,(SV *)gv,0);
2020         else SvREFCNT_dec(gv), gv = NULL;
2021     }
2022     if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type);
2023     return gv;
2024 }
2025
2026 void
2027 Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2028 {
2029     const char *name;
2030     const HV * const hv = GvSTASH(gv);
2031
2032     PERL_ARGS_ASSERT_GV_FULLNAME4;
2033
2034     sv_setpv(sv, prefix ? prefix : "");
2035
2036     if (hv && (name = HvNAME(hv))) {
2037       const STRLEN len = HvNAMELEN(hv);
2038       if (keepmain || strnNE(name, "main", len)) {
2039         sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES);
2040         sv_catpvs(sv,"::");
2041       }
2042     }
2043     else sv_catpvs(sv,"__ANON__::");
2044     sv_catsv(sv,sv_2mortal(newSVhek(GvNAME_HEK(gv))));
2045 }
2046
2047 void
2048 Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2049 {
2050     const GV * const egv = GvEGVx(gv);
2051
2052     PERL_ARGS_ASSERT_GV_EFULLNAME4;
2053
2054     gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
2055 }
2056
2057 void
2058 Perl_gv_check(pTHX_ const HV *stash)
2059 {
2060     dVAR;
2061     register I32 i;
2062
2063     PERL_ARGS_ASSERT_GV_CHECK;
2064
2065     if (!HvARRAY(stash))
2066         return;
2067     for (i = 0; i <= (I32) HvMAX(stash); i++) {
2068         const HE *entry;
2069         for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
2070             register GV *gv;
2071             HV *hv;
2072             if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
2073                 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
2074             {
2075                 if (hv != PL_defstash && hv != stash)
2076                      gv_check(hv);              /* nested package */
2077             }
2078             else if ( *HeKEY(entry) != '_'
2079                         && isIDFIRST_lazy_if(HeKEY(entry), HeUTF8(entry)) ) {
2080                 const char *file;
2081                 gv = MUTABLE_GV(HeVAL(entry));
2082                 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
2083                     continue;
2084                 file = GvFILE(gv);
2085                 CopLINE_set(PL_curcop, GvLINE(gv));
2086 #ifdef USE_ITHREADS
2087                 CopFILE(PL_curcop) = (char *)file;      /* set for warning */
2088 #else
2089                 CopFILEGV(PL_curcop)
2090                     = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
2091 #endif
2092                 Perl_warner(aTHX_ packWARN(WARN_ONCE),
2093                         "Name \"%"HEKf"::%"HEKf
2094                         "\" used only once: possible typo",
2095                             HEKfARG(HvNAME_HEK(stash)),
2096                             HEKfARG(GvNAME_HEK(gv)));
2097             }
2098         }
2099     }
2100 }
2101
2102 GV *
2103 Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags)
2104 {
2105     dVAR;
2106     PERL_ARGS_ASSERT_NEWGVGEN_FLAGS;
2107
2108     return gv_fetchpv(Perl_form(aTHX_ "%"SVf"::_GEN_%ld",
2109                                     SVfARG(newSVpvn_flags(pack, strlen(pack),
2110                                             SVs_TEMP | flags)),
2111                                 (long)PL_gensym++),
2112                       GV_ADD, SVt_PVGV);
2113 }
2114
2115 /* hopefully this is only called on local symbol table entries */
2116
2117 GP*
2118 Perl_gp_ref(pTHX_ GP *gp)
2119 {
2120     dVAR;
2121     if (!gp)
2122         return NULL;
2123     gp->gp_refcnt++;
2124     if (gp->gp_cv) {
2125         if (gp->gp_cvgen) {
2126             /* If the GP they asked for a reference to contains
2127                a method cache entry, clear it first, so that we
2128                don't infect them with our cached entry */
2129             SvREFCNT_dec(gp->gp_cv);
2130             gp->gp_cv = NULL;
2131             gp->gp_cvgen = 0;
2132         }
2133     }
2134     return gp;
2135 }
2136
2137 void
2138 Perl_gp_free(pTHX_ GV *gv)
2139 {
2140     dVAR;
2141     GP* gp;
2142     int attempts = 100;
2143
2144     if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
2145         return;
2146     if (gp->gp_refcnt == 0) {
2147         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2148                          "Attempt to free unreferenced glob pointers"
2149                          pTHX__FORMAT pTHX__VALUE);
2150         return;
2151     }
2152     if (--gp->gp_refcnt > 0) {
2153         if (gp->gp_egv == gv)
2154             gp->gp_egv = 0;
2155         GvGP_set(gv, NULL);
2156         return;
2157     }
2158
2159     while (1) {
2160       /* Copy and null out all the glob slots, so destructors do not see
2161          freed SVs. */
2162       HEK * const file_hek = gp->gp_file_hek;
2163       SV  * const sv       = gp->gp_sv;
2164       AV  * const av       = gp->gp_av;
2165       HV  * const hv       = gp->gp_hv;
2166       IO  * const io       = gp->gp_io;
2167       CV  * const cv       = gp->gp_cv;
2168       CV  * const form     = gp->gp_form;
2169
2170       gp->gp_file_hek = NULL;
2171       gp->gp_sv       = NULL;
2172       gp->gp_av       = NULL;
2173       gp->gp_hv       = NULL;
2174       gp->gp_io       = NULL;
2175       gp->gp_cv       = NULL;
2176       gp->gp_form     = NULL;
2177
2178       if (file_hek)
2179         unshare_hek(file_hek);
2180
2181       SvREFCNT_dec(sv);
2182       SvREFCNT_dec(av);
2183       /* FIXME - another reference loop GV -> symtab -> GV ?
2184          Somehow gp->gp_hv can end up pointing at freed garbage.  */
2185       if (hv && SvTYPE(hv) == SVt_PVHV) {
2186         const HEK *hvname_hek = HvNAME_HEK(hv);
2187         if (PL_stashcache && hvname_hek)
2188            (void)hv_delete(PL_stashcache, HEK_KEY(hvname_hek),
2189                       (HEK_UTF8(hvname_hek) ? -HEK_LEN(hvname_hek) : HEK_LEN(hvname_hek)),
2190                       G_DISCARD);
2191         SvREFCNT_dec(hv);
2192       }
2193       SvREFCNT_dec(io);
2194       SvREFCNT_dec(cv);
2195       SvREFCNT_dec(form);
2196
2197       if (!gp->gp_file_hek
2198        && !gp->gp_sv
2199        && !gp->gp_av
2200        && !gp->gp_hv
2201        && !gp->gp_io
2202        && !gp->gp_cv
2203        && !gp->gp_form) break;
2204
2205       if (--attempts == 0) {
2206         Perl_die(aTHX_
2207           "panic: gp_free failed to free glob pointer - "
2208           "something is repeatedly re-creating entries"
2209         );
2210       }
2211     }
2212
2213     Safefree(gp);
2214     GvGP_set(gv, NULL);
2215 }
2216
2217 int
2218 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
2219 {
2220     AMT * const amtp = (AMT*)mg->mg_ptr;
2221     PERL_UNUSED_ARG(sv);
2222
2223     PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
2224
2225     if (amtp && AMT_AMAGIC(amtp)) {
2226         int i;
2227         for (i = 1; i < NofAMmeth; i++) {
2228             CV * const cv = amtp->table[i];
2229             if (cv) {
2230                 SvREFCNT_dec(MUTABLE_SV(cv));
2231                 amtp->table[i] = NULL;
2232             }
2233         }
2234     }
2235  return 0;
2236 }
2237
2238 /* Updates and caches the CV's */
2239 /* Returns:
2240  * 1 on success and there is some overload
2241  * 0 if there is no overload
2242  * -1 if some error occurred and it couldn't croak
2243  */
2244
2245 int
2246 Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
2247 {
2248   dVAR;
2249   MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2250   AMT amt;
2251   const struct mro_meta* stash_meta = HvMROMETA(stash);
2252   U32 newgen;
2253
2254   PERL_ARGS_ASSERT_GV_AMUPDATE;
2255
2256   newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2257   if (mg) {
2258       const AMT * const amtp = (AMT*)mg->mg_ptr;
2259       if (amtp->was_ok_am == PL_amagic_generation
2260           && amtp->was_ok_sub == newgen) {
2261           return AMT_OVERLOADED(amtp) ? 1 : 0;
2262       }
2263       sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
2264   }
2265
2266   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
2267
2268   Zero(&amt,1,AMT);
2269   amt.was_ok_am = PL_amagic_generation;
2270   amt.was_ok_sub = newgen;
2271   amt.fallback = AMGfallNO;
2272   amt.flags = 0;
2273
2274   {
2275     int filled = 0, have_ovl = 0;
2276     int i, lim = 1;
2277
2278     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
2279
2280     /* Try to find via inheritance. */
2281     GV *gv = gv_fetchmeth_pvn(stash, PL_AMG_names[0], 2, -1, 0);
2282     SV * const sv = gv ? GvSV(gv) : NULL;
2283     CV* cv;
2284
2285     if (!gv)
2286         lim = DESTROY_amg;              /* Skip overloading entries. */
2287 #ifdef PERL_DONT_CREATE_GVSV
2288     else if (!sv) {
2289         NOOP;   /* Equivalent to !SvTRUE and !SvOK  */
2290     }
2291 #endif
2292     else if (SvTRUE(sv))
2293         amt.fallback=AMGfallYES;
2294     else if (SvOK(sv))
2295         amt.fallback=AMGfallNEVER;
2296
2297     for (i = 1; i < lim; i++)
2298         amt.table[i] = NULL;
2299     for (; i < NofAMmeth; i++) {
2300         const char * const cooky = PL_AMG_names[i];
2301         /* Human-readable form, for debugging: */
2302         const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
2303         const STRLEN l = PL_AMG_namelens[i];
2304
2305         DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
2306                      cp, HvNAME_get(stash)) );
2307         /* don't fill the cache while looking up!
2308            Creation of inheritance stubs in intermediate packages may
2309            conflict with the logic of runtime method substitution.
2310            Indeed, for inheritance A -> B -> C, if C overloads "+0",
2311            then we could have created stubs for "(+0" in A and C too.
2312            But if B overloads "bool", we may want to use it for
2313            numifying instead of C's "+0". */
2314         if (i >= DESTROY_amg)
2315             gv = Perl_gv_fetchmeth_pvn_autoload(aTHX_ stash, cooky, l, 0, 0);
2316         else                            /* Autoload taken care of below */
2317             gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
2318         cv = 0;
2319         if (gv && (cv = GvCV(gv))) {
2320             if(GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")){
2321               const char * const hvname = HvNAME_get(GvSTASH(CvGV(cv)));
2322               if (hvname && HEK_LEN(HvNAME_HEK(GvSTASH(CvGV(cv)))) == 8
2323                && strEQ(hvname, "overload")) {
2324                 /* This is a hack to support autoloading..., while
2325                    knowing *which* methods were declared as overloaded. */
2326                 /* GvSV contains the name of the method. */
2327                 GV *ngv = NULL;
2328                 SV *gvsv = GvSV(gv);
2329
2330                 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
2331                         "\" for overloaded \"%s\" in package \"%.256s\"\n",
2332                              (void*)GvSV(gv), cp, HvNAME(stash)) );
2333                 if (!gvsv || !SvPOK(gvsv)
2334                     || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0)))
2335                 {
2336                     /* Can be an import stub (created by "can"). */
2337                     if (destructing) {
2338                         return -1;
2339                     }
2340                     else {
2341                         const SV * const name = (gvsv && SvPOK(gvsv))
2342                                                     ? gvsv
2343                                                     : newSVpvs_flags("???", SVs_TEMP);
2344                         Perl_croak(aTHX_ "%s method \"%"SVf256
2345                                     "\" overloading \"%s\" "\
2346                                     "in package \"%"HEKf256"\"",
2347                                    (GvCVGEN(gv) ? "Stub found while resolving"
2348                                     : "Can't resolve"),
2349                                    SVfARG(name), cp,
2350                                    HEKfARG(
2351                                         HvNAME_HEK(stash)
2352                                    ));
2353                     }
2354                 }
2355                 cv = GvCV(gv = ngv);
2356               }
2357             }
2358             DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
2359                          cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
2360                          GvNAME(CvGV(cv))) );
2361             filled = 1;
2362             if (i < DESTROY_amg)
2363                 have_ovl = 1;
2364         } else if (gv) {                /* Autoloaded... */
2365             cv = MUTABLE_CV(gv);
2366             filled = 1;
2367         }
2368         amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
2369     }
2370     if (filled) {
2371       AMT_AMAGIC_on(&amt);
2372       if (have_ovl)
2373           AMT_OVERLOADED_on(&amt);
2374       sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2375                                                 (char*)&amt, sizeof(AMT));
2376       return have_ovl;
2377     }
2378   }
2379   /* Here we have no table: */
2380   /* no_table: */
2381   AMT_AMAGIC_off(&amt);
2382   sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2383                                                 (char*)&amt, sizeof(AMTS));
2384   return 0;
2385 }
2386
2387
2388 CV*
2389 Perl_gv_handler(pTHX_ HV *stash, I32 id)
2390 {
2391     dVAR;
2392     MAGIC *mg;
2393     AMT *amtp;
2394     U32 newgen;
2395     struct mro_meta* stash_meta;
2396
2397     if (!stash || !HvNAME_get(stash))
2398         return NULL;
2399
2400     stash_meta = HvMROMETA(stash);
2401     newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2402
2403     mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2404     if (!mg) {
2405       do_update:
2406         /* If we're looking up a destructor to invoke, we must avoid
2407          * that Gv_AMupdate croaks, because we might be dying already */
2408         if (Gv_AMupdate(stash, cBOOL(id == DESTROY_amg)) == -1) {
2409             /* and if it didn't found a destructor, we fall back
2410              * to a simpler method that will only look for the
2411              * destructor instead of the whole magic */
2412             if (id == DESTROY_amg) {
2413                 GV * const gv = gv_fetchmethod(stash, "DESTROY");
2414                 if (gv)
2415                     return GvCV(gv);
2416             }
2417             return NULL;
2418         }
2419         mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2420     }
2421     assert(mg);
2422     amtp = (AMT*)mg->mg_ptr;
2423     if ( amtp->was_ok_am != PL_amagic_generation
2424          || amtp->was_ok_sub != newgen )
2425         goto do_update;
2426     if (AMT_AMAGIC(amtp)) {
2427         CV * const ret = amtp->table[id];
2428         if (ret && isGV(ret)) {         /* Autoloading stab */
2429             /* Passing it through may have resulted in a warning
2430                "Inherited AUTOLOAD for a non-method deprecated", since
2431                our caller is going through a function call, not a method call.
2432                So return the CV for AUTOLOAD, setting $AUTOLOAD. */
2433             GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
2434
2435             if (gv && GvCV(gv))
2436                 return GvCV(gv);
2437         }
2438         return ret;
2439     }
2440
2441     return NULL;
2442 }
2443
2444
2445 /* Implement tryAMAGICun_MG macro.
2446    Do get magic, then see if the stack arg is overloaded and if so call it.
2447    Flags:
2448         AMGf_set     return the arg using SETs rather than assigning to
2449                      the targ
2450         AMGf_numeric apply sv_2num to the stack arg.
2451 */
2452
2453 bool
2454 Perl_try_amagic_un(pTHX_ int method, int flags) {
2455     dVAR;
2456     dSP;
2457     SV* tmpsv;
2458     SV* const arg = TOPs;
2459
2460     SvGETMAGIC(arg);
2461
2462     if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
2463                                               AMGf_noright | AMGf_unary))) {
2464         if (flags & AMGf_set) {
2465             SETs(tmpsv);
2466         }
2467         else {
2468             dTARGET;
2469             if (SvPADMY(TARG)) {
2470                 sv_setsv(TARG, tmpsv);
2471                 SETTARG;
2472             }
2473             else
2474                 SETs(tmpsv);
2475         }
2476         PUTBACK;
2477         return TRUE;
2478     }
2479
2480     if ((flags & AMGf_numeric) && SvROK(arg))
2481         *sp = sv_2num(arg);
2482     return FALSE;
2483 }
2484
2485
2486 /* Implement tryAMAGICbin_MG macro.
2487    Do get magic, then see if the two stack args are overloaded and if so
2488    call it.
2489    Flags:
2490         AMGf_set     return the arg using SETs rather than assigning to
2491                      the targ
2492         AMGf_assign  op may be called as mutator (eg +=)
2493         AMGf_numeric apply sv_2num to the stack arg.
2494 */
2495
2496 bool
2497 Perl_try_amagic_bin(pTHX_ int method, int flags) {
2498     dVAR;
2499     dSP;
2500     SV* const left = TOPm1s;
2501     SV* const right = TOPs;
2502
2503     SvGETMAGIC(left);
2504     if (left != right)
2505         SvGETMAGIC(right);
2506
2507     if (SvAMAGIC(left) || SvAMAGIC(right)) {
2508         SV * const tmpsv = amagic_call(left, right, method,
2509                     ((flags & AMGf_assign) && opASSIGN ? AMGf_assign: 0));
2510         if (tmpsv) {
2511             if (flags & AMGf_set) {
2512                 (void)POPs;
2513                 SETs(tmpsv);
2514             }
2515             else {
2516                 dATARGET;
2517                 (void)POPs;
2518                 if (opASSIGN || SvPADMY(TARG)) {
2519                     sv_setsv(TARG, tmpsv);
2520                     SETTARG;
2521                 }
2522                 else
2523                     SETs(tmpsv);
2524             }
2525             PUTBACK;
2526             return TRUE;
2527         }
2528     }
2529     if(left==right && SvGMAGICAL(left)) {
2530         SV * const left = sv_newmortal();
2531         *(sp-1) = left;
2532         /* Print the uninitialized warning now, so it includes the vari-
2533            able name. */
2534         if (!SvOK(right)) {
2535             if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right);
2536             sv_setsv_flags(left, &PL_sv_no, 0);
2537         }
2538         else sv_setsv_flags(left, right, 0);
2539         SvGETMAGIC(right);
2540     }
2541     if (flags & AMGf_numeric) {
2542         if (SvROK(TOPm1s))
2543             *(sp-1) = sv_2num(TOPm1s);
2544         if (SvROK(right))
2545             *sp     = sv_2num(right);
2546     }
2547     return FALSE;
2548 }
2549
2550 SV *
2551 Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
2552     SV *tmpsv = NULL;
2553
2554     PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
2555
2556     while (SvAMAGIC(ref) && 
2557            (tmpsv = amagic_call(ref, &PL_sv_undef, method,
2558                                 AMGf_noright | AMGf_unary))) { 
2559         if (!SvROK(tmpsv))
2560             Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
2561         if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
2562             /* Bail out if it returns us the same reference.  */
2563             return tmpsv;
2564         }
2565         ref = tmpsv;
2566     }
2567     return tmpsv ? tmpsv : ref;
2568 }
2569
2570 SV*
2571 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
2572 {
2573   dVAR;
2574   MAGIC *mg;
2575   CV *cv=NULL;
2576   CV **cvp=NULL, **ocvp=NULL;
2577   AMT *amtp=NULL, *oamtp=NULL;
2578   int off = 0, off1, lr = 0, notfound = 0;
2579   int postpr = 0, force_cpy = 0;
2580   int assign = AMGf_assign & flags;
2581   const int assignshift = assign ? 1 : 0;
2582   int use_default_op = 0;
2583 #ifdef DEBUGGING
2584   int fl=0;
2585 #endif
2586   HV* stash=NULL;
2587
2588   PERL_ARGS_ASSERT_AMAGIC_CALL;
2589
2590   if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
2591       SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
2592
2593       if ( !lex_mask || !SvOK(lex_mask) )
2594           /* overloading lexically disabled */
2595           return NULL;
2596       else if ( lex_mask && SvPOK(lex_mask) ) {
2597           /* we have an entry in the hints hash, check if method has been
2598            * masked by overloading.pm */
2599           STRLEN len;
2600           const int offset = method / 8;
2601           const int bit    = method % 8;
2602           char *pv = SvPV(lex_mask, len);
2603
2604           /* Bit set, so this overloading operator is disabled */
2605           if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
2606               return NULL;
2607       }
2608   }
2609
2610   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
2611       && (stash = SvSTASH(SvRV(left)))
2612       && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2613       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2614                         ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
2615                         : NULL))
2616       && ((cv = cvp[off=method+assignshift])
2617           || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2618                                                           * usual method */
2619                   (
2620 #ifdef DEBUGGING
2621                    fl = 1,
2622 #endif
2623                    cv = cvp[off=method])))) {
2624     lr = -1;                    /* Call method for left argument */
2625   } else {
2626     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
2627       int logic;
2628
2629       /* look for substituted methods */
2630       /* In all the covered cases we should be called with assign==0. */
2631          switch (method) {
2632          case inc_amg:
2633            force_cpy = 1;
2634            if ((cv = cvp[off=add_ass_amg])
2635                || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
2636              right = &PL_sv_yes; lr = -1; assign = 1;
2637            }
2638            break;
2639          case dec_amg:
2640            force_cpy = 1;
2641            if ((cv = cvp[off = subtr_ass_amg])
2642                || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
2643              right = &PL_sv_yes; lr = -1; assign = 1;
2644            }
2645            break;
2646          case bool__amg:
2647            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
2648            break;
2649          case numer_amg:
2650            (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
2651            break;
2652          case string_amg:
2653            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
2654            break;
2655          case not_amg:
2656            (void)((cv = cvp[off=bool__amg])
2657                   || (cv = cvp[off=numer_amg])
2658                   || (cv = cvp[off=string_amg]));
2659            if (cv)
2660                postpr = 1;
2661            break;
2662          case copy_amg:
2663            {
2664              /*
2665                   * SV* ref causes confusion with the interpreter variable of
2666                   * the same name
2667                   */
2668              SV* const tmpRef=SvRV(left);
2669              if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
2670                 /*
2671                  * Just to be extra cautious.  Maybe in some
2672                  * additional cases sv_setsv is safe, too.
2673                  */
2674                 SV* const newref = newSVsv(tmpRef);
2675                 SvOBJECT_on(newref);
2676                 /* As a bit of a source compatibility hack, SvAMAGIC() and
2677                    friends dereference an RV, to behave the same was as when
2678                    overloading was stored on the reference, not the referant.
2679                    Hence we can't use SvAMAGIC_on()
2680                 */
2681                 SvFLAGS(newref) |= SVf_AMAGIC;
2682                 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
2683                 return newref;
2684              }
2685            }
2686            break;
2687          case abs_amg:
2688            if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
2689                && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
2690              SV* const nullsv=sv_2mortal(newSViv(0));
2691              if (off1==lt_amg) {
2692                SV* const lessp = amagic_call(left,nullsv,
2693                                        lt_amg,AMGf_noright);
2694                logic = SvTRUE(lessp);
2695              } else {
2696                SV* const lessp = amagic_call(left,nullsv,
2697                                        ncmp_amg,AMGf_noright);
2698                logic = (SvNV(lessp) < 0);
2699              }
2700              if (logic) {
2701                if (off==subtr_amg) {
2702                  right = left;
2703                  left = nullsv;
2704                  lr = 1;
2705                }
2706              } else {
2707                return left;
2708              }
2709            }
2710            break;
2711          case neg_amg:
2712            if ((cv = cvp[off=subtr_amg])) {
2713              right = left;
2714              left = sv_2mortal(newSViv(0));
2715              lr = 1;
2716            }
2717            break;
2718          case int_amg:
2719          case iter_amg:                 /* XXXX Eventually should do to_gv. */
2720          case ftest_amg:                /* XXXX Eventually should do to_gv. */
2721          case regexp_amg:
2722              /* FAIL safe */
2723              return NULL;       /* Delegate operation to standard mechanisms. */
2724              break;
2725          case to_sv_amg:
2726          case to_av_amg:
2727          case to_hv_amg:
2728          case to_gv_amg:
2729          case to_cv_amg:
2730              /* FAIL safe */
2731              return left;       /* Delegate operation to standard mechanisms. */
2732              break;
2733          default:
2734            goto not_found;
2735          }
2736          if (!cv) goto not_found;
2737     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
2738                && (stash = SvSTASH(SvRV(right)))
2739                && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2740                && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2741                           ? (amtp = (AMT*)mg->mg_ptr)->table
2742                           : NULL))
2743                && (cv = cvp[off=method])) { /* Method for right
2744                                              * argument found */
2745       lr=1;
2746     } else if (((cvp && amtp->fallback > AMGfallNEVER)
2747                 || (ocvp && oamtp->fallback > AMGfallNEVER))
2748                && !(flags & AMGf_unary)) {
2749                                 /* We look for substitution for
2750                                  * comparison operations and
2751                                  * concatenation */
2752       if (method==concat_amg || method==concat_ass_amg
2753           || method==repeat_amg || method==repeat_ass_amg) {
2754         return NULL;            /* Delegate operation to string conversion */
2755       }
2756       off = -1;
2757       switch (method) {
2758          case lt_amg:
2759          case le_amg:
2760          case gt_amg:
2761          case ge_amg:
2762          case eq_amg:
2763          case ne_amg:
2764              off = ncmp_amg;
2765              break;
2766          case slt_amg:
2767          case sle_amg:
2768          case sgt_amg:
2769          case sge_amg:
2770          case seq_amg:
2771          case sne_amg:
2772              off = scmp_amg;
2773              break;
2774          }
2775       if (off != -1) {
2776           if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
2777               cv = ocvp[off];
2778               lr = -1;
2779           }
2780           if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
2781               cv = cvp[off];
2782               lr = 1;
2783           }
2784       }
2785       if (cv)
2786           postpr = 1;
2787       else
2788           goto not_found;
2789     } else {
2790     not_found:                  /* No method found, either report or croak */
2791       switch (method) {
2792          case to_sv_amg:
2793          case to_av_amg:
2794          case to_hv_amg:
2795          case to_gv_amg:
2796          case to_cv_amg:
2797              /* FAIL safe */
2798              return left;       /* Delegate operation to standard mechanisms. */
2799              break;
2800       }
2801       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
2802         notfound = 1; lr = -1;
2803       } else if (cvp && (cv=cvp[nomethod_amg])) {
2804         notfound = 1; lr = 1;
2805       } else if ((use_default_op =
2806                   (!ocvp || oamtp->fallback >= AMGfallYES)
2807                   && (!cvp || amtp->fallback >= AMGfallYES))
2808                  && !DEBUG_o_TEST) {
2809         /* Skip generating the "no method found" message.  */
2810         return NULL;
2811       } else {
2812         SV *msg;
2813         if (off==-1) off=method;
2814         msg = sv_2mortal(Perl_newSVpvf(aTHX_
2815                       "Operation \"%s\": no method found,%sargument %s%"SVf"%s%"SVf,
2816                       AMG_id2name(method + assignshift),
2817                       (flags & AMGf_unary ? " " : "\n\tleft "),
2818                       SvAMAGIC(left)?
2819                         "in overloaded package ":
2820                         "has no overloaded magic",
2821                       SvAMAGIC(left)?
2822                         SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))):
2823                         SVfARG(&PL_sv_no),
2824                       SvAMAGIC(right)?
2825                         ",\n\tright argument in overloaded package ":
2826                         (flags & AMGf_unary
2827                          ? ""
2828                          : ",\n\tright argument has no overloaded magic"),
2829                       SvAMAGIC(right)?
2830                         SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))):
2831                         SVfARG(&PL_sv_no)));
2832         if (use_default_op) {
2833           DEBUG_o( Perl_deb(aTHX_ "%"SVf, SVfARG(msg)) );
2834         } else {
2835           Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
2836         }
2837         return NULL;
2838       }
2839       force_cpy = force_cpy || assign;
2840     }
2841   }
2842 #ifdef DEBUGGING
2843   if (!notfound) {
2844     DEBUG_o(Perl_deb(aTHX_
2845                      "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %"SVf"%s\n",
2846                      AMG_id2name(off),
2847                      method+assignshift==off? "" :
2848                      " (initially \"",
2849                      method+assignshift==off? "" :
2850                      AMG_id2name(method+assignshift),
2851                      method+assignshift==off? "" : "\")",
2852                      flags & AMGf_unary? "" :
2853                      lr==1 ? " for right argument": " for left argument",
2854                      flags & AMGf_unary? " for argument" : "",
2855                      stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)),
2856                      fl? ",\n\tassignment variant used": "") );
2857   }
2858 #endif
2859     /* Since we use shallow copy during assignment, we need
2860      * to dublicate the contents, probably calling user-supplied
2861      * version of copy operator
2862      */
2863     /* We need to copy in following cases:
2864      * a) Assignment form was called.
2865      *          assignshift==1,  assign==T, method + 1 == off
2866      * b) Increment or decrement, called directly.
2867      *          assignshift==0,  assign==0, method + 0 == off
2868      * c) Increment or decrement, translated to assignment add/subtr.
2869      *          assignshift==0,  assign==T,
2870      *          force_cpy == T
2871      * d) Increment or decrement, translated to nomethod.
2872      *          assignshift==0,  assign==0,
2873      *          force_cpy == T
2874      * e) Assignment form translated to nomethod.
2875      *          assignshift==1,  assign==T, method + 1 != off
2876      *          force_cpy == T
2877      */
2878     /*  off is method, method+assignshift, or a result of opcode substitution.
2879      *  In the latter case assignshift==0, so only notfound case is important.
2880      */
2881   if (( (method + assignshift == off)
2882         && (assign || (method == inc_amg) || (method == dec_amg)))
2883       || force_cpy)
2884   {
2885       /* newSVsv does not behave as advertised, so we copy missing
2886        * information by hand */
2887       SV *tmpRef = SvRV(left);
2888       SV *rv_copy;
2889       if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
2890           SvRV_set(left, rv_copy);
2891           SvSETMAGIC(left);
2892           SvREFCNT_dec(tmpRef);  
2893       }
2894   }
2895
2896   {
2897     dSP;
2898     BINOP myop;
2899     SV* res;
2900     const bool oldcatch = CATCH_GET;
2901
2902     CATCH_SET(TRUE);
2903     Zero(&myop, 1, BINOP);
2904     myop.op_last = (OP *) &myop;
2905     myop.op_next = NULL;
2906     myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
2907
2908     PUSHSTACKi(PERLSI_OVERLOAD);
2909     ENTER;
2910     SAVEOP();
2911     PL_op = (OP *) &myop;
2912     if (PERLDB_SUB && PL_curstash != PL_debstash)
2913         PL_op->op_private |= OPpENTERSUB_DB;
2914     PUTBACK;
2915     Perl_pp_pushmark(aTHX);
2916
2917     EXTEND(SP, notfound + 5);
2918     PUSHs(lr>0? right: left);
2919     PUSHs(lr>0? left: right);
2920     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
2921     if (notfound) {
2922       PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
2923                            AMG_id2namelen(method + assignshift), SVs_TEMP));
2924     }
2925     PUSHs(MUTABLE_SV(cv));
2926     PUTBACK;
2927
2928     if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
2929       CALLRUNOPS(aTHX);
2930     LEAVE;
2931     SPAGAIN;
2932
2933     res=POPs;
2934     PUTBACK;
2935     POPSTACK;
2936     CATCH_SET(oldcatch);
2937
2938     if (postpr) {
2939       int ans;
2940       switch (method) {
2941       case le_amg:
2942       case sle_amg:
2943         ans=SvIV(res)<=0; break;
2944       case lt_amg:
2945       case slt_amg:
2946         ans=SvIV(res)<0; break;
2947       case ge_amg:
2948       case sge_amg:
2949         ans=SvIV(res)>=0; break;
2950       case gt_amg:
2951       case sgt_amg:
2952         ans=SvIV(res)>0; break;
2953       case eq_amg:
2954       case seq_amg:
2955         ans=SvIV(res)==0; break;
2956       case ne_amg:
2957       case sne_amg:
2958         ans=SvIV(res)!=0; break;
2959       case inc_amg:
2960       case dec_amg:
2961         SvSetSV(left,res); return left;
2962       case not_amg:
2963         ans=!SvTRUE(res); break;
2964       default:
2965         ans=0; break;
2966       }
2967       return boolSV(ans);
2968     } else if (method==copy_amg) {
2969       if (!SvROK(res)) {
2970         Perl_croak(aTHX_ "Copy method did not return a reference");
2971       }
2972       return SvREFCNT_inc(SvRV(res));
2973     } else {
2974       return res;
2975     }
2976   }
2977 }
2978
2979 void
2980 Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
2981 {
2982     dVAR;
2983     U32 hash;
2984
2985     PERL_ARGS_ASSERT_GV_NAME_SET;
2986
2987     if (len > I32_MAX)
2988         Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
2989
2990     if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
2991         unshare_hek(GvNAME_HEK(gv));
2992     }
2993
2994     PERL_HASH(hash, name, len);
2995     GvNAME_HEK(gv) = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash);
2996 }
2997
2998 /*
2999 =for apidoc gv_try_downgrade
3000
3001 If the typeglob C<gv> can be expressed more succinctly, by having
3002 something other than a real GV in its place in the stash, replace it
3003 with the optimised form.  Basic requirements for this are that C<gv>
3004 is a real typeglob, is sufficiently ordinary, and is only referenced
3005 from its package.  This function is meant to be used when a GV has been
3006 looked up in part to see what was there, causing upgrading, but based
3007 on what was found it turns out that the real GV isn't required after all.
3008
3009 If C<gv> is a completely empty typeglob, it is deleted from the stash.
3010
3011 If C<gv> is a typeglob containing only a sufficiently-ordinary constant
3012 sub, the typeglob is replaced with a scalar-reference placeholder that
3013 more compactly represents the same thing.
3014
3015 =cut
3016 */
3017
3018 void
3019 Perl_gv_try_downgrade(pTHX_ GV *gv)
3020 {
3021     HV *stash;
3022     CV *cv;
3023     HEK *namehek;
3024     SV **gvp;
3025     PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
3026
3027     /* XXX Why and where does this leave dangling pointers during global
3028        destruction? */
3029     if (PL_phase == PERL_PHASE_DESTRUCT) return;
3030
3031     if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
3032             !SvOBJECT(gv) && !SvREADONLY(gv) &&
3033             isGV_with_GP(gv) && GvGP(gv) &&
3034             !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
3035             !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
3036             GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
3037         return;
3038     if (SvMAGICAL(gv)) {
3039         MAGIC *mg;
3040         /* only backref magic is allowed */
3041         if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
3042             return;
3043         for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
3044             if (mg->mg_type != PERL_MAGIC_backref)
3045                 return;
3046         }
3047     }
3048     cv = GvCV(gv);
3049     if (!cv) {
3050         HEK *gvnhek = GvNAME_HEK(gv);
3051         (void)hv_delete(stash, HEK_KEY(gvnhek),
3052             HEK_UTF8(gvnhek) ? -HEK_LEN(gvnhek) : HEK_LEN(gvnhek), G_DISCARD);
3053     } else if (GvMULTI(gv) && cv &&
3054             !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
3055             CvSTASH(cv) == stash && CvGV(cv) == gv &&
3056             CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
3057             !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
3058             (namehek = GvNAME_HEK(gv)) &&
3059             (gvp = hv_fetch(stash, HEK_KEY(namehek),
3060                         HEK_LEN(namehek)*(HEK_UTF8(namehek) ? -1 : 1), 0)) &&
3061             *gvp == (SV*)gv) {
3062         SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
3063         SvREFCNT(gv) = 0;
3064         sv_clear((SV*)gv);
3065         SvREFCNT(gv) = 1;
3066         SvFLAGS(gv) = SVt_IV|SVf_ROK;
3067         SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
3068                                 STRUCT_OFFSET(XPVIV, xiv_iv));
3069         SvRV_set(gv, value);
3070     }
3071 }
3072
3073 #include "XSUB.h"
3074
3075 static void
3076 core_xsub(pTHX_ CV* cv)
3077 {
3078     Perl_croak(aTHX_
3079        "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
3080     );
3081 }
3082
3083 /*
3084  * Local variables:
3085  * c-indentation-style: bsd
3086  * c-basic-offset: 4
3087  * indent-tabs-mode: t
3088  * End:
3089  *
3090  * ex: set ts=8 sts=4 sw=4 noet:
3091  */