xref: /openbsd-src/gnu/usr.bin/perl/gv.c (revision a28daedfc357b214be5c701aa8ba8adb29a7f1c2)
1 /*    gv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 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 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 
20 /*
21 =head1 GV Functions
22 
23 A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
24 It is a structure that holds a pointer to a scalar, an array, a hash etc,
25 corresponding to $foo, @foo, %foo.
26 
27 GVs are usually found as values in stashes (symbol table hashes) where
28 Perl stores its global variables.
29 
30 =cut
31 */
32 
33 #include "EXTERN.h"
34 #define PERL_IN_GV_C
35 #include "perl.h"
36 #include "overload.c"
37 
38 static const char S_autoload[] = "AUTOLOAD";
39 static const STRLEN S_autolen = sizeof(S_autoload)-1;
40 
41 
42 #ifdef PERL_DONT_CREATE_GVSV
43 GV *
44 Perl_gv_SVadd(pTHX_ GV *gv)
45 {
46     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
47 	Perl_croak(aTHX_ "Bad symbol for scalar");
48     if (!GvSV(gv))
49 	GvSV(gv) = newSV(0);
50     return gv;
51 }
52 #endif
53 
54 GV *
55 Perl_gv_AVadd(pTHX_ register GV *gv)
56 {
57     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
58 	Perl_croak(aTHX_ "Bad symbol for array");
59     if (!GvAV(gv))
60 	GvAV(gv) = newAV();
61     return gv;
62 }
63 
64 GV *
65 Perl_gv_HVadd(pTHX_ register GV *gv)
66 {
67     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
68 	Perl_croak(aTHX_ "Bad symbol for hash");
69     if (!GvHV(gv))
70 	GvHV(gv) = newHV();
71     return gv;
72 }
73 
74 GV *
75 Perl_gv_IOadd(pTHX_ register GV *gv)
76 {
77     dVAR;
78     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV) {
79 
80         /*
81          * if it walks like a dirhandle, then let's assume that
82          * this is a dirhandle.
83          */
84 	const char * const fh =
85 			 PL_op->op_type ==  OP_READDIR ||
86                          PL_op->op_type ==  OP_TELLDIR ||
87                          PL_op->op_type ==  OP_SEEKDIR ||
88                          PL_op->op_type ==  OP_REWINDDIR ||
89                          PL_op->op_type ==  OP_CLOSEDIR ?
90                          "dirhandle" : "filehandle";
91         Perl_croak(aTHX_ "Bad symbol for %s", fh);
92     }
93 
94     if (!GvIOp(gv)) {
95 #ifdef GV_UNIQUE_CHECK
96         if (GvUNIQUE(gv)) {
97             Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
98         }
99 #endif
100 	GvIOp(gv) = newIO();
101     }
102     return gv;
103 }
104 
105 GV *
106 Perl_gv_fetchfile(pTHX_ const char *name)
107 {
108     return gv_fetchfile_flags(name, strlen(name), 0);
109 }
110 
111 GV *
112 Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
113 			const U32 flags)
114 {
115     dVAR;
116     char smallbuf[128];
117     char *tmpbuf;
118     const STRLEN tmplen = namelen + 2;
119     GV *gv;
120 
121     PERL_UNUSED_ARG(flags);
122 
123     if (!PL_defstash)
124 	return NULL;
125 
126     if (tmplen <= sizeof smallbuf)
127 	tmpbuf = smallbuf;
128     else
129 	Newx(tmpbuf, tmplen, char);
130     /* This is where the debugger's %{"::_<$filename"} hash is created */
131     tmpbuf[0] = '_';
132     tmpbuf[1] = '<';
133     memcpy(tmpbuf + 2, name, namelen);
134     gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
135     if (!isGV(gv)) {
136 	gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
137 #ifdef PERL_DONT_CREATE_GVSV
138 	GvSV(gv) = newSVpvn(name, namelen);
139 #else
140 	sv_setpvn(GvSV(gv), name, namelen);
141 #endif
142 	if (PERLDB_LINE)
143 	    hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
144     }
145     if (tmpbuf != smallbuf)
146 	Safefree(tmpbuf);
147     return gv;
148 }
149 
150 /*
151 =for apidoc gv_const_sv
152 
153 If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
154 inlining, or C<gv> is a placeholder reference that would be promoted to such
155 a typeglob, then returns the value returned by the sub.  Otherwise, returns
156 NULL.
157 
158 =cut
159 */
160 
161 SV *
162 Perl_gv_const_sv(pTHX_ GV *gv)
163 {
164     if (SvTYPE(gv) == SVt_PVGV)
165 	return cv_const_sv(GvCVu(gv));
166     return SvROK(gv) ? SvRV(gv) : NULL;
167 }
168 
169 GP *
170 Perl_newGP(pTHX_ GV *const gv)
171 {
172     GP *gp;
173     U32 hash;
174 #ifdef USE_ITHREADS
175     const char *const file
176 	= (PL_curcop && CopFILE(PL_curcop)) ? CopFILE(PL_curcop) : "";
177     const STRLEN len = strlen(file);
178 #else
179     SV *const temp_sv = CopFILESV(PL_curcop);
180     const char *file;
181     STRLEN len;
182 
183     if (temp_sv) {
184 	file = SvPVX(temp_sv);
185 	len = SvCUR(temp_sv);
186     } else {
187 	file = "";
188 	len = 0;
189     }
190 #endif
191 
192     PERL_HASH(hash, file, len);
193 
194     Newxz(gp, 1, GP);
195 
196 #ifndef PERL_DONT_CREATE_GVSV
197     gp->gp_sv = newSV(0);
198 #endif
199 
200     gp->gp_line = PL_curcop ? CopLINE(PL_curcop) : 0;
201     /* XXX Ideally this cast would be replaced with a change to const char*
202        in the struct.  */
203     gp->gp_file_hek = share_hek(file, len, hash);
204     gp->gp_egv = gv;
205     gp->gp_refcnt = 1;
206 
207     return gp;
208 }
209 
210 void
211 Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
212 {
213     dVAR;
214     const U32 old_type = SvTYPE(gv);
215     const bool doproto = old_type > SVt_NULL;
216     char * const proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
217     const STRLEN protolen = proto ? SvCUR(gv) : 0;
218     SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
219     const U32 exported_constant = has_constant ? SvPCS_IMPORTED(gv) : 0;
220 
221     assert (!(proto && has_constant));
222 
223     if (has_constant) {
224 	/* The constant has to be a simple scalar type.  */
225 	switch (SvTYPE(has_constant)) {
226 	case SVt_PVAV:
227 	case SVt_PVHV:
228 	case SVt_PVCV:
229 	case SVt_PVFM:
230 	case SVt_PVIO:
231             Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
232 		       sv_reftype(has_constant, 0));
233 	default: NOOP;
234 	}
235 	SvRV_set(gv, NULL);
236 	SvROK_off(gv);
237     }
238 
239 
240     if (old_type < SVt_PVGV) {
241 	if (old_type >= SVt_PV)
242 	    SvCUR_set(gv, 0);
243 	sv_upgrade((SV*)gv, SVt_PVGV);
244     }
245     if (SvLEN(gv)) {
246 	if (proto) {
247 	    SvPV_set(gv, NULL);
248 	    SvLEN_set(gv, 0);
249 	    SvPOK_off(gv);
250 	} else
251 	    Safefree(SvPVX_mutable(gv));
252     }
253     SvIOK_off(gv);
254     isGV_with_GP_on(gv);
255 
256     GvGP(gv) = Perl_newGP(aTHX_ gv);
257     GvSTASH(gv) = stash;
258     if (stash)
259 	Perl_sv_add_backref(aTHX_ (SV*)stash, (SV*)gv);
260     gv_name_set(gv, name, len, GV_ADD);
261     if (multi || doproto)              /* doproto means it _was_ mentioned */
262 	GvMULTI_on(gv);
263     if (doproto) {			/* Replicate part of newSUB here. */
264 	ENTER;
265 	if (has_constant) {
266 	    /* newCONSTSUB takes ownership of the reference from us.  */
267 	    GvCV(gv) = newCONSTSUB(stash, name, has_constant);
268 	    /* If this reference was a copy of another, then the subroutine
269 	       must have been "imported", by a Perl space assignment to a GV
270 	       from a reference to CV.  */
271 	    if (exported_constant)
272 		GvIMPORTED_CV_on(gv);
273 	} else {
274 	    (void) start_subparse(0,0);	/* Create empty CV in compcv. */
275 	    GvCV(gv) = PL_compcv;
276 	}
277 	LEAVE;
278 
279         mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar($) { (shift) } sub ASDF::baz($); *ASDF::baz = \&Foo::bar */
280 	CvGV(GvCV(gv)) = gv;
281 	CvFILE_set_from_cop(GvCV(gv), PL_curcop);
282 	CvSTASH(GvCV(gv)) = PL_curstash;
283 	if (proto) {
284 	    sv_usepvn_flags((SV*)GvCV(gv), proto, protolen,
285 			    SV_HAS_TRAILING_NUL);
286 	}
287     }
288 }
289 
290 STATIC void
291 S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
292 {
293     switch (sv_type) {
294     case SVt_PVIO:
295 	(void)GvIOn(gv);
296 	break;
297     case SVt_PVAV:
298 	(void)GvAVn(gv);
299 	break;
300     case SVt_PVHV:
301 	(void)GvHVn(gv);
302 	break;
303 #ifdef PERL_DONT_CREATE_GVSV
304     case SVt_NULL:
305     case SVt_PVCV:
306     case SVt_PVFM:
307     case SVt_PVGV:
308 	break;
309     default:
310 	if(GvSVn(gv)) {
311 	    /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13
312 	       If we just cast GvSVn(gv) to void, it ignores evaluating it for
313 	       its side effect */
314 	}
315 #endif
316     }
317 }
318 
319 /*
320 =for apidoc gv_fetchmeth
321 
322 Returns the glob with the given C<name> and a defined subroutine or
323 C<NULL>.  The glob lives in the given C<stash>, or in the stashes
324 accessible via @ISA and UNIVERSAL::.
325 
326 The argument C<level> should be either 0 or -1.  If C<level==0>, as a
327 side-effect creates a glob with the given C<name> in the given C<stash>
328 which in the case of success contains an alias for the subroutine, and sets
329 up caching info for this glob.
330 
331 This function grants C<"SUPER"> token as a postfix of the stash name. The
332 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
333 visible to Perl code.  So when calling C<call_sv>, you should not use
334 the GV directly; instead, you should use the method's CV, which can be
335 obtained from the GV with the C<GvCV> macro.
336 
337 =cut
338 */
339 
340 /* NOTE: No support for tied ISA */
341 
342 GV *
343 Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
344 {
345     dVAR;
346     GV** gvp;
347     AV* linear_av;
348     SV** linear_svp;
349     SV* linear_sv;
350     HV* cstash;
351     GV* candidate = NULL;
352     CV* cand_cv = NULL;
353     CV* old_cv;
354     GV* topgv = NULL;
355     const char *hvname;
356     I32 create = (level >= 0) ? 1 : 0;
357     I32 items;
358     STRLEN packlen;
359     U32 topgen_cmp;
360 
361     /* UNIVERSAL methods should be callable without a stash */
362     if (!stash) {
363 	create = 0;  /* probably appropriate */
364 	if(!(stash = gv_stashpvs("UNIVERSAL", 0)))
365 	    return 0;
366     }
367 
368     assert(stash);
369 
370     hvname = HvNAME_get(stash);
371     if (!hvname)
372       Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
373 
374     assert(hvname);
375     assert(name);
376 
377     DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,hvname) );
378 
379     topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation;
380 
381     /* check locally for a real method or a cache entry */
382     gvp = (GV**)hv_fetch(stash, name, len, create);
383     if(gvp) {
384         topgv = *gvp;
385         assert(topgv);
386         if (SvTYPE(topgv) != SVt_PVGV)
387             gv_init(topgv, stash, name, len, TRUE);
388         if ((cand_cv = GvCV(topgv))) {
389             /* If genuine method or valid cache entry, use it */
390             if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
391                 return topgv;
392             }
393             else {
394                 /* stale cache entry, junk it and move on */
395 	        SvREFCNT_dec(cand_cv);
396 	        GvCV(topgv) = cand_cv = NULL;
397 	        GvCVGEN(topgv) = 0;
398             }
399         }
400         else if (GvCVGEN(topgv) == topgen_cmp) {
401             /* cache indicates no such method definitively */
402             return 0;
403         }
404     }
405 
406     packlen = HvNAMELEN_get(stash);
407     if (packlen >= 7 && strEQ(hvname + packlen - 7, "::SUPER")) {
408         HV* basestash;
409         packlen -= 7;
410         basestash = gv_stashpvn(hvname, packlen, GV_ADD);
411         linear_av = mro_get_linear_isa(basestash);
412     }
413     else {
414         linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
415     }
416 
417     linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
418     items = AvFILLp(linear_av); /* no +1, to skip over self */
419     while (items--) {
420         linear_sv = *linear_svp++;
421         assert(linear_sv);
422         cstash = gv_stashsv(linear_sv, 0);
423 
424         if (!cstash) {
425             if (ckWARN(WARN_SYNTAX))
426                 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Can't locate package %"SVf" for @%s::ISA",
427                     SVfARG(linear_sv), hvname);
428             continue;
429         }
430 
431         assert(cstash);
432 
433         gvp = (GV**)hv_fetch(cstash, name, len, 0);
434         if (!gvp) continue;
435         candidate = *gvp;
436         assert(candidate);
437         if (SvTYPE(candidate) != SVt_PVGV) gv_init(candidate, cstash, name, len, TRUE);
438         if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
439             /*
440              * Found real method, cache method in topgv if:
441              *  1. topgv has no synonyms (else inheritance crosses wires)
442              *  2. method isn't a stub (else AUTOLOAD fails spectacularly)
443              */
444             if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
445                   if ((old_cv = GvCV(topgv))) SvREFCNT_dec(old_cv);
446                   SvREFCNT_inc_simple_void_NN(cand_cv);
447                   GvCV(topgv) = cand_cv;
448                   GvCVGEN(topgv) = topgen_cmp;
449             }
450 	    return candidate;
451         }
452     }
453 
454     /* Check UNIVERSAL without caching */
455     if(level == 0 || level == -1) {
456         candidate = gv_fetchmeth(NULL, name, len, 1);
457         if(candidate) {
458             cand_cv = GvCV(candidate);
459             if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
460                   if ((old_cv = GvCV(topgv))) SvREFCNT_dec(old_cv);
461                   SvREFCNT_inc_simple_void_NN(cand_cv);
462                   GvCV(topgv) = cand_cv;
463                   GvCVGEN(topgv) = topgen_cmp;
464             }
465             return candidate;
466         }
467     }
468 
469     if (topgv && GvREFCNT(topgv) == 1) {
470         /* cache the fact that the method is not defined */
471         GvCVGEN(topgv) = topgen_cmp;
472     }
473 
474     return 0;
475 }
476 
477 /*
478 =for apidoc gv_fetchmeth_autoload
479 
480 Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
481 Returns a glob for the subroutine.
482 
483 For an autoloaded subroutine without a GV, will create a GV even
484 if C<level < 0>.  For an autoloaded subroutine without a stub, GvCV()
485 of the result may be zero.
486 
487 =cut
488 */
489 
490 GV *
491 Perl_gv_fetchmeth_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
492 {
493     GV *gv = gv_fetchmeth(stash, name, len, level);
494 
495     if (!gv) {
496 	CV *cv;
497 	GV **gvp;
498 
499 	if (!stash)
500 	    return NULL;	/* UNIVERSAL::AUTOLOAD could cause trouble */
501 	if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
502 	    return NULL;
503 	if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
504 	    return NULL;
505 	cv = GvCV(gv);
506 	if (!(CvROOT(cv) || CvXSUB(cv)))
507 	    return NULL;
508 	/* Have an autoload */
509 	if (level < 0)	/* Cannot do without a stub */
510 	    gv_fetchmeth(stash, name, len, 0);
511 	gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
512 	if (!gvp)
513 	    return NULL;
514 	return *gvp;
515     }
516     return gv;
517 }
518 
519 /*
520 =for apidoc gv_fetchmethod_autoload
521 
522 Returns the glob which contains the subroutine to call to invoke the method
523 on the C<stash>.  In fact in the presence of autoloading this may be the
524 glob for "AUTOLOAD".  In this case the corresponding variable $AUTOLOAD is
525 already setup.
526 
527 The third parameter of C<gv_fetchmethod_autoload> determines whether
528 AUTOLOAD lookup is performed if the given method is not present: non-zero
529 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
530 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
531 with a non-zero C<autoload> parameter.
532 
533 These functions grant C<"SUPER"> token as a prefix of the method name. Note
534 that if you want to keep the returned glob for a long time, you need to
535 check for it being "AUTOLOAD", since at the later time the call may load a
536 different subroutine due to $AUTOLOAD changing its value. Use the glob
537 created via a side effect to do this.
538 
539 These functions have the same side-effects and as C<gv_fetchmeth> with
540 C<level==0>.  C<name> should be writable if contains C<':'> or C<'
541 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
542 C<call_sv> apply equally to these functions.
543 
544 =cut
545 */
546 
547 STATIC HV*
548 S_gv_get_super_pkg(pTHX_ const char* name, I32 namelen)
549 {
550     AV* superisa;
551     GV** gvp;
552     GV* gv;
553     HV* stash;
554 
555     stash = gv_stashpvn(name, namelen, 0);
556     if(stash) return stash;
557 
558     /* If we must create it, give it an @ISA array containing
559        the real package this SUPER is for, so that it's tied
560        into the cache invalidation code correctly */
561     stash = gv_stashpvn(name, namelen, GV_ADD);
562     gvp = (GV**)hv_fetchs(stash, "ISA", TRUE);
563     gv = *gvp;
564     gv_init(gv, stash, "ISA", 3, TRUE);
565     superisa = GvAVn(gv);
566     GvMULTI_on(gv);
567     sv_magic((SV*)superisa, (SV*)gv, PERL_MAGIC_isa, NULL, 0);
568 #ifdef USE_ITHREADS
569     av_push(superisa, newSVpv(CopSTASHPV(PL_curcop), 0));
570 #else
571     av_push(superisa, newSVhek(CopSTASH(PL_curcop)
572 			       ? HvNAME_HEK(CopSTASH(PL_curcop)) : NULL));
573 #endif
574 
575     return stash;
576 }
577 
578 /* FIXME. If changing this function note the comment in pp_hot's
579    S_method_common:
580 
581    This code tries to figure out just what went wrong with
582    gv_fetchmethod.  It therefore needs to duplicate a lot of
583    the internals of that function. ...
584 
585    I'd guess that with one more flag bit that could all be moved inside
586    here.
587 */
588 
589 GV *
590 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
591 {
592     dVAR;
593     register const char *nend;
594     const char *nsplit = NULL;
595     GV* gv;
596     HV* ostash = stash;
597 
598     if (stash && SvTYPE(stash) < SVt_PVHV)
599 	stash = NULL;
600 
601     for (nend = name; *nend; nend++) {
602 	if (*nend == '\'')
603 	    nsplit = nend;
604 	else if (*nend == ':' && *(nend + 1) == ':')
605 	    nsplit = ++nend;
606     }
607     if (nsplit) {
608 	const char * const origname = name;
609 	name = nsplit + 1;
610 	if (*nsplit == ':')
611 	    --nsplit;
612 	if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
613 	    /* ->SUPER::method should really be looked up in original stash */
614 	    SV * const tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
615 						  CopSTASHPV(PL_curcop)));
616 	    /* __PACKAGE__::SUPER stash should be autovivified */
617 	    stash = gv_get_super_pkg(SvPVX_const(tmpstr), SvCUR(tmpstr));
618 	    DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
619 			 origname, HvNAME_get(stash), name) );
620 	}
621 	else {
622             /* don't autovifify if ->NoSuchStash::method */
623             stash = gv_stashpvn(origname, nsplit - origname, 0);
624 
625 	    /* however, explicit calls to Pkg::SUPER::method may
626 	       happen, and may require autovivification to work */
627 	    if (!stash && (nsplit - origname) >= 7 &&
628 		strnEQ(nsplit - 7, "::SUPER", 7) &&
629 		gv_stashpvn(origname, nsplit - origname - 7, 0))
630 	      stash = gv_get_super_pkg(origname, nsplit - origname);
631 	}
632 	ostash = stash;
633     }
634 
635     gv = gv_fetchmeth(stash, name, nend - name, 0);
636     if (!gv) {
637 	if (strEQ(name,"import") || strEQ(name,"unimport"))
638 	    gv = (GV*)&PL_sv_yes;
639 	else if (autoload)
640 	    gv = gv_autoload4(ostash, name, nend - name, TRUE);
641     }
642     else if (autoload) {
643 	CV* const cv = GvCV(gv);
644 	if (!CvROOT(cv) && !CvXSUB(cv)) {
645 	    GV* stubgv;
646 	    GV* autogv;
647 
648 	    if (CvANON(cv))
649 		stubgv = gv;
650 	    else {
651 		stubgv = CvGV(cv);
652 		if (GvCV(stubgv) != cv)		/* orphaned import */
653 		    stubgv = gv;
654 	    }
655 	    autogv = gv_autoload4(GvSTASH(stubgv),
656 				  GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
657 	    if (autogv)
658 		gv = autogv;
659 	}
660     }
661 
662     return gv;
663 }
664 
665 GV*
666 Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
667 {
668     dVAR;
669     GV* gv;
670     CV* cv;
671     HV* varstash;
672     GV* vargv;
673     SV* varsv;
674     const char *packname = "";
675     STRLEN packname_len = 0;
676 
677     if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
678 	return NULL;
679     if (stash) {
680 	if (SvTYPE(stash) < SVt_PVHV) {
681 	    packname = SvPV_const((SV*)stash, packname_len);
682 	    stash = NULL;
683 	}
684 	else {
685 	    packname = HvNAME_get(stash);
686 	    packname_len = HvNAMELEN_get(stash);
687 	}
688     }
689     if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
690 	return NULL;
691     cv = GvCV(gv);
692 
693     if (!(CvROOT(cv) || CvXSUB(cv)))
694 	return NULL;
695 
696     /*
697      * Inheriting AUTOLOAD for non-methods works ... for now.
698      */
699     if (!method && (GvCVGEN(gv) || GvSTASH(gv) != stash)
700 	&& ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)
701     )
702 	Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
703 	  "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
704 	     packname, (int)len, name);
705 
706     if (CvISXSUB(cv)) {
707         /* rather than lookup/init $AUTOLOAD here
708          * only to have the XSUB do another lookup for $AUTOLOAD
709          * and split that value on the last '::',
710          * pass along the same data via some unused fields in the CV
711          */
712         CvSTASH(cv) = stash;
713         SvPV_set(cv, (char *)name); /* cast to lose constness warning */
714         SvCUR_set(cv, len);
715         return gv;
716     }
717 
718     /*
719      * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
720      * The subroutine's original name may not be "AUTOLOAD", so we don't
721      * use that, but for lack of anything better we will use the sub's
722      * original package to look up $AUTOLOAD.
723      */
724     varstash = GvSTASH(CvGV(cv));
725     vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
726     ENTER;
727 
728     if (!isGV(vargv)) {
729 	gv_init(vargv, varstash, S_autoload, S_autolen, FALSE);
730 #ifdef PERL_DONT_CREATE_GVSV
731 	GvSV(vargv) = newSV(0);
732 #endif
733     }
734     LEAVE;
735     varsv = GvSVn(vargv);
736     sv_setpvn(varsv, packname, packname_len);
737     sv_catpvs(varsv, "::");
738     sv_catpvn(varsv, name, len);
739     return gv;
740 }
741 
742 
743 /* require_tie_mod() internal routine for requiring a module
744  * that implements the logic of automatical ties like %! and %-
745  *
746  * The "gv" parameter should be the glob.
747  * "varpv" holds the name of the var, used for error messages.
748  * "namesv" holds the module name. Its refcount will be decremented.
749  * "methpv" holds the method name to test for to check that things
750  *   are working reasonably close to as expected.
751  * "flags": if flag & 1 then save the scalar before loading.
752  * For the protection of $! to work (it is set by this routine)
753  * the sv slot must already be magicalized.
754  */
755 STATIC HV*
756 S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv,const U32 flags)
757 {
758     dVAR;
759     HV* stash = gv_stashsv(namesv, 0);
760 
761     if (!stash || !(gv_fetchmethod(stash, methpv))) {
762 	SV *module = newSVsv(namesv);
763 	char varname = *varpv; /* varpv might be clobbered by load_module,
764 				  so save it. For the moment it's always
765 				  a single char. */
766 	dSP;
767 	ENTER;
768 	if ( flags & 1 )
769 	    save_scalar(gv);
770 	PUSHSTACKi(PERLSI_MAGIC);
771 	Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
772 	POPSTACK;
773 	LEAVE;
774 	SPAGAIN;
775 	stash = gv_stashsv(namesv, 0);
776 	if (!stash)
777 	    Perl_croak(aTHX_ "panic: Can't use %%%c because %"SVf" is not available",
778 		    varname, SVfARG(namesv));
779 	else if (!gv_fetchmethod(stash, methpv))
780 	    Perl_croak(aTHX_ "panic: Can't use %%%c because %"SVf" does not support method %s",
781 		    varname, SVfARG(namesv), methpv);
782     }
783     SvREFCNT_dec(namesv);
784     return stash;
785 }
786 
787 /*
788 =for apidoc gv_stashpv
789 
790 Returns a pointer to the stash for a specified package.  Uses C<strlen> to
791 determine the length of C<name>, then calls C<gv_stashpvn()>.
792 
793 =cut
794 */
795 
796 HV*
797 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
798 {
799     return gv_stashpvn(name, strlen(name), create);
800 }
801 
802 /*
803 =for apidoc gv_stashpvn
804 
805 Returns a pointer to the stash for a specified package.  The C<namelen>
806 parameter indicates the length of the C<name>, in bytes.  C<flags> is passed
807 to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
808 created if it does not already exist.  If the package does not exist and
809 C<flags> is 0 (or any other setting that does not create packages) then NULL
810 is returned.
811 
812 
813 =cut
814 */
815 
816 HV*
817 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
818 {
819     char smallbuf[128];
820     char *tmpbuf;
821     HV *stash;
822     GV *tmpgv;
823 
824     if (namelen + 2 <= sizeof smallbuf)
825 	tmpbuf = smallbuf;
826     else
827 	Newx(tmpbuf, namelen + 2, char);
828     Copy(name,tmpbuf,namelen,char);
829     tmpbuf[namelen++] = ':';
830     tmpbuf[namelen++] = ':';
831     tmpgv = gv_fetchpvn_flags(tmpbuf, namelen, flags, SVt_PVHV);
832     if (tmpbuf != smallbuf)
833 	Safefree(tmpbuf);
834     if (!tmpgv)
835 	return NULL;
836     if (!GvHV(tmpgv))
837 	GvHV(tmpgv) = newHV();
838     stash = GvHV(tmpgv);
839     if (!HvNAME_get(stash))
840 	hv_name_set(stash, name, namelen, 0);
841     return stash;
842 }
843 
844 /*
845 =for apidoc gv_stashsv
846 
847 Returns a pointer to the stash for a specified package.  See C<gv_stashpvn>.
848 
849 =cut
850 */
851 
852 HV*
853 Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
854 {
855     STRLEN len;
856     const char * const ptr = SvPV_const(sv,len);
857     return gv_stashpvn(ptr, len, flags);
858 }
859 
860 
861 GV *
862 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) {
863     return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
864 }
865 
866 GV *
867 Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, I32 sv_type) {
868     STRLEN len;
869     const char * const nambeg = SvPV_const(name, len);
870     return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
871 }
872 
873 GV *
874 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
875 		       I32 sv_type)
876 {
877     dVAR;
878     register const char *name = nambeg;
879     register GV *gv = NULL;
880     GV**gvp;
881     I32 len;
882     register const char *name_cursor;
883     HV *stash = NULL;
884     const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
885     const I32 no_expand = flags & GV_NOEXPAND;
886     const I32 add = flags & ~GV_NOADD_MASK;
887     const char *const name_end = nambeg + full_len;
888     const char *const name_em1 = name_end - 1;
889     U32 faking_it;
890 
891     if (flags & GV_NOTQUAL) {
892 	/* Caller promised that there is no stash, so we can skip the check. */
893 	len = full_len;
894 	goto no_stash;
895     }
896 
897     if (full_len > 2 && *name == '*' && isALPHA(name[1])) {
898 	/* accidental stringify on a GV? */
899 	name++;
900     }
901 
902     for (name_cursor = name; name_cursor < name_end; name_cursor++) {
903 	if ((*name_cursor == ':' && name_cursor < name_em1
904 	     && name_cursor[1] == ':')
905 	    || (*name_cursor == '\'' && name_cursor[1]))
906 	{
907 	    if (!stash)
908 		stash = PL_defstash;
909 	    if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
910 		return NULL;
911 
912 	    len = name_cursor - name;
913 	    if (len > 0) {
914 		char smallbuf[128];
915 		char *tmpbuf;
916 
917 		if (len + 2 <= (I32)sizeof (smallbuf))
918 		    tmpbuf = smallbuf;
919 		else
920 		    Newx(tmpbuf, len+2, char);
921 		Copy(name, tmpbuf, len, char);
922 		tmpbuf[len++] = ':';
923 		tmpbuf[len++] = ':';
924 		gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
925 		gv = gvp ? *gvp : NULL;
926 		if (gv && gv != (GV*)&PL_sv_undef) {
927 		    if (SvTYPE(gv) != SVt_PVGV)
928 			gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
929 		    else
930 			GvMULTI_on(gv);
931 		}
932 		if (tmpbuf != smallbuf)
933 		    Safefree(tmpbuf);
934 		if (!gv || gv == (GV*)&PL_sv_undef)
935 		    return NULL;
936 
937 		if (!(stash = GvHV(gv)))
938 		    stash = GvHV(gv) = newHV();
939 
940 		if (!HvNAME_get(stash))
941 		    hv_name_set(stash, nambeg, name_cursor - nambeg, 0);
942 	    }
943 
944 	    if (*name_cursor == ':')
945 		name_cursor++;
946 	    name_cursor++;
947 	    name = name_cursor;
948 	    if (name == name_end)
949 		return gv ? gv : (GV*)*hv_fetchs(PL_defstash, "main::", TRUE);
950 	}
951     }
952     len = name_cursor - name;
953 
954     /* No stash in name, so see how we can default */
955 
956     if (!stash) {
957     no_stash:
958 	if (len && isIDFIRST_lazy(name)) {
959 	    bool global = FALSE;
960 
961 	    switch (len) {
962 	    case 1:
963 		if (*name == '_')
964 		    global = TRUE;
965 		break;
966 	    case 3:
967 		if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
968 		    || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
969 		    || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
970 		    global = TRUE;
971 		break;
972 	    case 4:
973 		if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
974 		    && name[3] == 'V')
975 		    global = TRUE;
976 		break;
977 	    case 5:
978 		if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
979 		    && name[3] == 'I' && name[4] == 'N')
980 		    global = TRUE;
981 		break;
982 	    case 6:
983 		if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
984 		    &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
985 		       ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
986 		    global = TRUE;
987 		break;
988 	    case 7:
989 		if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
990 		    && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
991 		    && name[6] == 'T')
992 		    global = TRUE;
993 		break;
994 	    }
995 
996 	    if (global)
997 		stash = PL_defstash;
998 	    else if (IN_PERL_COMPILETIME) {
999 		stash = PL_curstash;
1000 		if (add && (PL_hints & HINT_STRICT_VARS) &&
1001 		    sv_type != SVt_PVCV &&
1002 		    sv_type != SVt_PVGV &&
1003 		    sv_type != SVt_PVFM &&
1004 		    sv_type != SVt_PVIO &&
1005 		    !(len == 1 && sv_type == SVt_PV &&
1006 		      (*name == 'a' || *name == 'b')) )
1007 		{
1008 		    gvp = (GV**)hv_fetch(stash,name,len,0);
1009 		    if (!gvp ||
1010 			*gvp == (GV*)&PL_sv_undef ||
1011 			SvTYPE(*gvp) != SVt_PVGV)
1012 		    {
1013 			stash = NULL;
1014 		    }
1015 		    else if ((sv_type == SVt_PV   && !GvIMPORTED_SV(*gvp)) ||
1016 			     (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1017 			     (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
1018 		    {
1019 			Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
1020 			    sv_type == SVt_PVAV ? '@' :
1021 			    sv_type == SVt_PVHV ? '%' : '$',
1022 			    name);
1023 			if (GvCVu(*gvp))
1024 			    Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
1025 			stash = NULL;
1026 		    }
1027 		}
1028 	    }
1029 	    else
1030 		stash = CopSTASH(PL_curcop);
1031 	}
1032 	else
1033 	    stash = PL_defstash;
1034     }
1035 
1036     /* By this point we should have a stash and a name */
1037 
1038     if (!stash) {
1039 	if (add) {
1040 	    SV * const err = Perl_mess(aTHX_
1041 		 "Global symbol \"%s%s\" requires explicit package name",
1042 		 (sv_type == SVt_PV ? "$"
1043 		  : sv_type == SVt_PVAV ? "@"
1044 		  : sv_type == SVt_PVHV ? "%"
1045 		  : ""), name);
1046 	    GV *gv;
1047 	    if (USE_UTF8_IN_NAMES)
1048 		SvUTF8_on(err);
1049 	    qerror(err);
1050 	    gv = gv_fetchpvn_flags("<none>::", 8, GV_ADDMULTI, SVt_PVHV);
1051 	    if(!gv) {
1052 		/* symbol table under destruction */
1053 		return NULL;
1054 	    }
1055 	    stash = GvHV(gv);
1056 	}
1057 	else
1058 	    return NULL;
1059     }
1060 
1061     if (!SvREFCNT(stash))	/* symbol table under destruction */
1062 	return NULL;
1063 
1064     gvp = (GV**)hv_fetch(stash,name,len,add);
1065     if (!gvp || *gvp == (GV*)&PL_sv_undef)
1066 	return NULL;
1067     gv = *gvp;
1068     if (SvTYPE(gv) == SVt_PVGV) {
1069 	if (add) {
1070 	    GvMULTI_on(gv);
1071 	    gv_init_sv(gv, sv_type);
1072 	    if (len == 1 && (sv_type == SVt_PVHV || sv_type == SVt_PVGV)) {
1073 	        if (*name == '!')
1074 		    require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1075 		else if (*name == '-' || *name == '+')
1076 		    require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1077 	    }
1078 	}
1079 	return gv;
1080     } else if (no_init) {
1081 	return gv;
1082     } else if (no_expand && SvROK(gv)) {
1083 	return gv;
1084     }
1085 
1086     /* Adding a new symbol.
1087        Unless of course there was already something non-GV here, in which case
1088        we want to behave as if there was always a GV here, containing some sort
1089        of subroutine.
1090        Otherwise we run the risk of creating things like GvIO, which can cause
1091        subtle bugs. eg the one that tripped up SQL::Translator  */
1092 
1093     faking_it = SvOK(gv);
1094 
1095     if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
1096 	Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
1097     gv_init(gv, stash, name, len, add & GV_ADDMULTI);
1098     gv_init_sv(gv, faking_it ? SVt_PVCV : sv_type);
1099 
1100     if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
1101 			                    : (PL_dowarn & G_WARN_ON ) ) )
1102         GvMULTI_on(gv) ;
1103 
1104     /* set up magic where warranted */
1105     if (len > 1) {
1106 #ifndef EBCDIC
1107 	if (*name > 'V' ) {
1108 	    NOOP;
1109 	    /* Nothing else to do.
1110 	       The compiler will probably turn the switch statement into a
1111 	       branch table. Make sure we avoid even that small overhead for
1112 	       the common case of lower case variable names.  */
1113 	} else
1114 #endif
1115 	{
1116 	    const char * const name2 = name + 1;
1117 	    switch (*name) {
1118 	    case 'A':
1119 		if (strEQ(name2, "RGV")) {
1120 		    IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1121 		}
1122 		else if (strEQ(name2, "RGVOUT")) {
1123 		    GvMULTI_on(gv);
1124 		}
1125 		break;
1126 	    case 'E':
1127 		if (strnEQ(name2, "XPORT", 5))
1128 		    GvMULTI_on(gv);
1129 		break;
1130 	    case 'I':
1131 		if (strEQ(name2, "SA")) {
1132 		    AV* const av = GvAVn(gv);
1133 		    GvMULTI_on(gv);
1134 		    sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, NULL, 0);
1135 		    /* NOTE: No support for tied ISA */
1136 		    if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
1137 			&& AvFILLp(av) == -1)
1138 			{
1139 			    const char *pname;
1140 			    av_push(av, newSVpvn(pname = "NDBM_File",9));
1141 			    gv_stashpvn(pname, 9, GV_ADD);
1142 			    av_push(av, newSVpvn(pname = "DB_File",7));
1143 			    gv_stashpvn(pname, 7, GV_ADD);
1144 			    av_push(av, newSVpvn(pname = "GDBM_File",9));
1145 			    gv_stashpvn(pname, 9, GV_ADD);
1146 			    av_push(av, newSVpvn(pname = "SDBM_File",9));
1147 			    gv_stashpvn(pname, 9, GV_ADD);
1148 			    av_push(av, newSVpvn(pname = "ODBM_File",9));
1149 			    gv_stashpvn(pname, 9, GV_ADD);
1150 			}
1151 		}
1152 		break;
1153 	    case 'O':
1154 		if (strEQ(name2, "VERLOAD")) {
1155 		    HV* const hv = GvHVn(gv);
1156 		    GvMULTI_on(gv);
1157 		    hv_magic(hv, NULL, PERL_MAGIC_overload);
1158 		}
1159 		break;
1160 	    case 'S':
1161 		if (strEQ(name2, "IG")) {
1162 		    HV *hv;
1163 		    I32 i;
1164 		    if (!PL_psig_ptr) {
1165 			Newxz(PL_psig_ptr,  SIG_SIZE, SV*);
1166 			Newxz(PL_psig_name, SIG_SIZE, SV*);
1167 			Newxz(PL_psig_pend, SIG_SIZE, int);
1168 		    }
1169 		    GvMULTI_on(gv);
1170 		    hv = GvHVn(gv);
1171 		    hv_magic(hv, NULL, PERL_MAGIC_sig);
1172 		    for (i = 1; i < SIG_SIZE; i++) {
1173 			SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1174 			if (init)
1175 			    sv_setsv(*init, &PL_sv_undef);
1176 			PL_psig_ptr[i] = 0;
1177 			PL_psig_name[i] = 0;
1178 			PL_psig_pend[i] = 0;
1179 		    }
1180 		}
1181 		break;
1182 	    case 'V':
1183 		if (strEQ(name2, "ERSION"))
1184 		    GvMULTI_on(gv);
1185 		break;
1186             case '\003':        /* $^CHILD_ERROR_NATIVE */
1187 		if (strEQ(name2, "HILD_ERROR_NATIVE"))
1188 		    goto magicalize;
1189 		break;
1190 	    case '\005':	/* $^ENCODING */
1191 		if (strEQ(name2, "NCODING"))
1192 		    goto magicalize;
1193 		break;
1194             case '\015':        /* $^MATCH */
1195                 if (strEQ(name2, "ATCH"))
1196 		    goto magicalize;
1197 	    case '\017':	/* $^OPEN */
1198 		if (strEQ(name2, "PEN"))
1199 		    goto magicalize;
1200 		break;
1201 	    case '\020':        /* $^PREMATCH  $^POSTMATCH */
1202 	        if (strEQ(name2, "REMATCH") || strEQ(name2, "OSTMATCH"))
1203 		    goto magicalize;
1204 	    case '\024':	/* ${^TAINT} */
1205 		if (strEQ(name2, "AINT"))
1206 		    goto ro_magicalize;
1207 		break;
1208 	    case '\025':	/* ${^UNICODE}, ${^UTF8LOCALE} */
1209 		if (strEQ(name2, "NICODE"))
1210 		    goto ro_magicalize;
1211 		if (strEQ(name2, "TF8LOCALE"))
1212 		    goto ro_magicalize;
1213 		if (strEQ(name2, "TF8CACHE"))
1214 		    goto magicalize;
1215 		break;
1216 	    case '\027':	/* $^WARNING_BITS */
1217 		if (strEQ(name2, "ARNING_BITS"))
1218 		    goto magicalize;
1219 		break;
1220 	    case '1':
1221 	    case '2':
1222 	    case '3':
1223 	    case '4':
1224 	    case '5':
1225 	    case '6':
1226 	    case '7':
1227 	    case '8':
1228 	    case '9':
1229 	    {
1230 		/* Ensures that we have an all-digit variable, ${"1foo"} fails
1231 		   this test  */
1232 		/* This snippet is taken from is_gv_magical */
1233 		const char *end = name + len;
1234 		while (--end > name) {
1235 		    if (!isDIGIT(*end))	return gv;
1236 		}
1237 		goto magicalize;
1238 	    }
1239 	    }
1240 	}
1241     } else {
1242 	/* Names of length 1.  (Or 0. But name is NUL terminated, so that will
1243 	   be case '\0' in this switch statement (ie a default case)  */
1244 	switch (*name) {
1245 	case '&':
1246 	case '`':
1247 	case '\'':
1248 	    if (
1249 		sv_type == SVt_PVAV ||
1250 		sv_type == SVt_PVHV ||
1251 		sv_type == SVt_PVCV ||
1252 		sv_type == SVt_PVFM ||
1253 		sv_type == SVt_PVIO
1254 		) { break; }
1255 	    PL_sawampersand = TRUE;
1256 	    goto magicalize;
1257 
1258 	case ':':
1259 	    sv_setpv(GvSVn(gv),PL_chopset);
1260 	    goto magicalize;
1261 
1262 	case '?':
1263 #ifdef COMPLEX_STATUS
1264 	    SvUPGRADE(GvSVn(gv), SVt_PVLV);
1265 #endif
1266 	    goto magicalize;
1267 
1268 	case '!':
1269 	    GvMULTI_on(gv);
1270 	    /* If %! has been used, automatically load Errno.pm. */
1271 
1272 	    sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1273 
1274             /* magicalization must be done before require_tie_mod is called */
1275 	    if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1276 		require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1277 
1278 	    break;
1279 	case '-':
1280 	case '+':
1281 	GvMULTI_on(gv); /* no used once warnings here */
1282         {
1283             AV* const av = GvAVn(gv);
1284 	    SV* const avc = (*name == '+') ? (SV*)av : NULL;
1285 
1286 	    sv_magic((SV*)av, avc, PERL_MAGIC_regdata, NULL, 0);
1287             sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1288             if (avc)
1289                 SvREADONLY_on(GvSVn(gv));
1290             SvREADONLY_on(av);
1291 
1292             if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1293                 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1294 
1295             break;
1296 	}
1297 	case '*':
1298 	case '#':
1299 	    if (sv_type == SVt_PV && ckWARN2_d(WARN_DEPRECATED, WARN_SYNTAX))
1300 		Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1301 			    "$%c is no longer supported", *name);
1302 	    break;
1303 	case '|':
1304 	    sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
1305 	    goto magicalize;
1306 
1307 	case '\010':	/* $^H */
1308 	    {
1309 		HV *const hv = GvHVn(gv);
1310 		hv_magic(hv, NULL, PERL_MAGIC_hints);
1311 	    }
1312 	    goto magicalize;
1313 	case '\023':	/* $^S */
1314 	ro_magicalize:
1315 	    SvREADONLY_on(GvSVn(gv));
1316 	    /* FALL THROUGH */
1317 	case '1':
1318 	case '2':
1319 	case '3':
1320 	case '4':
1321 	case '5':
1322 	case '6':
1323 	case '7':
1324 	case '8':
1325 	case '9':
1326 	case '[':
1327 	case '^':
1328 	case '~':
1329 	case '=':
1330 	case '%':
1331 	case '.':
1332 	case '(':
1333 	case ')':
1334 	case '<':
1335 	case '>':
1336 	case ',':
1337 	case '\\':
1338 	case '/':
1339 	case '\001':	/* $^A */
1340 	case '\003':	/* $^C */
1341 	case '\004':	/* $^D */
1342 	case '\005':	/* $^E */
1343 	case '\006':	/* $^F */
1344 	case '\011':	/* $^I, NOT \t in EBCDIC */
1345 	case '\016':	/* $^N */
1346 	case '\017':	/* $^O */
1347 	case '\020':	/* $^P */
1348 	case '\024':	/* $^T */
1349 	case '\027':	/* $^W */
1350 	magicalize:
1351 	    sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1352 	    break;
1353 
1354 	case '\014':	/* $^L */
1355 	    sv_setpvn(GvSVn(gv),"\f",1);
1356 	    PL_formfeed = GvSVn(gv);
1357 	    break;
1358 	case ';':
1359 	    sv_setpvn(GvSVn(gv),"\034",1);
1360 	    break;
1361 	case ']':
1362 	{
1363 	    SV * const sv = GvSVn(gv);
1364 	    if (!sv_derived_from(PL_patchlevel, "version"))
1365 		upg_version(PL_patchlevel, TRUE);
1366 	    GvSV(gv) = vnumify(PL_patchlevel);
1367 	    SvREADONLY_on(GvSV(gv));
1368 	    SvREFCNT_dec(sv);
1369 	}
1370 	break;
1371 	case '\026':	/* $^V */
1372 	{
1373 	    SV * const sv = GvSVn(gv);
1374 	    GvSV(gv) = new_version(PL_patchlevel);
1375 	    SvREADONLY_on(GvSV(gv));
1376 	    SvREFCNT_dec(sv);
1377 	}
1378 	break;
1379 	}
1380     }
1381     return gv;
1382 }
1383 
1384 void
1385 Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1386 {
1387     const char *name;
1388     STRLEN namelen;
1389     const HV * const hv = GvSTASH(gv);
1390     if (!hv) {
1391 	SvOK_off(sv);
1392 	return;
1393     }
1394     sv_setpv(sv, prefix ? prefix : "");
1395 
1396     name = HvNAME_get(hv);
1397     if (name) {
1398 	namelen = HvNAMELEN_get(hv);
1399     } else {
1400 	name = "__ANON__";
1401 	namelen = 8;
1402     }
1403 
1404     if (keepmain || strNE(name, "main")) {
1405 	sv_catpvn(sv,name,namelen);
1406 	sv_catpvs(sv,"::");
1407     }
1408     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1409 }
1410 
1411 void
1412 Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1413 {
1414     const GV * const egv = GvEGV(gv);
1415     gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
1416 }
1417 
1418 IO *
1419 Perl_newIO(pTHX)
1420 {
1421     dVAR;
1422     GV *iogv;
1423     IO * const io = (IO*)newSV_type(SVt_PVIO);
1424     /* This used to read SvREFCNT(io) = 1;
1425        It's not clear why the reference count needed an explicit reset. NWC
1426     */
1427     assert (SvREFCNT(io) == 1);
1428     SvOBJECT_on(io);
1429     /* Clear the stashcache because a new IO could overrule a package name */
1430     hv_clear(PL_stashcache);
1431     iogv = gv_fetchpvs("FileHandle::", 0, SVt_PVHV);
1432     /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1433     if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1434       iogv = gv_fetchpvs("IO::Handle::", GV_ADD, SVt_PVHV);
1435     SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
1436     return io;
1437 }
1438 
1439 void
1440 Perl_gv_check(pTHX_ const HV *stash)
1441 {
1442     dVAR;
1443     register I32 i;
1444 
1445     if (!HvARRAY(stash))
1446 	return;
1447     for (i = 0; i <= (I32) HvMAX(stash); i++) {
1448         const HE *entry;
1449 	for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1450             register GV *gv;
1451             HV *hv;
1452 	    if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1453 		(gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
1454 	    {
1455 		if (hv != PL_defstash && hv != stash)
1456 		     gv_check(hv);              /* nested package */
1457 	    }
1458 	    else if (isALPHA(*HeKEY(entry))) {
1459                 const char *file;
1460 		gv = (GV*)HeVAL(entry);
1461 		if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1462 		    continue;
1463 		file = GvFILE(gv);
1464 		CopLINE_set(PL_curcop, GvLINE(gv));
1465 #ifdef USE_ITHREADS
1466 		CopFILE(PL_curcop) = (char *)file;	/* set for warning */
1467 #else
1468 		CopFILEGV(PL_curcop)
1469 		    = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
1470 #endif
1471 		Perl_warner(aTHX_ packWARN(WARN_ONCE),
1472 			"Name \"%s::%s\" used only once: possible typo",
1473 			HvNAME_get(stash), GvNAME(gv));
1474 	    }
1475 	}
1476     }
1477 }
1478 
1479 GV *
1480 Perl_newGVgen(pTHX_ const char *pack)
1481 {
1482     dVAR;
1483     return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1484 		      GV_ADD, SVt_PVGV);
1485 }
1486 
1487 /* hopefully this is only called on local symbol table entries */
1488 
1489 GP*
1490 Perl_gp_ref(pTHX_ GP *gp)
1491 {
1492     dVAR;
1493     if (!gp)
1494 	return NULL;
1495     gp->gp_refcnt++;
1496     if (gp->gp_cv) {
1497 	if (gp->gp_cvgen) {
1498 	    /* If the GP they asked for a reference to contains
1499                a method cache entry, clear it first, so that we
1500                don't infect them with our cached entry */
1501 	    SvREFCNT_dec(gp->gp_cv);
1502 	    gp->gp_cv = NULL;
1503 	    gp->gp_cvgen = 0;
1504 	}
1505     }
1506     return gp;
1507 }
1508 
1509 void
1510 Perl_gp_free(pTHX_ GV *gv)
1511 {
1512     dVAR;
1513     GP* gp;
1514 
1515     if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
1516 	return;
1517     if (gp->gp_refcnt == 0) {
1518 	if (ckWARN_d(WARN_INTERNAL))
1519 	    Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1520 			"Attempt to free unreferenced glob pointers"
1521                         pTHX__FORMAT pTHX__VALUE);
1522         return;
1523     }
1524     if (--gp->gp_refcnt > 0) {
1525 	if (gp->gp_egv == gv)
1526 	    gp->gp_egv = 0;
1527 	GvGP(gv) = 0;
1528         return;
1529     }
1530 
1531     if (gp->gp_file_hek)
1532 	unshare_hek(gp->gp_file_hek);
1533     SvREFCNT_dec(gp->gp_sv);
1534     SvREFCNT_dec(gp->gp_av);
1535     /* FIXME - another reference loop GV -> symtab -> GV ?
1536        Somehow gp->gp_hv can end up pointing at freed garbage.  */
1537     if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
1538 	const char *hvname = HvNAME_get(gp->gp_hv);
1539 	if (PL_stashcache && hvname)
1540 	    (void)hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
1541 		      G_DISCARD);
1542 	SvREFCNT_dec(gp->gp_hv);
1543     }
1544     SvREFCNT_dec(gp->gp_io);
1545     SvREFCNT_dec(gp->gp_cv);
1546     SvREFCNT_dec(gp->gp_form);
1547 
1548     Safefree(gp);
1549     GvGP(gv) = 0;
1550 }
1551 
1552 int
1553 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1554 {
1555     AMT * const amtp = (AMT*)mg->mg_ptr;
1556     PERL_UNUSED_ARG(sv);
1557 
1558     if (amtp && AMT_AMAGIC(amtp)) {
1559 	int i;
1560 	for (i = 1; i < NofAMmeth; i++) {
1561 	    CV * const cv = amtp->table[i];
1562 	    if (cv) {
1563 		SvREFCNT_dec((SV *) cv);
1564 		amtp->table[i] = NULL;
1565 	    }
1566 	}
1567     }
1568  return 0;
1569 }
1570 
1571 /* Updates and caches the CV's */
1572 
1573 bool
1574 Perl_Gv_AMupdate(pTHX_ HV *stash)
1575 {
1576   dVAR;
1577   MAGIC* const mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1578   AMT amt;
1579   const struct mro_meta* stash_meta = HvMROMETA(stash);
1580   U32 newgen;
1581 
1582   newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
1583   if (mg) {
1584       const AMT * const amtp = (AMT*)mg->mg_ptr;
1585       if (amtp->was_ok_am == PL_amagic_generation
1586 	  && amtp->was_ok_sub == newgen) {
1587 	  return (bool)AMT_OVERLOADED(amtp);
1588       }
1589       sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1590   }
1591 
1592   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
1593 
1594   Zero(&amt,1,AMT);
1595   amt.was_ok_am = PL_amagic_generation;
1596   amt.was_ok_sub = newgen;
1597   amt.fallback = AMGfallNO;
1598   amt.flags = 0;
1599 
1600   {
1601     int filled = 0, have_ovl = 0;
1602     int i, lim = 1;
1603 
1604     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1605 
1606     /* Try to find via inheritance. */
1607     GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1608     SV * const sv = gv ? GvSV(gv) : NULL;
1609     CV* cv;
1610 
1611     if (!gv)
1612 	lim = DESTROY_amg;		/* Skip overloading entries. */
1613 #ifdef PERL_DONT_CREATE_GVSV
1614     else if (!sv) {
1615 	NOOP;   /* Equivalent to !SvTRUE and !SvOK  */
1616     }
1617 #endif
1618     else if (SvTRUE(sv))
1619 	amt.fallback=AMGfallYES;
1620     else if (SvOK(sv))
1621 	amt.fallback=AMGfallNEVER;
1622 
1623     for (i = 1; i < lim; i++)
1624 	amt.table[i] = NULL;
1625     for (; i < NofAMmeth; i++) {
1626 	const char * const cooky = PL_AMG_names[i];
1627 	/* Human-readable form, for debugging: */
1628 	const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1629 	const STRLEN l = PL_AMG_namelens[i];
1630 
1631 	DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
1632 		     cp, HvNAME_get(stash)) );
1633 	/* don't fill the cache while looking up!
1634 	   Creation of inheritance stubs in intermediate packages may
1635 	   conflict with the logic of runtime method substitution.
1636 	   Indeed, for inheritance A -> B -> C, if C overloads "+0",
1637 	   then we could have created stubs for "(+0" in A and C too.
1638 	   But if B overloads "bool", we may want to use it for
1639 	   numifying instead of C's "+0". */
1640 	if (i >= DESTROY_amg)
1641 	    gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1642 	else				/* Autoload taken care of below */
1643 	    gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1644         cv = 0;
1645         if (gv && (cv = GvCV(gv))) {
1646 	    const char *hvname;
1647 	    if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1648 		&& strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
1649 		/* This is a hack to support autoloading..., while
1650 		   knowing *which* methods were declared as overloaded. */
1651 		/* GvSV contains the name of the method. */
1652 		GV *ngv = NULL;
1653 		SV *gvsv = GvSV(gv);
1654 
1655 		DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1656 			"\" for overloaded \"%s\" in package \"%.256s\"\n",
1657 			     (void*)GvSV(gv), cp, hvname) );
1658 		if (!gvsv || !SvPOK(gvsv)
1659 		    || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
1660 						       FALSE)))
1661 		{
1662 		    /* Can be an import stub (created by "can"). */
1663 		    const char * const name = (gvsv && SvPOK(gvsv)) ?  SvPVX_const(gvsv) : "???";
1664 		    Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1665 				"in package \"%.256s\"",
1666 			       (GvCVGEN(gv) ? "Stub found while resolving"
1667 				: "Can't resolve"),
1668 			       name, cp, hvname);
1669 		}
1670 		cv = GvCV(gv = ngv);
1671 	    }
1672 	    DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
1673 			 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
1674 			 GvNAME(CvGV(cv))) );
1675 	    filled = 1;
1676 	    if (i < DESTROY_amg)
1677 		have_ovl = 1;
1678 	} else if (gv) {		/* Autoloaded... */
1679 	    cv = (CV*)gv;
1680 	    filled = 1;
1681 	}
1682 	amt.table[i]=(CV*)SvREFCNT_inc_simple(cv);
1683     }
1684     if (filled) {
1685       AMT_AMAGIC_on(&amt);
1686       if (have_ovl)
1687 	  AMT_OVERLOADED_on(&amt);
1688       sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1689 						(char*)&amt, sizeof(AMT));
1690       return have_ovl;
1691     }
1692   }
1693   /* Here we have no table: */
1694   /* no_table: */
1695   AMT_AMAGIC_off(&amt);
1696   sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1697 						(char*)&amt, sizeof(AMTS));
1698   return FALSE;
1699 }
1700 
1701 
1702 CV*
1703 Perl_gv_handler(pTHX_ HV *stash, I32 id)
1704 {
1705     dVAR;
1706     MAGIC *mg;
1707     AMT *amtp;
1708     U32 newgen;
1709     struct mro_meta* stash_meta;
1710 
1711     if (!stash || !HvNAME_get(stash))
1712         return NULL;
1713 
1714     stash_meta = HvMROMETA(stash);
1715     newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
1716 
1717     mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1718     if (!mg) {
1719       do_update:
1720 	Gv_AMupdate(stash);
1721 	mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1722     }
1723     assert(mg);
1724     amtp = (AMT*)mg->mg_ptr;
1725     if ( amtp->was_ok_am != PL_amagic_generation
1726 	 || amtp->was_ok_sub != newgen )
1727 	goto do_update;
1728     if (AMT_AMAGIC(amtp)) {
1729 	CV * const ret = amtp->table[id];
1730 	if (ret && isGV(ret)) {		/* Autoloading stab */
1731 	    /* Passing it through may have resulted in a warning
1732 	       "Inherited AUTOLOAD for a non-method deprecated", since
1733 	       our caller is going through a function call, not a method call.
1734 	       So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1735 	    GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
1736 
1737 	    if (gv && GvCV(gv))
1738 		return GvCV(gv);
1739 	}
1740 	return ret;
1741     }
1742 
1743     return NULL;
1744 }
1745 
1746 
1747 SV*
1748 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1749 {
1750   dVAR;
1751   MAGIC *mg;
1752   CV *cv=NULL;
1753   CV **cvp=NULL, **ocvp=NULL;
1754   AMT *amtp=NULL, *oamtp=NULL;
1755   int off = 0, off1, lr = 0, notfound = 0;
1756   int postpr = 0, force_cpy = 0;
1757   int assign = AMGf_assign & flags;
1758   const int assignshift = assign ? 1 : 0;
1759 #ifdef DEBUGGING
1760   int fl=0;
1761 #endif
1762   HV* stash=NULL;
1763   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1764       && (stash = SvSTASH(SvRV(left)))
1765       && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1766       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1767 			? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1768 			: NULL))
1769       && ((cv = cvp[off=method+assignshift])
1770 	  || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1771 						          * usual method */
1772 		  (
1773 #ifdef DEBUGGING
1774 		   fl = 1,
1775 #endif
1776 		   cv = cvp[off=method])))) {
1777     lr = -1;			/* Call method for left argument */
1778   } else {
1779     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1780       int logic;
1781 
1782       /* look for substituted methods */
1783       /* In all the covered cases we should be called with assign==0. */
1784 	 switch (method) {
1785 	 case inc_amg:
1786 	   force_cpy = 1;
1787 	   if ((cv = cvp[off=add_ass_amg])
1788 	       || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1789 	     right = &PL_sv_yes; lr = -1; assign = 1;
1790 	   }
1791 	   break;
1792 	 case dec_amg:
1793 	   force_cpy = 1;
1794 	   if ((cv = cvp[off = subtr_ass_amg])
1795 	       || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1796 	     right = &PL_sv_yes; lr = -1; assign = 1;
1797 	   }
1798 	   break;
1799 	 case bool__amg:
1800 	   (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1801 	   break;
1802 	 case numer_amg:
1803 	   (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1804 	   break;
1805 	 case string_amg:
1806 	   (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1807 	   break;
1808          case not_amg:
1809            (void)((cv = cvp[off=bool__amg])
1810                   || (cv = cvp[off=numer_amg])
1811                   || (cv = cvp[off=string_amg]));
1812            postpr = 1;
1813            break;
1814 	 case copy_amg:
1815 	   {
1816 	     /*
1817 		  * SV* ref causes confusion with the interpreter variable of
1818 		  * the same name
1819 		  */
1820 	     SV* const tmpRef=SvRV(left);
1821 	     if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1822 		/*
1823 		 * Just to be extra cautious.  Maybe in some
1824 		 * additional cases sv_setsv is safe, too.
1825 		 */
1826 		SV* const newref = newSVsv(tmpRef);
1827 		SvOBJECT_on(newref);
1828 		/* As a bit of a source compatibility hack, SvAMAGIC() and
1829 		   friends dereference an RV, to behave the same was as when
1830 		   overloading was stored on the reference, not the referant.
1831 		   Hence we can't use SvAMAGIC_on()
1832 		*/
1833 		SvFLAGS(newref) |= SVf_AMAGIC;
1834 		SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
1835 		return newref;
1836 	     }
1837 	   }
1838 	   break;
1839 	 case abs_amg:
1840 	   if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1841 	       && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1842 	     SV* const nullsv=sv_2mortal(newSViv(0));
1843 	     if (off1==lt_amg) {
1844 	       SV* const lessp = amagic_call(left,nullsv,
1845 				       lt_amg,AMGf_noright);
1846 	       logic = SvTRUE(lessp);
1847 	     } else {
1848 	       SV* const lessp = amagic_call(left,nullsv,
1849 				       ncmp_amg,AMGf_noright);
1850 	       logic = (SvNV(lessp) < 0);
1851 	     }
1852 	     if (logic) {
1853 	       if (off==subtr_amg) {
1854 		 right = left;
1855 		 left = nullsv;
1856 		 lr = 1;
1857 	       }
1858 	     } else {
1859 	       return left;
1860 	     }
1861 	   }
1862 	   break;
1863 	 case neg_amg:
1864 	   if ((cv = cvp[off=subtr_amg])) {
1865 	     right = left;
1866 	     left = sv_2mortal(newSViv(0));
1867 	     lr = 1;
1868 	   }
1869 	   break;
1870 	 case int_amg:
1871 	 case iter_amg:			/* XXXX Eventually should do to_gv. */
1872 	     /* FAIL safe */
1873 	     return NULL;	/* Delegate operation to standard mechanisms. */
1874 	     break;
1875 	 case to_sv_amg:
1876 	 case to_av_amg:
1877 	 case to_hv_amg:
1878 	 case to_gv_amg:
1879 	 case to_cv_amg:
1880 	     /* FAIL safe */
1881 	     return left;	/* Delegate operation to standard mechanisms. */
1882 	     break;
1883 	 default:
1884 	   goto not_found;
1885 	 }
1886 	 if (!cv) goto not_found;
1887     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1888 	       && (stash = SvSTASH(SvRV(right)))
1889 	       && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1890 	       && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1891 			  ? (amtp = (AMT*)mg->mg_ptr)->table
1892 			  : NULL))
1893 	       && (cv = cvp[off=method])) { /* Method for right
1894 					     * argument found */
1895       lr=1;
1896     } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1897 		 && (cvp=ocvp) && (lr = -1))
1898 		|| (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1899 	       && !(flags & AMGf_unary)) {
1900 				/* We look for substitution for
1901 				 * comparison operations and
1902 				 * concatenation */
1903       if (method==concat_amg || method==concat_ass_amg
1904 	  || method==repeat_amg || method==repeat_ass_amg) {
1905 	return NULL;		/* Delegate operation to string conversion */
1906       }
1907       off = -1;
1908       switch (method) {
1909 	 case lt_amg:
1910 	 case le_amg:
1911 	 case gt_amg:
1912 	 case ge_amg:
1913 	 case eq_amg:
1914 	 case ne_amg:
1915 	   postpr = 1; off=ncmp_amg; break;
1916 	 case slt_amg:
1917 	 case sle_amg:
1918 	 case sgt_amg:
1919 	 case sge_amg:
1920 	 case seq_amg:
1921 	 case sne_amg:
1922 	   postpr = 1; off=scmp_amg; break;
1923 	 }
1924       if (off != -1) cv = cvp[off];
1925       if (!cv) {
1926 	goto not_found;
1927       }
1928     } else {
1929     not_found:			/* No method found, either report or croak */
1930       switch (method) {
1931 	 case lt_amg:
1932 	 case le_amg:
1933 	 case gt_amg:
1934 	 case ge_amg:
1935 	 case eq_amg:
1936 	 case ne_amg:
1937 	 case slt_amg:
1938 	 case sle_amg:
1939 	 case sgt_amg:
1940 	 case sge_amg:
1941 	 case seq_amg:
1942 	 case sne_amg:
1943 	   postpr = 0; break;
1944 	 case to_sv_amg:
1945 	 case to_av_amg:
1946 	 case to_hv_amg:
1947 	 case to_gv_amg:
1948 	 case to_cv_amg:
1949 	     /* FAIL safe */
1950 	     return left;	/* Delegate operation to standard mechanisms. */
1951 	     break;
1952       }
1953       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1954 	notfound = 1; lr = -1;
1955       } else if (cvp && (cv=cvp[nomethod_amg])) {
1956 	notfound = 1; lr = 1;
1957       } else if ((amtp && amtp->fallback >= AMGfallYES) && !DEBUG_o_TEST) {
1958 	/* Skip generating the "no method found" message.  */
1959 	return NULL;
1960       } else {
1961 	SV *msg;
1962 	if (off==-1) off=method;
1963 	msg = sv_2mortal(Perl_newSVpvf(aTHX_
1964 		      "Operation \"%s\": no method found,%sargument %s%s%s%s",
1965 		      AMG_id2name(method + assignshift),
1966 		      (flags & AMGf_unary ? " " : "\n\tleft "),
1967 		      SvAMAGIC(left)?
1968 		        "in overloaded package ":
1969 		        "has no overloaded magic",
1970 		      SvAMAGIC(left)?
1971 		        HvNAME_get(SvSTASH(SvRV(left))):
1972 		        "",
1973 		      SvAMAGIC(right)?
1974 		        ",\n\tright argument in overloaded package ":
1975 		        (flags & AMGf_unary
1976 			 ? ""
1977 			 : ",\n\tright argument has no overloaded magic"),
1978 		      SvAMAGIC(right)?
1979 		        HvNAME_get(SvSTASH(SvRV(right))):
1980 		        ""));
1981 	if (amtp && amtp->fallback >= AMGfallYES) {
1982 	  DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
1983 	} else {
1984 	  Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
1985 	}
1986 	return NULL;
1987       }
1988       force_cpy = force_cpy || assign;
1989     }
1990   }
1991 #ifdef DEBUGGING
1992   if (!notfound) {
1993     DEBUG_o(Perl_deb(aTHX_
1994 		     "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1995 		     AMG_id2name(off),
1996 		     method+assignshift==off? "" :
1997 		     " (initially \"",
1998 		     method+assignshift==off? "" :
1999 		     AMG_id2name(method+assignshift),
2000 		     method+assignshift==off? "" : "\")",
2001 		     flags & AMGf_unary? "" :
2002 		     lr==1 ? " for right argument": " for left argument",
2003 		     flags & AMGf_unary? " for argument" : "",
2004 		     stash ? HvNAME_get(stash) : "null",
2005 		     fl? ",\n\tassignment variant used": "") );
2006   }
2007 #endif
2008     /* Since we use shallow copy during assignment, we need
2009      * to dublicate the contents, probably calling user-supplied
2010      * version of copy operator
2011      */
2012     /* We need to copy in following cases:
2013      * a) Assignment form was called.
2014      * 		assignshift==1,  assign==T, method + 1 == off
2015      * b) Increment or decrement, called directly.
2016      * 		assignshift==0,  assign==0, method + 0 == off
2017      * c) Increment or decrement, translated to assignment add/subtr.
2018      * 		assignshift==0,  assign==T,
2019      *		force_cpy == T
2020      * d) Increment or decrement, translated to nomethod.
2021      * 		assignshift==0,  assign==0,
2022      *		force_cpy == T
2023      * e) Assignment form translated to nomethod.
2024      * 		assignshift==1,  assign==T, method + 1 != off
2025      *		force_cpy == T
2026      */
2027     /*	off is method, method+assignshift, or a result of opcode substitution.
2028      *	In the latter case assignshift==0, so only notfound case is important.
2029      */
2030   if (( (method + assignshift == off)
2031 	&& (assign || (method == inc_amg) || (method == dec_amg)))
2032       || force_cpy)
2033     RvDEEPCP(left);
2034   {
2035     dSP;
2036     BINOP myop;
2037     SV* res;
2038     const bool oldcatch = CATCH_GET;
2039 
2040     CATCH_SET(TRUE);
2041     Zero(&myop, 1, BINOP);
2042     myop.op_last = (OP *) &myop;
2043     myop.op_next = NULL;
2044     myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
2045 
2046     PUSHSTACKi(PERLSI_OVERLOAD);
2047     ENTER;
2048     SAVEOP();
2049     PL_op = (OP *) &myop;
2050     if (PERLDB_SUB && PL_curstash != PL_debstash)
2051 	PL_op->op_private |= OPpENTERSUB_DB;
2052     PUTBACK;
2053     pp_pushmark();
2054 
2055     EXTEND(SP, notfound + 5);
2056     PUSHs(lr>0? right: left);
2057     PUSHs(lr>0? left: right);
2058     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
2059     if (notfound) {
2060       PUSHs( sv_2mortal(newSVpvn(AMG_id2name(method + assignshift),
2061 				 AMG_id2namelen(method + assignshift))));
2062     }
2063     PUSHs((SV*)cv);
2064     PUTBACK;
2065 
2066     if ((PL_op = Perl_pp_entersub(aTHX)))
2067       CALLRUNOPS(aTHX);
2068     LEAVE;
2069     SPAGAIN;
2070 
2071     res=POPs;
2072     PUTBACK;
2073     POPSTACK;
2074     CATCH_SET(oldcatch);
2075 
2076     if (postpr) {
2077       int ans;
2078       switch (method) {
2079       case le_amg:
2080       case sle_amg:
2081 	ans=SvIV(res)<=0; break;
2082       case lt_amg:
2083       case slt_amg:
2084 	ans=SvIV(res)<0; break;
2085       case ge_amg:
2086       case sge_amg:
2087 	ans=SvIV(res)>=0; break;
2088       case gt_amg:
2089       case sgt_amg:
2090 	ans=SvIV(res)>0; break;
2091       case eq_amg:
2092       case seq_amg:
2093 	ans=SvIV(res)==0; break;
2094       case ne_amg:
2095       case sne_amg:
2096 	ans=SvIV(res)!=0; break;
2097       case inc_amg:
2098       case dec_amg:
2099 	SvSetSV(left,res); return left;
2100       case not_amg:
2101 	ans=!SvTRUE(res); break;
2102       default:
2103         ans=0; break;
2104       }
2105       return boolSV(ans);
2106     } else if (method==copy_amg) {
2107       if (!SvROK(res)) {
2108 	Perl_croak(aTHX_ "Copy method did not return a reference");
2109       }
2110       return SvREFCNT_inc(SvRV(res));
2111     } else {
2112       return res;
2113     }
2114   }
2115 }
2116 
2117 /*
2118 =for apidoc is_gv_magical_sv
2119 
2120 Returns C<TRUE> if given the name of a magical GV. Calls is_gv_magical.
2121 
2122 =cut
2123 */
2124 
2125 bool
2126 Perl_is_gv_magical_sv(pTHX_ SV *name, U32 flags)
2127 {
2128     STRLEN len;
2129     const char * const temp = SvPV_const(name, len);
2130     return is_gv_magical(temp, len, flags);
2131 }
2132 
2133 /*
2134 =for apidoc is_gv_magical
2135 
2136 Returns C<TRUE> if given the name of a magical GV.
2137 
2138 Currently only useful internally when determining if a GV should be
2139 created even in rvalue contexts.
2140 
2141 C<flags> is not used at present but available for future extension to
2142 allow selecting particular classes of magical variable.
2143 
2144 Currently assumes that C<name> is NUL terminated (as well as len being valid).
2145 This assumption is met by all callers within the perl core, which all pass
2146 pointers returned by SvPV.
2147 
2148 =cut
2149 */
2150 bool
2151 Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags)
2152 {
2153     PERL_UNUSED_CONTEXT;
2154     PERL_UNUSED_ARG(flags);
2155 
2156     if (len > 1) {
2157 	const char * const name1 = name + 1;
2158 	switch (*name) {
2159 	case 'I':
2160 	    if (len == 3 && name1[1] == 'S' && name[2] == 'A')
2161 		goto yes;
2162 	    break;
2163 	case 'O':
2164 	    if (len == 8 && strEQ(name1, "VERLOAD"))
2165 		goto yes;
2166 	    break;
2167 	case 'S':
2168 	    if (len == 3 && name[1] == 'I' && name[2] == 'G')
2169 		goto yes;
2170 	    break;
2171 	    /* Using ${^...} variables is likely to be sufficiently rare that
2172 	       it seems sensible to avoid the space hit of also checking the
2173 	       length.  */
2174 	case '\017':   /* ${^OPEN} */
2175 	    if (strEQ(name1, "PEN"))
2176 		goto yes;
2177 	    break;
2178 	case '\024':   /* ${^TAINT} */
2179 	    if (strEQ(name1, "AINT"))
2180 		goto yes;
2181 	    break;
2182 	case '\025':	/* ${^UNICODE} */
2183 	    if (strEQ(name1, "NICODE"))
2184 		goto yes;
2185 	    if (strEQ(name1, "TF8LOCALE"))
2186 		goto yes;
2187 	    break;
2188 	case '\027':   /* ${^WARNING_BITS} */
2189 	    if (strEQ(name1, "ARNING_BITS"))
2190 		goto yes;
2191 	    break;
2192 	case '1':
2193 	case '2':
2194 	case '3':
2195 	case '4':
2196 	case '5':
2197 	case '6':
2198 	case '7':
2199 	case '8':
2200 	case '9':
2201 	{
2202 	    const char *end = name + len;
2203 	    while (--end > name) {
2204 		if (!isDIGIT(*end))
2205 		    return FALSE;
2206 	    }
2207 	    goto yes;
2208 	}
2209 	}
2210     } else {
2211 	/* Because we're already assuming that name is NUL terminated
2212 	   below, we can treat an empty name as "\0"  */
2213 	switch (*name) {
2214 	case '&':
2215 	case '`':
2216 	case '\'':
2217 	case ':':
2218 	case '?':
2219 	case '!':
2220 	case '-':
2221 	case '#':
2222 	case '[':
2223 	case '^':
2224 	case '~':
2225 	case '=':
2226 	case '%':
2227 	case '.':
2228 	case '(':
2229 	case ')':
2230 	case '<':
2231 	case '>':
2232 	case ',':
2233 	case '\\':
2234 	case '/':
2235 	case '|':
2236 	case '+':
2237 	case ';':
2238 	case ']':
2239 	case '\001':   /* $^A */
2240 	case '\003':   /* $^C */
2241 	case '\004':   /* $^D */
2242 	case '\005':   /* $^E */
2243 	case '\006':   /* $^F */
2244 	case '\010':   /* $^H */
2245 	case '\011':   /* $^I, NOT \t in EBCDIC */
2246 	case '\014':   /* $^L */
2247 	case '\016':   /* $^N */
2248 	case '\017':   /* $^O */
2249 	case '\020':   /* $^P */
2250 	case '\023':   /* $^S */
2251 	case '\024':   /* $^T */
2252 	case '\026':   /* $^V */
2253 	case '\027':   /* $^W */
2254 	case '1':
2255 	case '2':
2256 	case '3':
2257 	case '4':
2258 	case '5':
2259 	case '6':
2260 	case '7':
2261 	case '8':
2262 	case '9':
2263 	yes:
2264 	    return TRUE;
2265 	default:
2266 	    break;
2267 	}
2268     }
2269     return FALSE;
2270 }
2271 
2272 void
2273 Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
2274 {
2275     dVAR;
2276     U32 hash;
2277 
2278     assert(name);
2279     PERL_UNUSED_ARG(flags);
2280 
2281     if (len > I32_MAX)
2282 	Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
2283 
2284     if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
2285 	unshare_hek(GvNAME_HEK(gv));
2286     }
2287 
2288     PERL_HASH(hash, name, len);
2289     GvNAME_HEK(gv) = share_hek(name, len, hash);
2290 }
2291 
2292 /*
2293  * Local variables:
2294  * c-indentation-style: bsd
2295  * c-basic-offset: 4
2296  * indent-tabs-mode: t
2297  * End:
2298  *
2299  * ex: set ts=8 sts=4 sw=4 noet:
2300  */
2301