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