This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
gv_fetchpvn_flags: Simplify some warnings code
[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_mro_meta->super)
685             HvAUX(stash)->xhv_mro_meta->super = newHV();
686         cachestash = HvAUX(stash)->xhv_mro_meta->super;
687     }
688     else cachestash = stash;
689
690     /* check locally for a real method or a cache entry */
691     gvp = (GV**)hv_fetch(cachestash, name, is_utf8 ? -(I32)len : (I32)len,
692                          create);
693     if(gvp) {
694         topgv = *gvp;
695       have_gv:
696         assert(topgv);
697         if (SvTYPE(topgv) != SVt_PVGV)
698             gv_init_pvn(topgv, stash, name, len, GV_ADDMULTI|is_utf8);
699         if ((cand_cv = GvCV(topgv))) {
700             /* If genuine method or valid cache entry, use it */
701             if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
702                 return topgv;
703             }
704             else {
705                 /* stale cache entry, junk it and move on */
706                 SvREFCNT_dec_NN(cand_cv);
707                 GvCV_set(topgv, NULL);
708                 cand_cv = NULL;
709                 GvCVGEN(topgv) = 0;
710             }
711         }
712         else if (GvCVGEN(topgv) == topgen_cmp) {
713             /* cache indicates no such method definitively */
714             return 0;
715         }
716         else if (stash == cachestash
717               && len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4
718               && strnEQ(hvname, "CORE", 4)
719               && S_maybe_add_coresub(aTHX_ NULL,topgv,name,len))
720             goto have_gv;
721     }
722
723     linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
724     linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
725     items = AvFILLp(linear_av); /* no +1, to skip over self */
726     while (items--) {
727         linear_sv = *linear_svp++;
728         assert(linear_sv);
729         cstash = gv_stashsv(linear_sv, 0);
730
731         if (!cstash) {
732             Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
733                            "Can't locate package %"SVf" for @%"HEKf"::ISA",
734                            SVfARG(linear_sv),
735                            HEKfARG(HvNAME_HEK(stash)));
736             continue;
737         }
738
739         assert(cstash);
740
741         gvp = (GV**)hv_fetch(cstash, name, is_utf8 ? -(I32)len : (I32)len, 0);
742         if (!gvp) {
743             if (len > 1 && HvNAMELEN_get(cstash) == 4) {
744                 const char *hvname = HvNAME(cstash); assert(hvname);
745                 if (strnEQ(hvname, "CORE", 4)
746                  && (candidate =
747                       S_maybe_add_coresub(aTHX_ cstash,NULL,name,len)
748                     ))
749                     goto have_candidate;
750             }
751             continue;
752         }
753         else candidate = *gvp;
754        have_candidate:
755         assert(candidate);
756         if (SvTYPE(candidate) != SVt_PVGV)
757             gv_init_pvn(candidate, cstash, name, len, GV_ADDMULTI|is_utf8);
758         if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
759             /*
760              * Found real method, cache method in topgv if:
761              *  1. topgv has no synonyms (else inheritance crosses wires)
762              *  2. method isn't a stub (else AUTOLOAD fails spectacularly)
763              */
764             if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
765                   CV *old_cv = GvCV(topgv);
766                   SvREFCNT_dec(old_cv);
767                   SvREFCNT_inc_simple_void_NN(cand_cv);
768                   GvCV_set(topgv, cand_cv);
769                   GvCVGEN(topgv) = topgen_cmp;
770             }
771             return candidate;
772         }
773     }
774
775     /* Check UNIVERSAL without caching */
776     if(level == 0 || level == -1) {
777         candidate = gv_fetchmeth_pvn(NULL, name, len, 1, flags &~GV_SUPER);
778         if(candidate) {
779             cand_cv = GvCV(candidate);
780             if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
781                   CV *old_cv = GvCV(topgv);
782                   SvREFCNT_dec(old_cv);
783                   SvREFCNT_inc_simple_void_NN(cand_cv);
784                   GvCV_set(topgv, cand_cv);
785                   GvCVGEN(topgv) = topgen_cmp;
786             }
787             return candidate;
788         }
789     }
790
791     if (topgv && GvREFCNT(topgv) == 1) {
792         /* cache the fact that the method is not defined */
793         GvCVGEN(topgv) = topgen_cmp;
794     }
795
796     return 0;
797 }
798
799 /*
800 =for apidoc gv_fetchmeth_autoload
801
802 This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
803 parameter.
804
805 =for apidoc gv_fetchmeth_sv_autoload
806
807 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
808 of an SV instead of a string/length pair.
809
810 =cut
811 */
812
813 GV *
814 Perl_gv_fetchmeth_sv_autoload(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
815 {
816    char *namepv;
817    STRLEN namelen;
818    PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD;
819    namepv = SvPV(namesv, namelen);
820    if (SvUTF8(namesv))
821        flags |= SVf_UTF8;
822    return gv_fetchmeth_pvn_autoload(stash, namepv, namelen, level, flags);
823 }
824
825 /*
826 =for apidoc gv_fetchmeth_pv_autoload
827
828 Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
829 instead of a string/length pair.
830
831 =cut
832 */
833
834 GV *
835 Perl_gv_fetchmeth_pv_autoload(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
836 {
837     PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD;
838     return gv_fetchmeth_pvn_autoload(stash, name, strlen(name), level, flags);
839 }
840
841 /*
842 =for apidoc gv_fetchmeth_pvn_autoload
843
844 Same as gv_fetchmeth_pvn(), but looks for autoloaded subroutines too.
845 Returns a glob for the subroutine.
846
847 For an autoloaded subroutine without a GV, will create a GV even
848 if C<level < 0>.  For an autoloaded subroutine without a stub, GvCV()
849 of the result may be zero.
850
851 Currently, the only significant value for C<flags> is SVf_UTF8.
852
853 =cut
854 */
855
856 GV *
857 Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
858 {
859     GV *gv = gv_fetchmeth_pvn(stash, name, len, level, flags);
860
861     PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD;
862
863     if (!gv) {
864         CV *cv;
865         GV **gvp;
866
867         if (!stash)
868             return NULL;        /* UNIVERSAL::AUTOLOAD could cause trouble */
869         if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
870             return NULL;
871         if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags)))
872             return NULL;
873         cv = GvCV(gv);
874         if (!(CvROOT(cv) || CvXSUB(cv)))
875             return NULL;
876         /* Have an autoload */
877         if (level < 0)  /* Cannot do without a stub */
878             gv_fetchmeth_pvn(stash, name, len, 0, flags);
879         gvp = (GV**)hv_fetch(stash, name,
880                         (flags & SVf_UTF8) ? -(I32)len : (I32)len, (level >= 0));
881         if (!gvp)
882             return NULL;
883         return *gvp;
884     }
885     return gv;
886 }
887
888 /*
889 =for apidoc gv_fetchmethod_autoload
890
891 Returns the glob which contains the subroutine to call to invoke the method
892 on the C<stash>.  In fact in the presence of autoloading this may be the
893 glob for "AUTOLOAD".  In this case the corresponding variable $AUTOLOAD is
894 already setup.
895
896 The third parameter of C<gv_fetchmethod_autoload> determines whether
897 AUTOLOAD lookup is performed if the given method is not present: non-zero
898 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
899 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
900 with a non-zero C<autoload> parameter.
901
902 These functions grant C<"SUPER"> token as a prefix of the method name. Note
903 that if you want to keep the returned glob for a long time, you need to
904 check for it being "AUTOLOAD", since at the later time the call may load a
905 different subroutine due to $AUTOLOAD changing its value. Use the glob
906 created via a side effect to do this.
907
908 These functions have the same side-effects and as C<gv_fetchmeth> with
909 C<level==0>.  C<name> should be writable if contains C<':'> or C<'
910 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
911 C<call_sv> apply equally to these functions.
912
913 =cut
914 */
915
916 GV *
917 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
918 {
919     PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
920
921     return gv_fetchmethod_flags(stash, name, autoload ? GV_AUTOLOAD : 0);
922 }
923
924 GV *
925 Perl_gv_fetchmethod_sv_flags(pTHX_ HV *stash, SV *namesv, U32 flags)
926 {
927     char *namepv;
928     STRLEN namelen;
929     PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS;
930     namepv = SvPV(namesv, namelen);
931     if (SvUTF8(namesv))
932        flags |= SVf_UTF8;
933     return gv_fetchmethod_pvn_flags(stash, namepv, namelen, flags);
934 }
935
936 GV *
937 Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
938 {
939     PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS;
940     return gv_fetchmethod_pvn_flags(stash, name, strlen(name), flags);
941 }
942
943 /* Don't merge this yet, as it's likely to get a len parameter, and possibly
944    even a U32 hash */
945 GV *
946 Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
947 {
948     dVAR;
949     const char *nend;
950     const char *nsplit = NULL;
951     GV* gv;
952     HV* ostash = stash;
953     const char * const origname = name;
954     SV *const error_report = MUTABLE_SV(stash);
955     const U32 autoload = flags & GV_AUTOLOAD;
956     const U32 do_croak = flags & GV_CROAK;
957     const U32 is_utf8  = flags & SVf_UTF8;
958
959     PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS;
960
961     if (SvTYPE(stash) < SVt_PVHV)
962         stash = NULL;
963     else {
964         /* The only way stash can become NULL later on is if nsplit is set,
965            which in turn means that there is no need for a SVt_PVHV case
966            the error reporting code.  */
967     }
968
969     for (nend = name; *nend || nend != (origname + len); nend++) {
970         if (*nend == '\'') {
971             nsplit = nend;
972             name = nend + 1;
973         }
974         else if (*nend == ':' && *(nend + 1) == ':') {
975             nsplit = nend++;
976             name = nend + 1;
977         }
978     }
979     if (nsplit) {
980         if ((nsplit - origname) == 5 && memEQ(origname, "SUPER", 5)) {
981             /* ->SUPER::method should really be looked up in original stash */
982             stash = CopSTASH(PL_curcop);
983             flags |= GV_SUPER;
984             DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
985                          origname, HvENAME_get(stash), name) );
986         }
987         else if ((nsplit - origname) >= 7 &&
988                  strnEQ(nsplit - 7, "::SUPER", 7)) {
989             /* don't autovifify if ->NoSuchStash::SUPER::method */
990             stash = gv_stashpvn(origname, nsplit - origname - 7, is_utf8);
991             if (stash) flags |= GV_SUPER;
992         }
993         else {
994             /* don't autovifify if ->NoSuchStash::method */
995             stash = gv_stashpvn(origname, nsplit - origname, is_utf8);
996         }
997         ostash = stash;
998     }
999
1000     gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
1001     if (!gv) {
1002         if (strEQ(name,"import") || strEQ(name,"unimport"))
1003             gv = MUTABLE_GV(&PL_sv_yes);
1004         else if (autoload)
1005             gv = gv_autoload_pvn(
1006                 ostash, name, nend - name, GV_AUTOLOAD_ISMETHOD|flags
1007             );
1008         if (!gv && do_croak) {
1009             /* Right now this is exclusively for the benefit of S_method_common
1010                in pp_hot.c  */
1011             if (stash) {
1012                 /* If we can't find an IO::File method, it might be a call on
1013                  * a filehandle. If IO:File has not been loaded, try to
1014                  * require it first instead of croaking */
1015                 const char *stash_name = HvNAME_get(stash);
1016                 if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File")
1017                     && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL,
1018                                        STR_WITH_LEN("IO/File.pm"), 0,
1019                                        HV_FETCH_ISEXISTS, NULL, 0)
1020                 ) {
1021                     require_pv("IO/File.pm");
1022                     gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
1023                     if (gv)
1024                         return gv;
1025                 }
1026                 Perl_croak(aTHX_
1027                            "Can't locate object method \"%"UTF8f
1028                            "\" via package \"%"HEKf"\"",
1029                                     UTF8fARG(is_utf8, nend - name, name),
1030                                     HEKfARG(HvNAME_HEK(stash)));
1031             }
1032             else {
1033                 SV* packnamesv;
1034
1035                 if (nsplit) {
1036                     packnamesv = newSVpvn_flags(origname, nsplit - origname,
1037                                                     SVs_TEMP | is_utf8);
1038                 } else {
1039                     packnamesv = error_report;
1040                 }
1041
1042                 Perl_croak(aTHX_
1043                            "Can't locate object method \"%"UTF8f
1044                            "\" via package \"%"SVf"\""
1045                            " (perhaps you forgot to load \"%"SVf"\"?)",
1046                            UTF8fARG(is_utf8, nend - name, name),
1047                            SVfARG(packnamesv), SVfARG(packnamesv));
1048             }
1049         }
1050     }
1051     else if (autoload) {
1052         CV* const cv = GvCV(gv);
1053         if (!CvROOT(cv) && !CvXSUB(cv)) {
1054             GV* stubgv;
1055             GV* autogv;
1056
1057             if (CvANON(cv))
1058                 stubgv = gv;
1059             else {
1060                 stubgv = CvGV(cv);
1061                 if (GvCV(stubgv) != cv)         /* orphaned import */
1062                     stubgv = gv;
1063             }
1064             autogv = gv_autoload_pvn(GvSTASH(stubgv),
1065                                   GvNAME(stubgv), GvNAMELEN(stubgv),
1066                                   GV_AUTOLOAD_ISMETHOD
1067                                    | (GvNAMEUTF8(stubgv) ? SVf_UTF8 : 0));
1068             if (autogv)
1069                 gv = autogv;
1070         }
1071     }
1072
1073     return gv;
1074 }
1075
1076 GV*
1077 Perl_gv_autoload_sv(pTHX_ HV *stash, SV* namesv, U32 flags)
1078 {
1079    char *namepv;
1080    STRLEN namelen;
1081    PERL_ARGS_ASSERT_GV_AUTOLOAD_SV;
1082    namepv = SvPV(namesv, namelen);
1083    if (SvUTF8(namesv))
1084        flags |= SVf_UTF8;
1085    return gv_autoload_pvn(stash, namepv, namelen, flags);
1086 }
1087
1088 GV*
1089 Perl_gv_autoload_pv(pTHX_ HV *stash, const char *namepv, U32 flags)
1090 {
1091    PERL_ARGS_ASSERT_GV_AUTOLOAD_PV;
1092    return gv_autoload_pvn(stash, namepv, strlen(namepv), flags);
1093 }
1094
1095 GV*
1096 Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
1097 {
1098     dVAR;
1099     GV* gv;
1100     CV* cv;
1101     HV* varstash;
1102     GV* vargv;
1103     SV* varsv;
1104     SV *packname = NULL;
1105     U32 is_utf8 = flags & SVf_UTF8 ? SVf_UTF8 : 0;
1106
1107     PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN;
1108
1109     if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
1110         return NULL;
1111     if (stash) {
1112         if (SvTYPE(stash) < SVt_PVHV) {
1113             STRLEN packname_len = 0;
1114             const char * const packname_ptr = SvPV_const(MUTABLE_SV(stash), packname_len);
1115             packname = newSVpvn_flags(packname_ptr, packname_len,
1116                                       SVs_TEMP | SvUTF8(stash));
1117             stash = NULL;
1118         }
1119         else
1120             packname = sv_2mortal(newSVhek(HvNAME_HEK(stash)));
1121         if (flags & GV_SUPER) sv_catpvs(packname, "::SUPER");
1122     }
1123     if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, is_utf8)))
1124         return NULL;
1125     cv = GvCV(gv);
1126
1127     if (!(CvROOT(cv) || CvXSUB(cv)))
1128         return NULL;
1129
1130     /*
1131      * Inheriting AUTOLOAD for non-methods works ... for now.
1132      */
1133     if (
1134         !(flags & GV_AUTOLOAD_ISMETHOD)
1135      && (GvCVGEN(gv) || GvSTASH(gv) != stash)
1136     )
1137         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
1138                          "Use of inherited AUTOLOAD for non-method %"SVf
1139                          "::%"UTF8f"() is deprecated",
1140                          SVfARG(packname),
1141                          UTF8fARG(is_utf8, len, name));
1142
1143     if (CvISXSUB(cv)) {
1144         /* Instead of forcing the XSUB do another lookup for $AUTOLOAD
1145          * and split that value on the last '::', pass along the same data
1146          * via the SvPVX field in the CV, and the stash in CvSTASH.
1147          *
1148          * Due to an unfortunate accident of history, the SvPVX field
1149          * serves two purposes.  It is also used for the subroutine's pro-
1150          * type.  Since SvPVX has been documented as returning the sub name
1151          * for a long time, but not as returning the prototype, we have
1152          * to preserve the SvPVX AUTOLOAD behaviour and put the prototype
1153          * elsewhere.
1154          *
1155          * We put the prototype in the same allocated buffer, but after
1156          * the sub name.  The SvPOK flag indicates the presence of a proto-
1157          * type.  The CvAUTOLOAD flag indicates the presence of a sub name.
1158          * If both flags are on, then SvLEN is used to indicate the end of
1159          * the prototype (artificially lower than what is actually allo-
1160          * cated), at the risk of having to reallocate a few bytes unneces-
1161          * sarily--but that should happen very rarely, if ever.
1162          *
1163          * We use SvUTF8 for both prototypes and sub names, so if one is
1164          * UTF8, the other must be upgraded.
1165          */
1166         CvSTASH_set(cv, stash);
1167         if (SvPOK(cv)) { /* Ouch! */
1168             SV * const tmpsv = newSVpvn_flags(name, len, is_utf8);
1169             STRLEN ulen;
1170             const char *proto = CvPROTO(cv);
1171             assert(proto);
1172             if (SvUTF8(cv))
1173                 sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2);
1174             ulen = SvCUR(tmpsv);
1175             SvCUR(tmpsv)++; /* include null in string */
1176             sv_catpvn_flags(
1177                 tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv)
1178             );
1179             SvTEMP_on(tmpsv); /* Allow theft */
1180             sv_setsv_nomg((SV *)cv, tmpsv);
1181             SvTEMP_off(tmpsv);
1182             SvREFCNT_dec_NN(tmpsv);
1183             SvLEN(cv) = SvCUR(cv) + 1;
1184             SvCUR(cv) = ulen;
1185         }
1186         else {
1187           sv_setpvn((SV *)cv, name, len);
1188           SvPOK_off(cv);
1189           if (is_utf8)
1190             SvUTF8_on(cv);
1191           else SvUTF8_off(cv);
1192         }
1193         CvAUTOLOAD_on(cv);
1194     }
1195
1196     /*
1197      * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
1198      * The subroutine's original name may not be "AUTOLOAD", so we don't
1199      * use that, but for lack of anything better we will use the sub's
1200      * original package to look up $AUTOLOAD.
1201      */
1202     varstash = GvSTASH(CvGV(cv));
1203     vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
1204     ENTER;
1205
1206     if (!isGV(vargv)) {
1207         gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0);
1208 #ifdef PERL_DONT_CREATE_GVSV
1209         GvSV(vargv) = newSV(0);
1210 #endif
1211     }
1212     LEAVE;
1213     varsv = GvSVn(vargv);
1214     SvTAINTED_off(varsv); /* previous $AUTOLOAD taint is obsolete */
1215     /* XXX: this process is not careful to avoid extra magic gets and sets; tied $AUTOLOAD will get noise */
1216     sv_setsv(varsv, packname);
1217     sv_catpvs(varsv, "::");
1218     /* Ensure SvSETMAGIC() is called if necessary. In particular, to clear
1219        tainting if $FOO::AUTOLOAD was previously tainted, but is not now.  */
1220     sv_catpvn_flags(
1221         varsv, name, len,
1222         SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES)
1223     );
1224     if (is_utf8)
1225         SvUTF8_on(varsv);
1226     return gv;
1227 }
1228
1229
1230 /* require_tie_mod() internal routine for requiring a module
1231  * that implements the logic of automatic ties like %! and %-
1232  *
1233  * The "gv" parameter should be the glob.
1234  * "varpv" holds the name of the var, used for error messages.
1235  * "namesv" holds the module name. Its refcount will be decremented.
1236  * "methpv" holds the method name to test for to check that things
1237  *   are working reasonably close to as expected.
1238  * "flags": if flag & 1 then save the scalar before loading.
1239  * For the protection of $! to work (it is set by this routine)
1240  * the sv slot must already be magicalized.
1241  */
1242 STATIC HV*
1243 S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv,const U32 flags)
1244 {
1245     dVAR;
1246     HV* stash = gv_stashsv(namesv, 0);
1247
1248     PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
1249
1250     if (!stash || !(gv_fetchmethod_autoload(stash, methpv, FALSE))) {
1251         SV *module = newSVsv(namesv);
1252         char varname = *varpv; /* varpv might be clobbered by load_module,
1253                                   so save it. For the moment it's always
1254                                   a single char. */
1255         const char type = varname == '[' ? '$' : '%';
1256         dSP;
1257         ENTER;
1258         SAVEFREESV(namesv);
1259         if ( flags & 1 )
1260             save_scalar(gv);
1261         PUSHSTACKi(PERLSI_MAGIC);
1262         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
1263         POPSTACK;
1264         stash = gv_stashsv(namesv, 0);
1265         if (!stash)
1266             Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" is not available",
1267                     type, varname, SVfARG(namesv));
1268         else if (!gv_fetchmethod(stash, methpv))
1269             Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" does not support method %s",
1270                     type, varname, SVfARG(namesv), methpv);
1271         LEAVE;
1272     }
1273     else SvREFCNT_dec_NN(namesv);
1274     return stash;
1275 }
1276
1277 /*
1278 =for apidoc gv_stashpv
1279
1280 Returns a pointer to the stash for a specified package.  Uses C<strlen> to
1281 determine the length of C<name>, then calls C<gv_stashpvn()>.
1282
1283 =cut
1284 */
1285
1286 HV*
1287 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
1288 {
1289     PERL_ARGS_ASSERT_GV_STASHPV;
1290     return gv_stashpvn(name, strlen(name), create);
1291 }
1292
1293 /*
1294 =for apidoc gv_stashpvn
1295
1296 Returns a pointer to the stash for a specified package.  The C<namelen>
1297 parameter indicates the length of the C<name>, in bytes.  C<flags> is passed
1298 to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
1299 created if it does not already exist.  If the package does not exist and
1300 C<flags> is 0 (or any other setting that does not create packages) then NULL
1301 is returned.
1302
1303 Flags may be one of:
1304
1305     GV_ADD
1306     SVf_UTF8
1307     GV_NOADD_NOINIT
1308     GV_NOINIT
1309     GV_NOEXPAND
1310     GV_ADDMG
1311
1312 The most important of which are probably GV_ADD and SVf_UTF8.
1313
1314 =cut
1315 */
1316
1317 HV*
1318 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
1319 {
1320     char smallbuf[128];
1321     char *tmpbuf;
1322     HV *stash;
1323     GV *tmpgv;
1324     U32 tmplen = namelen + 2;
1325
1326     PERL_ARGS_ASSERT_GV_STASHPVN;
1327
1328     if (tmplen <= sizeof smallbuf)
1329         tmpbuf = smallbuf;
1330     else
1331         Newx(tmpbuf, tmplen, char);
1332     Copy(name, tmpbuf, namelen, char);
1333     tmpbuf[namelen]   = ':';
1334     tmpbuf[namelen+1] = ':';
1335     tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
1336     if (tmpbuf != smallbuf)
1337         Safefree(tmpbuf);
1338     if (!tmpgv)
1339         return NULL;
1340     stash = GvHV(tmpgv);
1341     if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL;
1342     assert(stash);
1343     if (!HvNAME_get(stash)) {
1344         hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 );
1345         
1346         /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */
1347         /* If the containing stash has multiple effective
1348            names, see that this one gets them, too. */
1349         if (HvAUX(GvSTASH(tmpgv))->xhv_name_count)
1350             mro_package_moved(stash, NULL, tmpgv, 1);
1351     }
1352     return stash;
1353 }
1354
1355 /*
1356 =for apidoc gv_stashsv
1357
1358 Returns a pointer to the stash for a specified package.  See C<gv_stashpvn>.
1359
1360 =cut
1361 */
1362
1363 HV*
1364 Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
1365 {
1366     STRLEN len;
1367     const char * const ptr = SvPV_const(sv,len);
1368
1369     PERL_ARGS_ASSERT_GV_STASHSV;
1370
1371     return gv_stashpvn(ptr, len, flags | SvUTF8(sv));
1372 }
1373
1374
1375 GV *
1376 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
1377     PERL_ARGS_ASSERT_GV_FETCHPV;
1378     return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
1379 }
1380
1381 GV *
1382 Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
1383     STRLEN len;
1384     const char * const nambeg =
1385        SvPV_flags_const(name, len, flags & GV_NO_SVGMAGIC ? 0 : SV_GMAGIC);
1386     PERL_ARGS_ASSERT_GV_FETCHSV;
1387     return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
1388 }
1389
1390 PERL_STATIC_INLINE void
1391 S_gv_magicalize_isa(pTHX_ GV *gv)
1392 {
1393     AV* av;
1394
1395     PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
1396
1397     av = GvAVn(gv);
1398     GvMULTI_on(gv);
1399     sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1400              NULL, 0);
1401 }
1402
1403 /* This function grabs name and tries to split a stash and glob
1404  * from its contents. TODO better description, comments
1405  * 
1406  * If the function returns TRUE and 'name == name_end', then
1407  * 'gv' can be directly returned to the caller of gv_fetchpvn_flags
1408  */
1409 PERL_STATIC_INLINE bool
1410 S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name,
1411                STRLEN *len, const char *nambeg, STRLEN full_len,
1412                const U32 is_utf8, const I32 add)
1413 {
1414     const char *name_cursor;
1415     const char *const name_end = nambeg + full_len;
1416     const char *const name_em1 = name_end - 1;
1417
1418     PERL_ARGS_ASSERT_PARSE_GV_STASH_NAME;
1419     
1420     if (full_len > 2 && **name == '*' && isIDFIRST_lazy_if(*name + 1, is_utf8)) {
1421         /* accidental stringify on a GV? */
1422         (*name)++;
1423     }
1424
1425     for (name_cursor = *name; name_cursor < name_end; name_cursor++) {
1426         if (name_cursor < name_em1 &&
1427             ((*name_cursor == ':' && name_cursor[1] == ':')
1428            || *name_cursor == '\''))
1429         {
1430             if (!*stash)
1431                 *stash = PL_defstash;
1432             if (!*stash || !SvREFCNT(*stash)) /* symbol table under destruction */
1433                 return FALSE;
1434
1435             *len = name_cursor - *name;
1436             if (name_cursor > nambeg) { /* Skip for initial :: or ' */
1437                 const char *key;
1438                 GV**gvp;
1439                 if (*name_cursor == ':') {
1440                     key = *name;
1441                     *len += 2;
1442                 }
1443                 else {
1444                     char *tmpbuf;
1445                     Newx(tmpbuf, *len+2, char);
1446                     Copy(*name, tmpbuf, *len, char);
1447                     tmpbuf[(*len)++] = ':';
1448                     tmpbuf[(*len)++] = ':';
1449                     key = tmpbuf;
1450                 }
1451                 gvp = (GV**)hv_fetch(*stash, key, is_utf8 ? -(*len) : *len, add);
1452                 *gv = gvp ? *gvp : NULL;
1453                 if (*gv && *gv != (const GV *)&PL_sv_undef) {
1454                     if (SvTYPE(*gv) != SVt_PVGV)
1455                         gv_init_pvn(*gv, *stash, key, *len, (add & GV_ADDMULTI)|is_utf8);
1456                     else
1457                         GvMULTI_on(*gv);
1458                 }
1459                 if (key != *name)
1460                     Safefree(key);
1461                 if (!*gv || *gv == (const GV *)&PL_sv_undef)
1462                     return FALSE;
1463
1464                 if (!(*stash = GvHV(*gv))) {
1465                     *stash = GvHV(*gv) = newHV();
1466                     if (!HvNAME_get(*stash)) {
1467                         if (GvSTASH(*gv) == PL_defstash && *len == 6
1468                             && strnEQ(*name, "CORE", 4))
1469                             hv_name_set(*stash, "CORE", 4, 0);
1470                         else
1471                             hv_name_set(
1472                                 *stash, nambeg, name_cursor-nambeg, is_utf8
1473                             );
1474                     /* If the containing stash has multiple effective
1475                     names, see that this one gets them, too. */
1476                     if (HvAUX(GvSTASH(*gv))->xhv_name_count)
1477                         mro_package_moved(*stash, NULL, *gv, 1);
1478                     }
1479                 }
1480                 else if (!HvNAME_get(*stash))
1481                     hv_name_set(*stash, nambeg, name_cursor - nambeg, is_utf8);
1482             }
1483
1484             if (*name_cursor == ':')
1485                 name_cursor++;
1486             *name = name_cursor+1;
1487             if (*name == name_end) {
1488                 if (!*gv)
1489                     *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
1490                 return TRUE;
1491             }
1492         }
1493     }
1494     *len = name_cursor - *name;
1495     return TRUE;
1496 }
1497
1498 /* This function is called if parse_gv_stash_name() failed to
1499  * find a stash, or if GV_NOTQUAL or an empty name was passed
1500  * to gv_fetchpvn_flags.
1501  * 
1502  * It returns FALSE if the default stash can't be found nor created,
1503  * which might happen during global destruction.
1504  */
1505 PERL_STATIC_INLINE bool
1506 S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len,
1507                const U32 is_utf8, const I32 add,
1508                const svtype sv_type)
1509 {
1510     PERL_ARGS_ASSERT_FIND_DEFAULT_STASH;
1511     
1512     /* No stash in name, so see how we can default */
1513
1514     /* If it's an alphanumeric variable */
1515     if (len && isIDFIRST_lazy_if(name, is_utf8)) {
1516         bool global = FALSE;
1517
1518         /* Some "normal" variables are always in main::,
1519          * like INC or STDOUT.
1520          */
1521         switch (len) {
1522             case 1:
1523             if (*name == '_')
1524                 global = TRUE;
1525             break;
1526             case 3:
1527             if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1528                 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1529                 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
1530                 global = TRUE;
1531             break;
1532             case 4:
1533             if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1534                 && name[3] == 'V')
1535                 global = TRUE;
1536             break;
1537             case 5:
1538             if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1539                 && name[3] == 'I' && name[4] == 'N')
1540                 global = TRUE;
1541             break;
1542             case 6:
1543             if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1544                 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1545                     ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
1546                 global = TRUE;
1547             break;
1548             case 7:
1549             if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1550                 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1551                 && name[6] == 'T')
1552                 global = TRUE;
1553             break;
1554         }
1555
1556         if (global)
1557             *stash = PL_defstash;
1558         else if (IN_PERL_COMPILETIME) {
1559             *stash = PL_curstash;
1560             if (add && (PL_hints & HINT_STRICT_VARS) &&
1561                 sv_type != SVt_PVCV &&
1562                 sv_type != SVt_PVGV &&
1563                 sv_type != SVt_PVFM &&
1564                 sv_type != SVt_PVIO &&
1565                 !(len == 1 && sv_type == SVt_PV &&
1566                 (*name == 'a' || *name == 'b')) )
1567             {
1568                 GV**gvp = (GV**)hv_fetch(*stash,name,is_utf8 ? -len : len,0);
1569                 if (!gvp || *gvp == (const GV *)&PL_sv_undef ||
1570                     SvTYPE(*gvp) != SVt_PVGV)
1571                 {
1572                     *stash = NULL;
1573                 }
1574                 else if ((sv_type == SVt_PV   && !GvIMPORTED_SV(*gvp)) ||
1575                          (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1576                          (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
1577                 {
1578                     /* diag_listed_as: Variable "%s" is not imported%s */
1579                     Perl_ck_warner_d(
1580                         aTHX_ packWARN(WARN_MISC),
1581                         "Variable \"%c%"UTF8f"\" is not imported",
1582                         sv_type == SVt_PVAV ? '@' :
1583                         sv_type == SVt_PVHV ? '%' : '$',
1584                         UTF8fARG(is_utf8, len, name));
1585                     if (GvCVu(*gvp))
1586                         Perl_ck_warner_d(
1587                             aTHX_ packWARN(WARN_MISC),
1588                             "\t(Did you mean &%"UTF8f" instead?)\n",
1589                             UTF8fARG(is_utf8, len, name)
1590                         );
1591                     *stash = NULL;
1592                 }
1593             }
1594         }
1595         else {
1596             /* Use the current op's stash */
1597             *stash = CopSTASH(PL_curcop);
1598         }
1599     }
1600     /* *{""}, or a special variable like $@ */
1601     else
1602         *stash = PL_defstash;
1603
1604     if (!*stash) {
1605         if (add && !PL_in_clean_all) {
1606             SV * const err = Perl_mess(aTHX_
1607                  "Global symbol \"%s%"UTF8f
1608                  "\" requires explicit package name",
1609                  (sv_type == SVt_PV ? "$"
1610                   : sv_type == SVt_PVAV ? "@"
1611                   : sv_type == SVt_PVHV ? "%"
1612                   : ""), UTF8fARG(is_utf8, len, name));
1613             GV *gv;
1614             if (is_utf8)
1615                 SvUTF8_on(err);
1616             qerror(err);
1617             gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
1618             if (!gv) {
1619                 /* symbol table under destruction */
1620                 return FALSE;
1621             }
1622             *stash = GvHV(gv);
1623         }
1624         else
1625             return FALSE;
1626     }
1627
1628     if (!SvREFCNT(*stash))   /* symbol table under destruction */
1629         return FALSE;
1630
1631     return TRUE;
1632 }
1633
1634 /* magicalize_gv() gets called by gv_fetchpvn_flags when creating a new GV */
1635 PERL_STATIC_INLINE GV*
1636 S_magicalize_gv(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
1637                bool addmg, const svtype sv_type)
1638 {
1639     SSize_t paren;
1640
1641     PERL_ARGS_ASSERT_MAGICALIZE_GV;
1642     
1643     if (stash != PL_defstash) { /* not the main stash */
1644         /* We only have to check for three names here: EXPORT, ISA
1645            and VERSION. All the others apply only to the main stash or to
1646            CORE (which is checked right after this). */
1647         if (len > 2) {
1648             const char * const name2 = name + 1;
1649             switch (*name) {
1650             case 'E':
1651                 if (strnEQ(name2, "XPORT", 5))
1652                     GvMULTI_on(gv);
1653                 break;
1654             case 'I':
1655                 if (strEQ(name2, "SA"))
1656                     gv_magicalize_isa(gv);
1657                 break;
1658             case 'V':
1659                 if (strEQ(name2, "ERSION"))
1660                     GvMULTI_on(gv);
1661                 break;
1662             default:
1663                 goto try_core;
1664             }
1665             goto add_magical_gv;
1666         }
1667       try_core:
1668         if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
1669           /* Avoid null warning: */
1670           const char * const stashname = HvNAME(stash); assert(stashname);
1671           if (strnEQ(stashname, "CORE", 4))
1672             S_maybe_add_coresub(aTHX_ 0, gv, name, len);
1673         }
1674     }
1675     else if (len > 1) {
1676 #ifndef EBCDIC
1677         if (*name > 'V' ) {
1678             NOOP;
1679             /* Nothing else to do.
1680                The compiler will probably turn the switch statement into a
1681                branch table. Make sure we avoid even that small overhead for
1682                the common case of lower case variable names.  (On EBCDIC
1683                platforms, we can't just do:
1684                  if (NATIVE_TO_ASCII(*name) > NATIVE_TO_ASCII('V') ) {
1685                because cases like '\027' in the switch statement below are
1686                C1 (non-ASCII) controls on those platforms, so the remapping
1687                would make them larger than 'V')
1688              */
1689         } else
1690 #endif
1691         {
1692             const char * const name2 = name + 1;
1693             switch (*name) {
1694             case 'A':
1695                 if (strEQ(name2, "RGV")) {
1696                     IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1697                 }
1698                 else if (strEQ(name2, "RGVOUT")) {
1699                     GvMULTI_on(gv);
1700                 }
1701                 break;
1702             case 'E':
1703                 if (strnEQ(name2, "XPORT", 5))
1704                     GvMULTI_on(gv);
1705                 break;
1706             case 'I':
1707                 if (strEQ(name2, "SA")) {
1708                     gv_magicalize_isa(gv);
1709                 }
1710                 break;
1711             case 'S':
1712                 if (strEQ(name2, "IG")) {
1713                     HV *hv;
1714                     I32 i;
1715                     if (!PL_psig_name) {
1716                         Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
1717                         Newxz(PL_psig_pend, SIG_SIZE, int);
1718                         PL_psig_ptr = PL_psig_name + SIG_SIZE;
1719                     } else {
1720                         /* I think that the only way to get here is to re-use an
1721                            embedded perl interpreter, where the previous
1722                            use didn't clean up fully because
1723                            PL_perl_destruct_level was 0. I'm not sure that we
1724                            "support" that, in that I suspect in that scenario
1725                            there are sufficient other garbage values left in the
1726                            interpreter structure that something else will crash
1727                            before we get here. I suspect that this is one of
1728                            those "doctor, it hurts when I do this" bugs.  */
1729                         Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
1730                         Zero(PL_psig_pend, SIG_SIZE, int);
1731                     }
1732                     GvMULTI_on(gv);
1733                     hv = GvHVn(gv);
1734                     hv_magic(hv, NULL, PERL_MAGIC_sig);
1735                     for (i = 1; i < SIG_SIZE; i++) {
1736                         SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1737                         if (init)
1738                             sv_setsv(*init, &PL_sv_undef);
1739                     }
1740                 }
1741                 break;
1742             case 'V':
1743                 if (strEQ(name2, "ERSION"))
1744                     GvMULTI_on(gv);
1745                 break;
1746             case '\003':        /* $^CHILD_ERROR_NATIVE */
1747                 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1748                     goto magicalize;
1749                 break;
1750             case '\005':        /* $^ENCODING */
1751                 if (strEQ(name2, "NCODING"))
1752                     goto magicalize;
1753                 break;
1754             case '\007':        /* $^GLOBAL_PHASE */
1755                 if (strEQ(name2, "LOBAL_PHASE"))
1756                     goto ro_magicalize;
1757                 break;
1758             case '\014':        /* $^LAST_FH */
1759                 if (strEQ(name2, "AST_FH"))
1760                     goto ro_magicalize;
1761                 break;
1762             case '\015':        /* $^MATCH */
1763                 if (strEQ(name2, "ATCH")) {
1764                     paren = RX_BUFF_IDX_CARET_FULLMATCH;
1765                     goto storeparen;
1766                 }
1767                 break;
1768             case '\017':        /* $^OPEN */
1769                 if (strEQ(name2, "PEN"))
1770                     goto magicalize;
1771                 break;
1772             case '\020':        /* $^PREMATCH  $^POSTMATCH */
1773                 if (strEQ(name2, "REMATCH")) {
1774                     paren = RX_BUFF_IDX_CARET_PREMATCH;
1775                     goto storeparen;
1776                 }
1777                 if (strEQ(name2, "OSTMATCH")) {
1778                     paren = RX_BUFF_IDX_CARET_POSTMATCH;
1779                     goto storeparen;
1780                 }
1781                 break;
1782             case '\024':        /* ${^TAINT} */
1783                 if (strEQ(name2, "AINT"))
1784                     goto ro_magicalize;
1785                 break;
1786             case '\025':        /* ${^UNICODE}, ${^UTF8LOCALE} */
1787                 if (strEQ(name2, "NICODE"))
1788                     goto ro_magicalize;
1789                 if (strEQ(name2, "TF8LOCALE"))
1790                     goto ro_magicalize;
1791                 if (strEQ(name2, "TF8CACHE"))
1792                     goto magicalize;
1793                 break;
1794             case '\027':        /* $^WARNING_BITS */
1795                 if (strEQ(name2, "ARNING_BITS"))
1796                     goto magicalize;
1797                 break;
1798             case '1':
1799             case '2':
1800             case '3':
1801             case '4':
1802             case '5':
1803             case '6':
1804             case '7':
1805             case '8':
1806             case '9':
1807             {
1808                 /* Ensures that we have an all-digit variable, ${"1foo"} fails
1809                    this test  */
1810                 /* This snippet is taken from is_gv_magical */
1811                 const char *end = name + len;
1812                 while (--end > name) {
1813                     if (!isDIGIT(*end)) goto add_magical_gv;
1814                 }
1815                 paren = strtoul(name, NULL, 10);
1816                 goto storeparen;
1817             }
1818             }
1819         }
1820     } else {
1821         /* Names of length 1.  (Or 0. But name is NUL terminated, so that will
1822            be case '\0' in this switch statement (ie a default case)  */
1823         switch (*name) {
1824         case '&':               /* $& */
1825             paren = RX_BUFF_IDX_FULLMATCH;
1826             goto sawampersand;
1827         case '`':               /* $` */
1828             paren = RX_BUFF_IDX_PREMATCH;
1829             goto sawampersand;
1830         case '\'':              /* $' */
1831             paren = RX_BUFF_IDX_POSTMATCH;
1832         sawampersand:
1833 #ifdef PERL_SAWAMPERSAND
1834             if (!(
1835                 sv_type == SVt_PVAV ||
1836                 sv_type == SVt_PVHV ||
1837                 sv_type == SVt_PVCV ||
1838                 sv_type == SVt_PVFM ||
1839                 sv_type == SVt_PVIO
1840                 )) { PL_sawampersand |=
1841                         (*name == '`')
1842                             ? SAWAMPERSAND_LEFT
1843                             : (*name == '&')
1844                                 ? SAWAMPERSAND_MIDDLE
1845                                 : SAWAMPERSAND_RIGHT;
1846                 }
1847 #endif
1848             goto storeparen;
1849         case '1':               /* $1 */
1850         case '2':               /* $2 */
1851         case '3':               /* $3 */
1852         case '4':               /* $4 */
1853         case '5':               /* $5 */
1854         case '6':               /* $6 */
1855         case '7':               /* $7 */
1856         case '8':               /* $8 */
1857         case '9':               /* $9 */
1858             paren = *name - '0';
1859
1860         storeparen:
1861             /* Flag the capture variables with a NULL mg_ptr
1862                Use mg_len for the array index to lookup.  */
1863             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, NULL, paren);
1864             break;
1865
1866         case ':':               /* $: */
1867             sv_setpv(GvSVn(gv),PL_chopset);
1868             goto magicalize;
1869
1870         case '?':               /* $? */
1871 #ifdef COMPLEX_STATUS
1872             SvUPGRADE(GvSVn(gv), SVt_PVLV);
1873 #endif
1874             goto magicalize;
1875
1876         case '!':               /* $! */
1877             GvMULTI_on(gv);
1878             /* If %! has been used, automatically load Errno.pm. */
1879
1880             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1881
1882             /* magicalization must be done before require_tie_mod is called */
1883             if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1884             {
1885                 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1886                 addmg = 0;
1887                 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1888             }
1889
1890             break;
1891         case '-':               /* $- */
1892         case '+':               /* $+ */
1893         GvMULTI_on(gv); /* no used once warnings here */
1894         {
1895             AV* const av = GvAVn(gv);
1896             SV* const avc = (*name == '+') ? MUTABLE_SV(av) : NULL;
1897
1898             sv_magic(MUTABLE_SV(av), avc, PERL_MAGIC_regdata, NULL, 0);
1899             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1900             if (avc)
1901                 SvREADONLY_on(GvSVn(gv));
1902             SvREADONLY_on(av);
1903
1904             if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1905             {
1906                 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1907                 addmg = 0;
1908                 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1909             }
1910
1911             break;
1912         }
1913         case '*':               /* $* */
1914         case '#':               /* $# */
1915             if (sv_type == SVt_PV)
1916                 /* diag_listed_as: $* is no longer supported */
1917                 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1918                                  "$%c is no longer supported", *name);
1919             break;
1920         case '\010':    /* $^H */
1921             {
1922                 HV *const hv = GvHVn(gv);
1923                 hv_magic(hv, NULL, PERL_MAGIC_hints);
1924             }
1925             goto magicalize;
1926         case '[':               /* $[ */
1927             if ((sv_type == SVt_PV || sv_type == SVt_PVGV)
1928              && FEATURE_ARYBASE_IS_ENABLED) {
1929                 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1930                 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1931                 addmg = 0;
1932             }
1933             else goto magicalize;
1934             break;
1935         case '\023':    /* $^S */
1936         ro_magicalize:
1937             SvREADONLY_on(GvSVn(gv));
1938             /* FALL THROUGH */
1939         case '0':               /* $0 */
1940         case '^':               /* $^ */
1941         case '~':               /* $~ */
1942         case '=':               /* $= */
1943         case '%':               /* $% */
1944         case '.':               /* $. */
1945         case '(':               /* $( */
1946         case ')':               /* $) */
1947         case '<':               /* $< */
1948         case '>':               /* $> */
1949         case '\\':              /* $\ */
1950         case '/':               /* $/ */
1951         case '|':               /* $| */
1952         case '$':               /* $$ */
1953         case '\001':    /* $^A */
1954         case '\003':    /* $^C */
1955         case '\004':    /* $^D */
1956         case '\005':    /* $^E */
1957         case '\006':    /* $^F */
1958         case '\011':    /* $^I, NOT \t in EBCDIC */
1959         case '\016':    /* $^N */
1960         case '\017':    /* $^O */
1961         case '\020':    /* $^P */
1962         case '\024':    /* $^T */
1963         case '\027':    /* $^W */
1964         magicalize:
1965             sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1966             break;
1967
1968         case '\014':    /* $^L */
1969             sv_setpvs(GvSVn(gv),"\f");
1970             break;
1971         case ';':               /* $; */
1972             sv_setpvs(GvSVn(gv),"\034");
1973             break;
1974         case ']':               /* $] */
1975         {
1976             SV * const sv = GvSV(gv);
1977             if (!sv_derived_from(PL_patchlevel, "version"))
1978                 upg_version(PL_patchlevel, TRUE);
1979             GvSV(gv) = vnumify(PL_patchlevel);
1980             SvREADONLY_on(GvSV(gv));
1981             SvREFCNT_dec(sv);
1982         }
1983         break;
1984         case '\026':    /* $^V */
1985         {
1986             SV * const sv = GvSV(gv);
1987             GvSV(gv) = new_version(PL_patchlevel);
1988             SvREADONLY_on(GvSV(gv));
1989             SvREFCNT_dec(sv);
1990         }
1991         break;
1992         }
1993     }
1994   add_magical_gv:
1995     if (addmg) {
1996         if (GvAV(gv) || GvHV(gv) || GvIO(gv) || GvCV(gv) || (
1997              GvSV(gv) && (SvOK(GvSV(gv)) || SvMAGICAL(GvSV(gv)))
1998            ))
1999             (void)hv_store(stash,name,len,(SV *)gv,0);
2000         else SvREFCNT_dec_NN(gv), gv = NULL;
2001     }
2002     
2003     return gv;
2004 }
2005
2006 GV *
2007 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
2008                        const svtype sv_type)
2009 {
2010     dVAR;
2011     const char *name = nambeg;
2012     GV *gv = NULL;
2013     GV**gvp;
2014     STRLEN len;
2015     HV *stash = NULL;
2016     const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
2017     const I32 no_expand = flags & GV_NOEXPAND;
2018     const I32 add = flags & ~GV_NOADD_MASK;
2019     const U32 is_utf8 = flags & SVf_UTF8;
2020     bool addmg = !!(flags & GV_ADDMG);
2021     const char *const name_end = nambeg + full_len;
2022     U32 faking_it;
2023
2024     PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
2025
2026      /* If we have GV_NOTQUAL, the caller promised that
2027       * there is no stash, so we can skip the check.
2028       * Similarly if full_len is 0, since then we're
2029       * dealing with something like *{""} or ""->foo()
2030       */
2031     if ((flags & GV_NOTQUAL) || !full_len) {
2032         len = full_len;
2033     }
2034     else if (parse_gv_stash_name(&stash, &gv, &name, &len, nambeg, full_len, is_utf8, add)) {
2035         if (name == name_end) return gv;
2036     }
2037     else {
2038         return NULL;
2039     }
2040
2041     if (!stash && !find_default_stash(&stash, name, len, is_utf8, add, sv_type)) {
2042         return NULL;
2043     }
2044     
2045     /* By this point we should have a stash and a name */
2046     gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -len : len,add);
2047     if (!gvp || *gvp == (const GV *)&PL_sv_undef) {
2048         if (addmg) gv = (GV *)newSV(0);
2049         else return NULL;
2050     }
2051     else gv = *gvp, addmg = 0;
2052     /* From this point on, addmg means gv has not been inserted in the
2053        symtab yet. */
2054
2055     if (SvTYPE(gv) == SVt_PVGV) {
2056         if (add) {
2057             GvMULTI_on(gv);
2058             gv_init_svtype(gv, sv_type);
2059             /* You reach this path once the typeglob has already been created,
2060                either by the same or a different sigil.  If this path didn't
2061                exist, then (say) referencing $! first, and %! second would
2062                mean that %! was not handled correctly.  */
2063             if (len == 1 && stash == PL_defstash) {
2064               if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
2065                 if (*name == '!')
2066                     require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
2067                 else if (*name == '-' || *name == '+')
2068                     require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
2069               } else if (sv_type == SVt_PV) {
2070                   if (*name == '*' || *name == '#') {
2071                       /* diag_listed_as: $* is no longer supported */
2072                       Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED,
2073                                                        WARN_SYNTAX),
2074                                        "$%c is no longer supported", *name);
2075                   }
2076               }
2077               if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
2078                 switch (*name) {
2079                 case '[':
2080                     require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
2081                     break;
2082 #ifdef PERL_SAWAMPERSAND
2083                 case '`':
2084                     PL_sawampersand |= SAWAMPERSAND_LEFT;
2085                     (void)GvSVn(gv);
2086                     break;
2087                 case '&':
2088                     PL_sawampersand |= SAWAMPERSAND_MIDDLE;
2089                     (void)GvSVn(gv);
2090                     break;
2091                 case '\'':
2092                     PL_sawampersand |= SAWAMPERSAND_RIGHT;
2093                     (void)GvSVn(gv);
2094                     break;
2095 #endif
2096                 }
2097               }
2098             }
2099             else if (len == 3 && sv_type == SVt_PVAV
2100                   && strnEQ(name, "ISA", 3)
2101                   && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
2102                 gv_magicalize_isa(gv);
2103         }
2104         return gv;
2105     } else if (no_init) {
2106         assert(!addmg);
2107         return gv;
2108     } else if (no_expand && SvROK(gv)) {
2109         assert(!addmg);
2110         return gv;
2111     }
2112
2113     /* Adding a new symbol.
2114        Unless of course there was already something non-GV here, in which case
2115        we want to behave as if there was always a GV here, containing some sort
2116        of subroutine.
2117        Otherwise we run the risk of creating things like GvIO, which can cause
2118        subtle bugs. eg the one that tripped up SQL::Translator  */
2119
2120     faking_it = SvOK(gv);
2121
2122     if (add & GV_ADDWARN)
2123         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2124                 "Had to create %"UTF8f" unexpectedly",
2125                  UTF8fARG(is_utf8, name_end-nambeg, nambeg));
2126     gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8);
2127
2128     if ( isIDFIRST_lazy_if(name, is_utf8) && !ckWARN(WARN_ONCE) )
2129         GvMULTI_on(gv) ;
2130
2131     /* set up magic where warranted */
2132     gv = magicalize_gv(gv, stash, name, len, addmg, sv_type);
2133     
2134     if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type);
2135     return gv;
2136 }
2137
2138 void
2139 Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2140 {
2141     const char *name;
2142     const HV * const hv = GvSTASH(gv);
2143
2144     PERL_ARGS_ASSERT_GV_FULLNAME4;
2145
2146     sv_setpv(sv, prefix ? prefix : "");
2147
2148     if (hv && (name = HvNAME(hv))) {
2149       const STRLEN len = HvNAMELEN(hv);
2150       if (keepmain || strnNE(name, "main", len)) {
2151         sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES);
2152         sv_catpvs(sv,"::");
2153       }
2154     }
2155     else sv_catpvs(sv,"__ANON__::");
2156     sv_catsv(sv,sv_2mortal(newSVhek(GvNAME_HEK(gv))));
2157 }
2158
2159 void
2160 Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2161 {
2162     const GV * const egv = GvEGVx(gv);
2163
2164     PERL_ARGS_ASSERT_GV_EFULLNAME4;
2165
2166     gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
2167 }
2168
2169 void
2170 Perl_gv_check(pTHX_ HV *stash)
2171 {
2172     dVAR;
2173     I32 i;
2174
2175     PERL_ARGS_ASSERT_GV_CHECK;
2176
2177     if (!HvARRAY(stash))
2178         return;
2179     for (i = 0; i <= (I32) HvMAX(stash); i++) {
2180         const HE *entry;
2181         /* SvIsCOW is unused on HVs, so we can use it to mark stashes we
2182            are currently searching through recursively.  */
2183         SvIsCOW_on(stash);
2184         for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
2185             GV *gv;
2186             HV *hv;
2187             if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
2188                 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
2189             {
2190                 if (hv != PL_defstash && hv != stash && !SvIsCOW(hv))
2191                      gv_check(hv);              /* nested package */
2192             }
2193             else if ( *HeKEY(entry) != '_'
2194                         && isIDFIRST_lazy_if(HeKEY(entry), HeUTF8(entry)) ) {
2195                 const char *file;
2196                 gv = MUTABLE_GV(HeVAL(entry));
2197                 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
2198                     continue;
2199                 file = GvFILE(gv);
2200                 CopLINE_set(PL_curcop, GvLINE(gv));
2201 #ifdef USE_ITHREADS
2202                 CopFILE(PL_curcop) = (char *)file;      /* set for warning */
2203 #else
2204                 CopFILEGV(PL_curcop)
2205                     = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
2206 #endif
2207                 Perl_warner(aTHX_ packWARN(WARN_ONCE),
2208                         "Name \"%"HEKf"::%"HEKf
2209                         "\" used only once: possible typo",
2210                             HEKfARG(HvNAME_HEK(stash)),
2211                             HEKfARG(GvNAME_HEK(gv)));
2212             }
2213         }
2214         SvIsCOW_off(stash);
2215     }
2216 }
2217
2218 GV *
2219 Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags)
2220 {
2221     dVAR;
2222     PERL_ARGS_ASSERT_NEWGVGEN_FLAGS;
2223     assert(!(flags & ~SVf_UTF8));
2224
2225     return gv_fetchpv(Perl_form(aTHX_ "%"UTF8f"::_GEN_%ld",
2226                                 UTF8fARG(flags, strlen(pack), pack),
2227                                 (long)PL_gensym++),
2228                       GV_ADD, SVt_PVGV);
2229 }
2230
2231 /* hopefully this is only called on local symbol table entries */
2232
2233 GP*
2234 Perl_gp_ref(pTHX_ GP *gp)
2235 {
2236     dVAR;
2237     if (!gp)
2238         return NULL;
2239     gp->gp_refcnt++;
2240     if (gp->gp_cv) {
2241         if (gp->gp_cvgen) {
2242             /* If the GP they asked for a reference to contains
2243                a method cache entry, clear it first, so that we
2244                don't infect them with our cached entry */
2245             SvREFCNT_dec_NN(gp->gp_cv);
2246             gp->gp_cv = NULL;
2247             gp->gp_cvgen = 0;
2248         }
2249     }
2250     return gp;
2251 }
2252
2253 void
2254 Perl_gp_free(pTHX_ GV *gv)
2255 {
2256     dVAR;
2257     GP* gp;
2258     int attempts = 100;
2259
2260     if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
2261         return;
2262     if (gp->gp_refcnt == 0) {
2263         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2264                          "Attempt to free unreferenced glob pointers"
2265                          pTHX__FORMAT pTHX__VALUE);
2266         return;
2267     }
2268     if (--gp->gp_refcnt > 0) {
2269         if (gp->gp_egv == gv)
2270             gp->gp_egv = 0;
2271         GvGP_set(gv, NULL);
2272         return;
2273     }
2274
2275     while (1) {
2276       /* Copy and null out all the glob slots, so destructors do not see
2277          freed SVs. */
2278       HEK * const file_hek = gp->gp_file_hek;
2279       SV  * const sv       = gp->gp_sv;
2280       AV  * const av       = gp->gp_av;
2281       HV  * const hv       = gp->gp_hv;
2282       IO  * const io       = gp->gp_io;
2283       CV  * const cv       = gp->gp_cv;
2284       CV  * const form     = gp->gp_form;
2285
2286       gp->gp_file_hek = NULL;
2287       gp->gp_sv       = NULL;
2288       gp->gp_av       = NULL;
2289       gp->gp_hv       = NULL;
2290       gp->gp_io       = NULL;
2291       gp->gp_cv       = NULL;
2292       gp->gp_form     = NULL;
2293
2294       if (file_hek)
2295         unshare_hek(file_hek);
2296
2297       SvREFCNT_dec(sv);
2298       SvREFCNT_dec(av);
2299       /* FIXME - another reference loop GV -> symtab -> GV ?
2300          Somehow gp->gp_hv can end up pointing at freed garbage.  */
2301       if (hv && SvTYPE(hv) == SVt_PVHV) {
2302         const HEK *hvname_hek = HvNAME_HEK(hv);
2303         DEBUG_o(Perl_deb(aTHX_ "gp_free clearing PL_stashcache for '%"HEKf"'\n", hvname_hek));
2304         if (PL_stashcache && hvname_hek)
2305            (void)hv_delete(PL_stashcache, HEK_KEY(hvname_hek),
2306                       (HEK_UTF8(hvname_hek) ? -HEK_LEN(hvname_hek) : HEK_LEN(hvname_hek)),
2307                       G_DISCARD);
2308         SvREFCNT_dec(hv);
2309       }
2310       SvREFCNT_dec(io);
2311       SvREFCNT_dec(cv);
2312       SvREFCNT_dec(form);
2313
2314       if (!gp->gp_file_hek
2315        && !gp->gp_sv
2316        && !gp->gp_av
2317        && !gp->gp_hv
2318        && !gp->gp_io
2319        && !gp->gp_cv
2320        && !gp->gp_form) break;
2321
2322       if (--attempts == 0) {
2323         Perl_die(aTHX_
2324           "panic: gp_free failed to free glob pointer - "
2325           "something is repeatedly re-creating entries"
2326         );
2327       }
2328     }
2329
2330     Safefree(gp);
2331     GvGP_set(gv, NULL);
2332 }
2333
2334 int
2335 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
2336 {
2337     AMT * const amtp = (AMT*)mg->mg_ptr;
2338     PERL_UNUSED_ARG(sv);
2339
2340     PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
2341
2342     if (amtp && AMT_AMAGIC(amtp)) {
2343         int i;
2344         for (i = 1; i < NofAMmeth; i++) {
2345             CV * const cv = amtp->table[i];
2346             if (cv) {
2347                 SvREFCNT_dec_NN(MUTABLE_SV(cv));
2348                 amtp->table[i] = NULL;
2349             }
2350         }
2351     }
2352  return 0;
2353 }
2354
2355 /* Updates and caches the CV's */
2356 /* Returns:
2357  * 1 on success and there is some overload
2358  * 0 if there is no overload
2359  * -1 if some error occurred and it couldn't croak
2360  */
2361
2362 int
2363 Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
2364 {
2365   dVAR;
2366   MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2367   AMT amt;
2368   const struct mro_meta* stash_meta = HvMROMETA(stash);
2369   U32 newgen;
2370
2371   PERL_ARGS_ASSERT_GV_AMUPDATE;
2372
2373   newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2374   if (mg) {
2375       const AMT * const amtp = (AMT*)mg->mg_ptr;
2376       if (amtp->was_ok_sub == newgen) {
2377           return AMT_AMAGIC(amtp) ? 1 : 0;
2378       }
2379       sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
2380   }
2381
2382   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
2383
2384   Zero(&amt,1,AMT);
2385   amt.was_ok_sub = newgen;
2386   amt.fallback = AMGfallNO;
2387   amt.flags = 0;
2388
2389   {
2390     int filled = 0;
2391     int i;
2392
2393     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
2394
2395     /* Try to find via inheritance. */
2396     GV *gv = gv_fetchmeth_pvn(stash, PL_AMG_names[0], 2, -1, 0);
2397     SV * const sv = gv ? GvSV(gv) : NULL;
2398     CV* cv;
2399
2400     if (!gv)
2401     {
2402       if (!gv_fetchmeth_pvn(stash, "((", 2, -1, 0))
2403         goto no_table;
2404     }
2405 #ifdef PERL_DONT_CREATE_GVSV
2406     else if (!sv) {
2407         NOOP;   /* Equivalent to !SvTRUE and !SvOK  */
2408     }
2409 #endif
2410     else if (SvTRUE(sv))
2411         /* don't need to set overloading here because fallback => 1
2412          * is the default setting for classes without overloading */
2413         amt.fallback=AMGfallYES;
2414     else if (SvOK(sv)) {
2415         amt.fallback=AMGfallNEVER;
2416         filled = 1;
2417     }
2418     else {
2419         filled = 1;
2420     }
2421
2422     for (i = 1; i < NofAMmeth; i++) {
2423         const char * const cooky = PL_AMG_names[i];
2424         /* Human-readable form, for debugging: */
2425         const char * const cp = AMG_id2name(i);
2426         const STRLEN l = PL_AMG_namelens[i];
2427
2428         DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
2429                      cp, HvNAME_get(stash)) );
2430         /* don't fill the cache while looking up!
2431            Creation of inheritance stubs in intermediate packages may
2432            conflict with the logic of runtime method substitution.
2433            Indeed, for inheritance A -> B -> C, if C overloads "+0",
2434            then we could have created stubs for "(+0" in A and C too.
2435            But if B overloads "bool", we may want to use it for
2436            numifying instead of C's "+0". */
2437         gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
2438         cv = 0;
2439         if (gv && (cv = GvCV(gv))) {
2440             if(GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")){
2441               const char * const hvname = HvNAME_get(GvSTASH(CvGV(cv)));
2442               if (hvname && HEK_LEN(HvNAME_HEK(GvSTASH(CvGV(cv)))) == 8
2443                && strEQ(hvname, "overload")) {
2444                 /* This is a hack to support autoloading..., while
2445                    knowing *which* methods were declared as overloaded. */
2446                 /* GvSV contains the name of the method. */
2447                 GV *ngv = NULL;
2448                 SV *gvsv = GvSV(gv);
2449
2450                 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
2451                         "\" for overloaded \"%s\" in package \"%.256s\"\n",
2452                              (void*)GvSV(gv), cp, HvNAME(stash)) );
2453                 if (!gvsv || !SvPOK(gvsv)
2454                     || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0)))
2455                 {
2456                     /* Can be an import stub (created by "can"). */
2457                     if (destructing) {
2458                         return -1;
2459                     }
2460                     else {
2461                         const SV * const name = (gvsv && SvPOK(gvsv))
2462                                                     ? gvsv
2463                                                     : newSVpvs_flags("???", SVs_TEMP);
2464                         /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */
2465                         Perl_croak(aTHX_ "%s method \"%"SVf256
2466                                     "\" overloading \"%s\" "\
2467                                     "in package \"%"HEKf256"\"",
2468                                    (GvCVGEN(gv) ? "Stub found while resolving"
2469                                     : "Can't resolve"),
2470                                    SVfARG(name), cp,
2471                                    HEKfARG(
2472                                         HvNAME_HEK(stash)
2473                                    ));
2474                     }
2475                 }
2476                 cv = GvCV(gv = ngv);
2477               }
2478             }
2479             DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
2480                          cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
2481                          GvNAME(CvGV(cv))) );
2482             filled = 1;
2483         } else if (gv) {                /* Autoloaded... */
2484             cv = MUTABLE_CV(gv);
2485             filled = 1;
2486         }
2487         amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
2488     }
2489     if (filled) {
2490       AMT_AMAGIC_on(&amt);
2491       sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2492                                                 (char*)&amt, sizeof(AMT));
2493       return TRUE;
2494     }
2495   }
2496   /* Here we have no table: */
2497  no_table:
2498   AMT_AMAGIC_off(&amt);
2499   sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2500                                                 (char*)&amt, sizeof(AMTS));
2501   return 0;
2502 }
2503
2504
2505 CV*
2506 Perl_gv_handler(pTHX_ HV *stash, I32 id)
2507 {
2508     dVAR;
2509     MAGIC *mg;
2510     AMT *amtp;
2511     U32 newgen;
2512     struct mro_meta* stash_meta;
2513
2514     if (!stash || !HvNAME_get(stash))
2515         return NULL;
2516
2517     stash_meta = HvMROMETA(stash);
2518     newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2519
2520     mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2521     if (!mg) {
2522       do_update:
2523         if (Gv_AMupdate(stash, 0) == -1)
2524             return NULL;
2525         mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2526     }
2527     assert(mg);
2528     amtp = (AMT*)mg->mg_ptr;
2529     if ( amtp->was_ok_sub != newgen )
2530         goto do_update;
2531     if (AMT_AMAGIC(amtp)) {
2532         CV * const ret = amtp->table[id];
2533         if (ret && isGV(ret)) {         /* Autoloading stab */
2534             /* Passing it through may have resulted in a warning
2535                "Inherited AUTOLOAD for a non-method deprecated", since
2536                our caller is going through a function call, not a method call.
2537                So return the CV for AUTOLOAD, setting $AUTOLOAD. */
2538             GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
2539
2540             if (gv && GvCV(gv))
2541                 return GvCV(gv);
2542         }
2543         return ret;
2544     }
2545
2546     return NULL;
2547 }
2548
2549
2550 /* Implement tryAMAGICun_MG macro.
2551    Do get magic, then see if the stack arg is overloaded and if so call it.
2552    Flags:
2553         AMGf_set     return the arg using SETs rather than assigning to
2554                      the targ
2555         AMGf_numeric apply sv_2num to the stack arg.
2556 */
2557
2558 bool
2559 Perl_try_amagic_un(pTHX_ int method, int flags) {
2560     dVAR;
2561     dSP;
2562     SV* tmpsv;
2563     SV* const arg = TOPs;
2564
2565     SvGETMAGIC(arg);
2566
2567     if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
2568                                               AMGf_noright | AMGf_unary))) {
2569         if (flags & AMGf_set) {
2570             SETs(tmpsv);
2571         }
2572         else {
2573             dTARGET;
2574             if (SvPADMY(TARG)) {
2575                 sv_setsv(TARG, tmpsv);
2576                 SETTARG;
2577             }
2578             else
2579                 SETs(tmpsv);
2580         }
2581         PUTBACK;
2582         return TRUE;
2583     }
2584
2585     if ((flags & AMGf_numeric) && SvROK(arg))
2586         *sp = sv_2num(arg);
2587     return FALSE;
2588 }
2589
2590
2591 /* Implement tryAMAGICbin_MG macro.
2592    Do get magic, then see if the two stack args are overloaded and if so
2593    call it.
2594    Flags:
2595         AMGf_set     return the arg using SETs rather than assigning to
2596                      the targ
2597         AMGf_assign  op may be called as mutator (eg +=)
2598         AMGf_numeric apply sv_2num to the stack arg.
2599 */
2600
2601 bool
2602 Perl_try_amagic_bin(pTHX_ int method, int flags) {
2603     dVAR;
2604     dSP;
2605     SV* const left = TOPm1s;
2606     SV* const right = TOPs;
2607
2608     SvGETMAGIC(left);
2609     if (left != right)
2610         SvGETMAGIC(right);
2611
2612     if (SvAMAGIC(left) || SvAMAGIC(right)) {
2613         SV * const tmpsv = amagic_call(left, right, method,
2614                     ((flags & AMGf_assign) && opASSIGN ? AMGf_assign: 0));
2615         if (tmpsv) {
2616             if (flags & AMGf_set) {
2617                 (void)POPs;
2618                 SETs(tmpsv);
2619             }
2620             else {
2621                 dATARGET;
2622                 (void)POPs;
2623                 if (opASSIGN || SvPADMY(TARG)) {
2624                     sv_setsv(TARG, tmpsv);
2625                     SETTARG;
2626                 }
2627                 else
2628                     SETs(tmpsv);
2629             }
2630             PUTBACK;
2631             return TRUE;
2632         }
2633     }
2634     if(left==right && SvGMAGICAL(left)) {
2635         SV * const left = sv_newmortal();
2636         *(sp-1) = left;
2637         /* Print the uninitialized warning now, so it includes the vari-
2638            able name. */
2639         if (!SvOK(right)) {
2640             if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right);
2641             sv_setsv_flags(left, &PL_sv_no, 0);
2642         }
2643         else sv_setsv_flags(left, right, 0);
2644         SvGETMAGIC(right);
2645     }
2646     if (flags & AMGf_numeric) {
2647         if (SvROK(TOPm1s))
2648             *(sp-1) = sv_2num(TOPm1s);
2649         if (SvROK(right))
2650             *sp     = sv_2num(right);
2651     }
2652     return FALSE;
2653 }
2654
2655 SV *
2656 Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
2657     SV *tmpsv = NULL;
2658
2659     PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
2660
2661     while (SvAMAGIC(ref) && 
2662            (tmpsv = amagic_call(ref, &PL_sv_undef, method,
2663                                 AMGf_noright | AMGf_unary))) { 
2664         if (!SvROK(tmpsv))
2665             Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
2666         if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
2667             /* Bail out if it returns us the same reference.  */
2668             return tmpsv;
2669         }
2670         ref = tmpsv;
2671     }
2672     return tmpsv ? tmpsv : ref;
2673 }
2674
2675 bool
2676 Perl_amagic_is_enabled(pTHX_ int method)
2677 {
2678       SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
2679
2680       assert(PL_curcop->cop_hints & HINT_NO_AMAGIC);
2681
2682       if ( !lex_mask || !SvOK(lex_mask) )
2683           /* overloading lexically disabled */
2684           return FALSE;
2685       else if ( lex_mask && SvPOK(lex_mask) ) {
2686           /* we have an entry in the hints hash, check if method has been
2687            * masked by overloading.pm */
2688           STRLEN len;
2689           const int offset = method / 8;
2690           const int bit    = method % 8;
2691           char *pv = SvPV(lex_mask, len);
2692
2693           /* Bit set, so this overloading operator is disabled */
2694           if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
2695               return FALSE;
2696       }
2697       return TRUE;
2698 }
2699
2700 SV*
2701 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
2702 {
2703   dVAR;
2704   MAGIC *mg;
2705   CV *cv=NULL;
2706   CV **cvp=NULL, **ocvp=NULL;
2707   AMT *amtp=NULL, *oamtp=NULL;
2708   int off = 0, off1, lr = 0, notfound = 0;
2709   int postpr = 0, force_cpy = 0;
2710   int assign = AMGf_assign & flags;
2711   const int assignshift = assign ? 1 : 0;
2712   int use_default_op = 0;
2713   int force_scalar = 0;
2714 #ifdef DEBUGGING
2715   int fl=0;
2716 #endif
2717   HV* stash=NULL;
2718
2719   PERL_ARGS_ASSERT_AMAGIC_CALL;
2720
2721   if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
2722       if (!amagic_is_enabled(method)) return NULL;
2723   }
2724
2725   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
2726       && (stash = SvSTASH(SvRV(left))) && Gv_AMG(stash)
2727       && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2728       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2729                         ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
2730                         : NULL))
2731       && ((cv = cvp[off=method+assignshift])
2732           || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2733                                                           * usual method */
2734                   (
2735 #ifdef DEBUGGING
2736                    fl = 1,
2737 #endif
2738                    cv = cvp[off=method])))) {
2739     lr = -1;                    /* Call method for left argument */
2740   } else {
2741     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
2742       int logic;
2743
2744       /* look for substituted methods */
2745       /* In all the covered cases we should be called with assign==0. */
2746          switch (method) {
2747          case inc_amg:
2748            force_cpy = 1;
2749            if ((cv = cvp[off=add_ass_amg])
2750                || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
2751              right = &PL_sv_yes; lr = -1; assign = 1;
2752            }
2753            break;
2754          case dec_amg:
2755            force_cpy = 1;
2756            if ((cv = cvp[off = subtr_ass_amg])
2757                || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
2758              right = &PL_sv_yes; lr = -1; assign = 1;
2759            }
2760            break;
2761          case bool__amg:
2762            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
2763            break;
2764          case numer_amg:
2765            (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
2766            break;
2767          case string_amg:
2768            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
2769            break;
2770          case not_amg:
2771            (void)((cv = cvp[off=bool__amg])
2772                   || (cv = cvp[off=numer_amg])
2773                   || (cv = cvp[off=string_amg]));
2774            if (cv)
2775                postpr = 1;
2776            break;
2777          case copy_amg:
2778            {
2779              /*
2780                   * SV* ref causes confusion with the interpreter variable of
2781                   * the same name
2782                   */
2783              SV* const tmpRef=SvRV(left);
2784              if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
2785                 /*
2786                  * Just to be extra cautious.  Maybe in some
2787                  * additional cases sv_setsv is safe, too.
2788                  */
2789                 SV* const newref = newSVsv(tmpRef);
2790                 SvOBJECT_on(newref);
2791                 /* No need to do SvAMAGIC_on here, as SvAMAGIC macros
2792                    delegate to the stash. */
2793                 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
2794                 return newref;
2795              }
2796            }
2797            break;
2798          case abs_amg:
2799            if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
2800                && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
2801              SV* const nullsv=sv_2mortal(newSViv(0));
2802              if (off1==lt_amg) {
2803                SV* const lessp = amagic_call(left,nullsv,
2804                                        lt_amg,AMGf_noright);
2805                logic = SvTRUE(lessp);
2806              } else {
2807                SV* const lessp = amagic_call(left,nullsv,
2808                                        ncmp_amg,AMGf_noright);
2809                logic = (SvNV(lessp) < 0);
2810              }
2811              if (logic) {
2812                if (off==subtr_amg) {
2813                  right = left;
2814                  left = nullsv;
2815                  lr = 1;
2816                }
2817              } else {
2818                return left;
2819              }
2820            }
2821            break;
2822          case neg_amg:
2823            if ((cv = cvp[off=subtr_amg])) {
2824              right = left;
2825              left = sv_2mortal(newSViv(0));
2826              lr = 1;
2827            }
2828            break;
2829          case int_amg:
2830          case iter_amg:                 /* XXXX Eventually should do to_gv. */
2831          case ftest_amg:                /* XXXX Eventually should do to_gv. */
2832          case regexp_amg:
2833              /* FAIL safe */
2834              return NULL;       /* Delegate operation to standard mechanisms. */
2835              break;
2836          case to_sv_amg:
2837          case to_av_amg:
2838          case to_hv_amg:
2839          case to_gv_amg:
2840          case to_cv_amg:
2841              /* FAIL safe */
2842              return left;       /* Delegate operation to standard mechanisms. */
2843              break;
2844          default:
2845            goto not_found;
2846          }
2847          if (!cv) goto not_found;
2848     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
2849                && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash)
2850                && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2851                && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2852                           ? (amtp = (AMT*)mg->mg_ptr)->table
2853                           : NULL))
2854                && (cv = cvp[off=method])) { /* Method for right
2855                                              * argument found */
2856       lr=1;
2857     } else if (((cvp && amtp->fallback > AMGfallNEVER)
2858                 || (ocvp && oamtp->fallback > AMGfallNEVER))
2859                && !(flags & AMGf_unary)) {
2860                                 /* We look for substitution for
2861                                  * comparison operations and
2862                                  * concatenation */
2863       if (method==concat_amg || method==concat_ass_amg
2864           || method==repeat_amg || method==repeat_ass_amg) {
2865         return NULL;            /* Delegate operation to string conversion */
2866       }
2867       off = -1;
2868       switch (method) {
2869          case lt_amg:
2870          case le_amg:
2871          case gt_amg:
2872          case ge_amg:
2873          case eq_amg:
2874          case ne_amg:
2875              off = ncmp_amg;
2876              break;
2877          case slt_amg:
2878          case sle_amg:
2879          case sgt_amg:
2880          case sge_amg:
2881          case seq_amg:
2882          case sne_amg:
2883              off = scmp_amg;
2884              break;
2885          }
2886       if (off != -1) {
2887           if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
2888               cv = ocvp[off];
2889               lr = -1;
2890           }
2891           if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
2892               cv = cvp[off];
2893               lr = 1;
2894           }
2895       }
2896       if (cv)
2897           postpr = 1;
2898       else
2899           goto not_found;
2900     } else {
2901     not_found:                  /* No method found, either report or croak */
2902       switch (method) {
2903          case to_sv_amg:
2904          case to_av_amg:
2905          case to_hv_amg:
2906          case to_gv_amg:
2907          case to_cv_amg:
2908              /* FAIL safe */
2909              return left;       /* Delegate operation to standard mechanisms. */
2910              break;
2911       }
2912       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
2913         notfound = 1; lr = -1;
2914       } else if (cvp && (cv=cvp[nomethod_amg])) {
2915         notfound = 1; lr = 1;
2916       } else if ((use_default_op =
2917                   (!ocvp || oamtp->fallback >= AMGfallYES)
2918                   && (!cvp || amtp->fallback >= AMGfallYES))
2919                  && !DEBUG_o_TEST) {
2920         /* Skip generating the "no method found" message.  */
2921         return NULL;
2922       } else {
2923         SV *msg;
2924         if (off==-1) off=method;
2925         msg = sv_2mortal(Perl_newSVpvf(aTHX_
2926                       "Operation \"%s\": no method found,%sargument %s%"SVf"%s%"SVf,
2927                       AMG_id2name(method + assignshift),
2928                       (flags & AMGf_unary ? " " : "\n\tleft "),
2929                       SvAMAGIC(left)?
2930                         "in overloaded package ":
2931                         "has no overloaded magic",
2932                       SvAMAGIC(left)?
2933                         SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))):
2934                         SVfARG(&PL_sv_no),
2935                       SvAMAGIC(right)?
2936                         ",\n\tright argument in overloaded package ":
2937                         (flags & AMGf_unary
2938                          ? ""
2939                          : ",\n\tright argument has no overloaded magic"),
2940                       SvAMAGIC(right)?
2941                         SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))):
2942                         SVfARG(&PL_sv_no)));
2943         if (use_default_op) {
2944           DEBUG_o( Perl_deb(aTHX_ "%"SVf, SVfARG(msg)) );
2945         } else {
2946           Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
2947         }
2948         return NULL;
2949       }
2950       force_cpy = force_cpy || assign;
2951     }
2952   }
2953
2954   switch (method) {
2955     /* in these cases, we're calling '+' or '-' as a fallback for a ++ or --
2956      * operation. we need this to return a value, so that it can be assigned
2957      * later on, in the postpr block (case inc_amg/dec_amg), even if the
2958      * increment or decrement was itself called in void context */
2959     case inc_amg:
2960       if (off == add_amg)
2961         force_scalar = 1;
2962       break;
2963     case dec_amg:
2964       if (off == subtr_amg)
2965         force_scalar = 1;
2966       break;
2967     /* in these cases, we're calling an assignment variant of an operator
2968      * (+= rather than +, for instance). regardless of whether it's a
2969      * fallback or not, it always has to return a value, which will be
2970      * assigned to the proper variable later */
2971     case add_amg:
2972     case subtr_amg:
2973     case mult_amg:
2974     case div_amg:
2975     case modulo_amg:
2976     case pow_amg:
2977     case lshift_amg:
2978     case rshift_amg:
2979     case repeat_amg:
2980     case concat_amg:
2981     case band_amg:
2982     case bor_amg:
2983     case bxor_amg:
2984       if (assign)
2985         force_scalar = 1;
2986       break;
2987     /* the copy constructor always needs to return a value */
2988     case copy_amg:
2989       force_scalar = 1;
2990       break;
2991     /* because of the way these are implemented (they don't perform the
2992      * dereferencing themselves, they return a reference that perl then
2993      * dereferences later), they always have to be in scalar context */
2994     case to_sv_amg:
2995     case to_av_amg:
2996     case to_hv_amg:
2997     case to_gv_amg:
2998     case to_cv_amg:
2999       force_scalar = 1;
3000       break;
3001     /* these don't have an op of their own; they're triggered by their parent
3002      * op, so the context there isn't meaningful ('$a and foo()' in void
3003      * context still needs to pass scalar context on to $a's bool overload) */
3004     case bool__amg:
3005     case numer_amg:
3006     case string_amg:
3007       force_scalar = 1;
3008       break;
3009   }
3010
3011 #ifdef DEBUGGING
3012   if (!notfound) {
3013     DEBUG_o(Perl_deb(aTHX_
3014                      "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %"SVf"%s\n",
3015                      AMG_id2name(off),
3016                      method+assignshift==off? "" :
3017                      " (initially \"",
3018                      method+assignshift==off? "" :
3019                      AMG_id2name(method+assignshift),
3020                      method+assignshift==off? "" : "\")",
3021                      flags & AMGf_unary? "" :
3022                      lr==1 ? " for right argument": " for left argument",
3023                      flags & AMGf_unary? " for argument" : "",
3024                      stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)),
3025                      fl? ",\n\tassignment variant used": "") );
3026   }
3027 #endif
3028     /* Since we use shallow copy during assignment, we need
3029      * to dublicate the contents, probably calling user-supplied
3030      * version of copy operator
3031      */
3032     /* We need to copy in following cases:
3033      * a) Assignment form was called.
3034      *          assignshift==1,  assign==T, method + 1 == off
3035      * b) Increment or decrement, called directly.
3036      *          assignshift==0,  assign==0, method + 0 == off
3037      * c) Increment or decrement, translated to assignment add/subtr.
3038      *          assignshift==0,  assign==T,
3039      *          force_cpy == T
3040      * d) Increment or decrement, translated to nomethod.
3041      *          assignshift==0,  assign==0,
3042      *          force_cpy == T
3043      * e) Assignment form translated to nomethod.
3044      *          assignshift==1,  assign==T, method + 1 != off
3045      *          force_cpy == T
3046      */
3047     /*  off is method, method+assignshift, or a result of opcode substitution.
3048      *  In the latter case assignshift==0, so only notfound case is important.
3049      */
3050   if ( (lr == -1) && ( ( (method + assignshift == off)
3051         && (assign || (method == inc_amg) || (method == dec_amg)))
3052       || force_cpy) )
3053   {
3054       /* newSVsv does not behave as advertised, so we copy missing
3055        * information by hand */
3056       SV *tmpRef = SvRV(left);
3057       SV *rv_copy;
3058       if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
3059           SvRV_set(left, rv_copy);
3060           SvSETMAGIC(left);
3061           SvREFCNT_dec_NN(tmpRef);  
3062       }
3063   }
3064
3065   {
3066     dSP;
3067     BINOP myop;
3068     SV* res;
3069     const bool oldcatch = CATCH_GET;
3070     I32 oldmark, nret;
3071     int gimme = force_scalar ? G_SCALAR : GIMME_V;
3072
3073     CATCH_SET(TRUE);
3074     Zero(&myop, 1, BINOP);
3075     myop.op_last = (OP *) &myop;
3076     myop.op_next = NULL;
3077     myop.op_flags = OPf_STACKED;
3078
3079     switch (gimme) {
3080         case G_VOID:
3081             myop.op_flags |= OPf_WANT_VOID;
3082             break;
3083         case G_ARRAY:
3084             if (flags & AMGf_want_list) {
3085                 myop.op_flags |= OPf_WANT_LIST;
3086                 break;
3087             }
3088             /* FALLTHROUGH */
3089         default:
3090             myop.op_flags |= OPf_WANT_SCALAR;
3091             break;
3092     }
3093
3094     PUSHSTACKi(PERLSI_OVERLOAD);
3095     ENTER;
3096     SAVEOP();
3097     PL_op = (OP *) &myop;
3098     if (PERLDB_SUB && PL_curstash != PL_debstash)
3099         PL_op->op_private |= OPpENTERSUB_DB;
3100     PUTBACK;
3101     Perl_pp_pushmark(aTHX);
3102
3103     EXTEND(SP, notfound + 5);
3104     PUSHs(lr>0? right: left);
3105     PUSHs(lr>0? left: right);
3106     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
3107     if (notfound) {
3108       PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
3109                            AMG_id2namelen(method + assignshift), SVs_TEMP));
3110     }
3111     PUSHs(MUTABLE_SV(cv));
3112     PUTBACK;
3113     oldmark = TOPMARK;
3114
3115     if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
3116       CALLRUNOPS(aTHX);
3117     LEAVE;
3118     SPAGAIN;
3119     nret = SP - (PL_stack_base + oldmark);
3120
3121     switch (gimme) {
3122         case G_VOID:
3123             /* returning NULL has another meaning, and we check the context
3124              * at the call site too, so this can be differentiated from the
3125              * scalar case */
3126             res = &PL_sv_undef;
3127             SP = PL_stack_base + oldmark;
3128             break;
3129         case G_ARRAY: {
3130             if (flags & AMGf_want_list) {
3131                 res = sv_2mortal((SV *)newAV());
3132                 av_extend((AV *)res, nret);
3133                 while (nret--)
3134                     av_store((AV *)res, nret, POPs);
3135                 break;
3136             }
3137             /* FALLTHROUGH */
3138         }
3139         default:
3140             res = POPs;
3141             break;
3142     }
3143
3144     PUTBACK;
3145     POPSTACK;
3146     CATCH_SET(oldcatch);
3147
3148     if (postpr) {
3149       int ans;
3150       switch (method) {
3151       case le_amg:
3152       case sle_amg:
3153         ans=SvIV(res)<=0; break;
3154       case lt_amg:
3155       case slt_amg:
3156         ans=SvIV(res)<0; break;
3157       case ge_amg:
3158       case sge_amg:
3159         ans=SvIV(res)>=0; break;
3160       case gt_amg:
3161       case sgt_amg:
3162         ans=SvIV(res)>0; break;
3163       case eq_amg:
3164       case seq_amg:
3165         ans=SvIV(res)==0; break;
3166       case ne_amg:
3167       case sne_amg:
3168         ans=SvIV(res)!=0; break;
3169       case inc_amg:
3170       case dec_amg:
3171         SvSetSV(left,res); return left;
3172       case not_amg:
3173         ans=!SvTRUE(res); break;
3174       default:
3175         ans=0; break;
3176       }
3177       return boolSV(ans);
3178     } else if (method==copy_amg) {
3179       if (!SvROK(res)) {
3180         Perl_croak(aTHX_ "Copy method did not return a reference");
3181       }
3182       return SvREFCNT_inc(SvRV(res));
3183     } else {
3184       return res;
3185     }
3186   }
3187 }
3188
3189 void
3190 Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
3191 {
3192     dVAR;
3193     U32 hash;
3194
3195     PERL_ARGS_ASSERT_GV_NAME_SET;
3196
3197     if (len > I32_MAX)
3198         Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
3199
3200     if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
3201         unshare_hek(GvNAME_HEK(gv));
3202     }
3203
3204     PERL_HASH(hash, name, len);
3205     GvNAME_HEK(gv) = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash);
3206 }
3207
3208 /*
3209 =for apidoc gv_try_downgrade
3210
3211 If the typeglob C<gv> can be expressed more succinctly, by having
3212 something other than a real GV in its place in the stash, replace it
3213 with the optimised form.  Basic requirements for this are that C<gv>
3214 is a real typeglob, is sufficiently ordinary, and is only referenced
3215 from its package.  This function is meant to be used when a GV has been
3216 looked up in part to see what was there, causing upgrading, but based
3217 on what was found it turns out that the real GV isn't required after all.
3218
3219 If C<gv> is a completely empty typeglob, it is deleted from the stash.
3220
3221 If C<gv> is a typeglob containing only a sufficiently-ordinary constant
3222 sub, the typeglob is replaced with a scalar-reference placeholder that
3223 more compactly represents the same thing.
3224
3225 =cut
3226 */
3227
3228 void
3229 Perl_gv_try_downgrade(pTHX_ GV *gv)
3230 {
3231     HV *stash;
3232     CV *cv;
3233     HEK *namehek;
3234     SV **gvp;
3235     PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
3236
3237     /* XXX Why and where does this leave dangling pointers during global
3238        destruction? */
3239     if (PL_phase == PERL_PHASE_DESTRUCT) return;
3240
3241     if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
3242             !SvOBJECT(gv) && !SvREADONLY(gv) &&
3243             isGV_with_GP(gv) && GvGP(gv) &&
3244             !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
3245             !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
3246             GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
3247         return;
3248     if (SvMAGICAL(gv)) {
3249         MAGIC *mg;
3250         /* only backref magic is allowed */
3251         if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
3252             return;
3253         for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
3254             if (mg->mg_type != PERL_MAGIC_backref)
3255                 return;
3256         }
3257     }
3258     cv = GvCV(gv);
3259     if (!cv) {
3260         HEK *gvnhek = GvNAME_HEK(gv);
3261         (void)hv_delete(stash, HEK_KEY(gvnhek),
3262             HEK_UTF8(gvnhek) ? -HEK_LEN(gvnhek) : HEK_LEN(gvnhek), G_DISCARD);
3263     } else if (GvMULTI(gv) && cv &&
3264             !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
3265             CvSTASH(cv) == stash && CvGV(cv) == gv &&
3266             CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
3267             !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
3268             (namehek = GvNAME_HEK(gv)) &&
3269             (gvp = hv_fetch(stash, HEK_KEY(namehek),
3270                         HEK_LEN(namehek)*(HEK_UTF8(namehek) ? -1 : 1), 0)) &&
3271             *gvp == (SV*)gv) {
3272         SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
3273         const bool imported = !!GvIMPORTED_CV(gv);
3274         SvREFCNT(gv) = 0;
3275         sv_clear((SV*)gv);
3276         SvREFCNT(gv) = 1;
3277         SvFLAGS(gv) = SVt_IV|SVf_ROK|SVprv_PCS_IMPORTED * imported;
3278         SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
3279                                 STRUCT_OFFSET(XPVIV, xiv_iv));
3280         SvRV_set(gv, value);
3281     }
3282 }
3283
3284 #include "XSUB.h"
3285
3286 static void
3287 core_xsub(pTHX_ CV* cv)
3288 {
3289     Perl_croak(aTHX_
3290        "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
3291     );
3292 }
3293
3294 /*
3295  * Local variables:
3296  * c-indentation-style: bsd
3297  * c-basic-offset: 4
3298  * indent-tabs-mode: nil
3299  * End:
3300  *
3301  * ex: set ts=8 sts=4 sw=4 et:
3302  */