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