xref: /openbsd/gnu/usr.bin/perl/gv.c (revision 79cd0b9a)
1 /*    gv.c
2  *
3  *    Copyright (c) 1991-2002, Larry Wall
4  *
5  *    You may distribute under the terms of either the GNU General Public
6  *    License or the Artistic License, as specified in the README file.
7  *
8  */
9 
10 /*
11  *   'Mercy!' cried Gandalf.  'If the giving of information is to be the cure
12  * of your inquisitiveness, I shall spend all the rest of my days answering
13  * you.  What more do you want to know?'
14  *   'The names of all the stars, and of all living things, and the whole
15  * history of Middle-earth and Over-heaven and of the Sundering Seas,'
16  * laughed Pippin.
17  */
18 
19 /*
20 =head1 GV Functions
21 */
22 
23 #include "EXTERN.h"
24 #define PERL_IN_GV_C
25 #include "perl.h"
26 
27 GV *
28 Perl_gv_AVadd(pTHX_ register GV *gv)
29 {
30     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
31 	Perl_croak(aTHX_ "Bad symbol for array");
32     if (!GvAV(gv))
33 	GvAV(gv) = newAV();
34     return gv;
35 }
36 
37 GV *
38 Perl_gv_HVadd(pTHX_ register GV *gv)
39 {
40     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
41 	Perl_croak(aTHX_ "Bad symbol for hash");
42     if (!GvHV(gv))
43 	GvHV(gv) = newHV();
44     return gv;
45 }
46 
47 GV *
48 Perl_gv_IOadd(pTHX_ register GV *gv)
49 {
50     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
51 	Perl_croak(aTHX_ "Bad symbol for filehandle");
52     if (!GvIOp(gv)) {
53 #ifdef GV_UNIQUE_CHECK
54         if (GvUNIQUE(gv)) {
55             Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
56         }
57 #endif
58 	GvIOp(gv) = newIO();
59     }
60     return gv;
61 }
62 
63 GV *
64 Perl_gv_fetchfile(pTHX_ const char *name)
65 {
66     char smallbuf[256];
67     char *tmpbuf;
68     STRLEN tmplen;
69     GV *gv;
70 
71     if (!PL_defstash)
72 	return Nullgv;
73 
74     tmplen = strlen(name) + 2;
75     if (tmplen < sizeof smallbuf)
76 	tmpbuf = smallbuf;
77     else
78 	New(603, tmpbuf, tmplen + 1, char);
79     /* This is where the debugger's %{"::_<$filename"} hash is created */
80     tmpbuf[0] = '_';
81     tmpbuf[1] = '<';
82     strcpy(tmpbuf + 2, name);
83     gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
84     if (!isGV(gv)) {
85 	gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
86 	sv_setpv(GvSV(gv), name);
87 	if (PERLDB_LINE)
88 	    hv_magic(GvHVn(gv_AVadd(gv)), Nullgv, PERL_MAGIC_dbfile);
89     }
90     if (tmpbuf != smallbuf)
91 	Safefree(tmpbuf);
92     return gv;
93 }
94 
95 void
96 Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
97 {
98     register GP *gp;
99     bool doproto = SvTYPE(gv) > SVt_NULL;
100     char *proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
101 
102     sv_upgrade((SV*)gv, SVt_PVGV);
103     if (SvLEN(gv)) {
104 	if (proto) {
105 	    SvPVX(gv) = NULL;
106 	    SvLEN(gv) = 0;
107 	    SvPOK_off(gv);
108 	} else
109 	    Safefree(SvPVX(gv));
110     }
111     Newz(602, gp, 1, GP);
112     GvGP(gv) = gp_ref(gp);
113     GvSV(gv) = NEWSV(72,0);
114     GvLINE(gv) = CopLINE(PL_curcop);
115     GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : "";
116     GvCVGEN(gv) = 0;
117     GvEGV(gv) = gv;
118     sv_magic((SV*)gv, (SV*)gv, PERL_MAGIC_glob, Nullch, 0);
119     GvSTASH(gv) = (HV*)SvREFCNT_inc(stash);
120     GvNAME(gv) = savepvn(name, len);
121     GvNAMELEN(gv) = len;
122     if (multi || doproto)              /* doproto means it _was_ mentioned */
123 	GvMULTI_on(gv);
124     if (doproto) {			/* Replicate part of newSUB here. */
125 	SvIOK_off(gv);
126 	ENTER;
127 	/* XXX unsafe for threads if eval_owner isn't held */
128 	start_subparse(0,0);		/* Create CV in compcv. */
129 	GvCV(gv) = PL_compcv;
130 	LEAVE;
131 
132 	PL_sub_generation++;
133 	CvGV(GvCV(gv)) = gv;
134 	CvFILE_set_from_cop(GvCV(gv), PL_curcop);
135 	CvSTASH(GvCV(gv)) = PL_curstash;
136 #ifdef USE_5005THREADS
137 	CvOWNER(GvCV(gv)) = 0;
138 	if (!CvMUTEXP(GvCV(gv))) {
139 	    New(666, CvMUTEXP(GvCV(gv)), 1, perl_mutex);
140 	    MUTEX_INIT(CvMUTEXP(GvCV(gv)));
141 	}
142 #endif /* USE_5005THREADS */
143 	if (proto) {
144 	    sv_setpv((SV*)GvCV(gv), proto);
145 	    Safefree(proto);
146 	}
147     }
148 }
149 
150 STATIC void
151 S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
152 {
153     switch (sv_type) {
154     case SVt_PVIO:
155 	(void)GvIOn(gv);
156 	break;
157     case SVt_PVAV:
158 	(void)GvAVn(gv);
159 	break;
160     case SVt_PVHV:
161 	(void)GvHVn(gv);
162 	break;
163     }
164 }
165 
166 /*
167 =for apidoc gv_fetchmeth
168 
169 Returns the glob with the given C<name> and a defined subroutine or
170 C<NULL>.  The glob lives in the given C<stash>, or in the stashes
171 accessible via @ISA and UNIVERSAL::.
172 
173 The argument C<level> should be either 0 or -1.  If C<level==0>, as a
174 side-effect creates a glob with the given C<name> in the given C<stash>
175 which in the case of success contains an alias for the subroutine, and sets
176 up caching info for this glob.  Similarly for all the searched stashes.
177 
178 This function grants C<"SUPER"> token as a postfix of the stash name. The
179 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
180 visible to Perl code.  So when calling C<call_sv>, you should not use
181 the GV directly; instead, you should use the method's CV, which can be
182 obtained from the GV with the C<GvCV> macro.
183 
184 =cut
185 */
186 
187 GV *
188 Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
189 {
190     AV* av;
191     GV* topgv;
192     GV* gv;
193     GV** gvp;
194     CV* cv;
195 
196     /* UNIVERSAL methods should be callable without a stash */
197     if (!stash) {
198 	level = -1;  /* probably appropriate */
199 	if(!(stash = gv_stashpvn("UNIVERSAL", 9, FALSE)))
200 	    return 0;
201     }
202 
203     if ((level > 100) || (level < -100))
204 	Perl_croak(aTHX_ "Recursive inheritance detected while looking for method '%s' in package '%s'",
205 	      name, HvNAME(stash));
206 
207     DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,HvNAME(stash)) );
208 
209     gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
210     if (!gvp)
211 	topgv = Nullgv;
212     else {
213 	topgv = *gvp;
214 	if (SvTYPE(topgv) != SVt_PVGV)
215 	    gv_init(topgv, stash, name, len, TRUE);
216 	if ((cv = GvCV(topgv))) {
217 	    /* If genuine method or valid cache entry, use it */
218 	    if (!GvCVGEN(topgv) || GvCVGEN(topgv) == PL_sub_generation)
219 		return topgv;
220 	    /* Stale cached entry: junk it */
221 	    SvREFCNT_dec(cv);
222 	    GvCV(topgv) = cv = Nullcv;
223 	    GvCVGEN(topgv) = 0;
224 	}
225 	else if (GvCVGEN(topgv) == PL_sub_generation)
226 	    return 0;  /* cache indicates sub doesn't exist */
227     }
228 
229     gvp = (GV**)hv_fetch(stash, "ISA", 3, FALSE);
230     av = (gvp && (gv = *gvp) && gv != (GV*)&PL_sv_undef) ? GvAV(gv) : Nullav;
231 
232     /* create and re-create @.*::SUPER::ISA on demand */
233     if (!av || !SvMAGIC(av)) {
234 	char* packname = HvNAME(stash);
235 	STRLEN packlen = strlen(packname);
236 
237 	if (packlen >= 7 && strEQ(packname + packlen - 7, "::SUPER")) {
238 	    HV* basestash;
239 
240 	    packlen -= 7;
241 	    basestash = gv_stashpvn(packname, packlen, TRUE);
242 	    gvp = (GV**)hv_fetch(basestash, "ISA", 3, FALSE);
243 	    if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
244 		gvp = (GV**)hv_fetch(stash, "ISA", 3, TRUE);
245 		if (!gvp || !(gv = *gvp))
246 		    Perl_croak(aTHX_ "Cannot create %s::ISA", HvNAME(stash));
247 		if (SvTYPE(gv) != SVt_PVGV)
248 		    gv_init(gv, stash, "ISA", 3, TRUE);
249 		SvREFCNT_dec(GvAV(gv));
250 		GvAV(gv) = (AV*)SvREFCNT_inc(av);
251 	    }
252 	}
253     }
254 
255     if (av) {
256 	SV** svp = AvARRAY(av);
257 	/* NOTE: No support for tied ISA */
258 	I32 items = AvFILLp(av) + 1;
259 	while (items--) {
260 	    SV* sv = *svp++;
261 	    HV* basestash = gv_stashsv(sv, FALSE);
262 	    if (!basestash) {
263 		if (ckWARN(WARN_MISC))
264 		    Perl_warner(aTHX_ packWARN(WARN_MISC), "Can't locate package %s for @%s::ISA",
265 			SvPVX(sv), HvNAME(stash));
266 		continue;
267 	    }
268 	    gv = gv_fetchmeth(basestash, name, len,
269 			      (level >= 0) ? level + 1 : level - 1);
270 	    if (gv)
271 		goto gotcha;
272 	}
273     }
274 
275     /* if at top level, try UNIVERSAL */
276 
277     if (level == 0 || level == -1) {
278 	HV* lastchance;
279 
280 	if ((lastchance = gv_stashpvn("UNIVERSAL", 9, FALSE))) {
281 	    if ((gv = gv_fetchmeth(lastchance, name, len,
282 				  (level >= 0) ? level + 1 : level - 1)))
283 	    {
284 	  gotcha:
285 		/*
286 		 * Cache method in topgv if:
287 		 *  1. topgv has no synonyms (else inheritance crosses wires)
288 		 *  2. method isn't a stub (else AUTOLOAD fails spectacularly)
289 		 */
290 		if (topgv &&
291 		    GvREFCNT(topgv) == 1 &&
292 		    (cv = GvCV(gv)) &&
293 		    (CvROOT(cv) || CvXSUB(cv)))
294 		{
295 		    if ((cv = GvCV(topgv)))
296 			SvREFCNT_dec(cv);
297 		    GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
298 		    GvCVGEN(topgv) = PL_sub_generation;
299 		}
300 		return gv;
301 	    }
302 	    else if (topgv && GvREFCNT(topgv) == 1) {
303 		/* cache the fact that the method is not defined */
304 		GvCVGEN(topgv) = PL_sub_generation;
305 	    }
306 	}
307     }
308 
309     return 0;
310 }
311 
312 /*
313 =for apidoc gv_fetchmeth_autoload
314 
315 Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
316 Returns a glob for the subroutine.
317 
318 For an autoloaded subroutine without a GV, will create a GV even
319 if C<level < 0>.  For an autoloaded subroutine without a stub, GvCV()
320 of the result may be zero.
321 
322 =cut
323 */
324 
325 GV *
326 Perl_gv_fetchmeth_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
327 {
328     GV *gv = gv_fetchmeth(stash, name, len, level);
329 
330     if (!gv) {
331 	char autoload[] = "AUTOLOAD";
332 	STRLEN autolen = sizeof(autoload)-1;
333 	CV *cv;
334 	GV **gvp;
335 
336 	if (!stash)
337 	    return Nullgv;	/* UNIVERSAL::AUTOLOAD could cause trouble */
338 	if (len == autolen && strnEQ(name, autoload, autolen))
339 	    return Nullgv;
340 	if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE)))
341 	    return Nullgv;
342 	cv = GvCV(gv);
343 	if (!(CvROOT(cv) || CvXSUB(cv)))
344 	    return Nullgv;
345 	/* Have an autoload */
346 	if (level < 0)	/* Cannot do without a stub */
347 	    gv_fetchmeth(stash, name, len, 0);
348 	gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
349 	if (!gvp)
350 	    return Nullgv;
351 	return *gvp;
352     }
353     return gv;
354 }
355 
356 /*
357 =for apidoc gv_fetchmethod
358 
359 See L<gv_fetchmethod_autoload>.
360 
361 =cut
362 */
363 
364 GV *
365 Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name)
366 {
367     return gv_fetchmethod_autoload(stash, name, TRUE);
368 }
369 
370 /*
371 =for apidoc gv_fetchmethod_autoload
372 
373 Returns the glob which contains the subroutine to call to invoke the method
374 on the C<stash>.  In fact in the presence of autoloading this may be the
375 glob for "AUTOLOAD".  In this case the corresponding variable $AUTOLOAD is
376 already setup.
377 
378 The third parameter of C<gv_fetchmethod_autoload> determines whether
379 AUTOLOAD lookup is performed if the given method is not present: non-zero
380 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
381 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
382 with a non-zero C<autoload> parameter.
383 
384 These functions grant C<"SUPER"> token as a prefix of the method name. Note
385 that if you want to keep the returned glob for a long time, you need to
386 check for it being "AUTOLOAD", since at the later time the call may load a
387 different subroutine due to $AUTOLOAD changing its value. Use the glob
388 created via a side effect to do this.
389 
390 These functions have the same side-effects and as C<gv_fetchmeth> with
391 C<level==0>.  C<name> should be writable if contains C<':'> or C<'
392 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
393 C<call_sv> apply equally to these functions.
394 
395 =cut
396 */
397 
398 GV *
399 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
400 {
401     register const char *nend;
402     const char *nsplit = 0;
403     GV* gv;
404 
405     for (nend = name; *nend; nend++) {
406 	if (*nend == '\'')
407 	    nsplit = nend;
408 	else if (*nend == ':' && *(nend + 1) == ':')
409 	    nsplit = ++nend;
410     }
411     if (nsplit) {
412 	const char *origname = name;
413 	name = nsplit + 1;
414 	if (*nsplit == ':')
415 	    --nsplit;
416 	if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
417 	    /* ->SUPER::method should really be looked up in original stash */
418 	    SV *tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
419 						  CopSTASHPV(PL_curcop)));
420 	    /* __PACKAGE__::SUPER stash should be autovivified */
421 	    stash = gv_stashpvn(SvPVX(tmpstr), SvCUR(tmpstr), TRUE);
422 	    DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
423 			 origname, HvNAME(stash), name) );
424 	}
425 	else {
426             /* don't autovifify if ->NoSuchStash::method */
427             stash = gv_stashpvn(origname, nsplit - origname, FALSE);
428 
429 	    /* however, explicit calls to Pkg::SUPER::method may
430 	       happen, and may require autovivification to work */
431 	    if (!stash && (nsplit - origname) >= 7 &&
432 		strnEQ(nsplit - 7, "::SUPER", 7) &&
433 		gv_stashpvn(origname, nsplit - origname - 7, FALSE))
434 	      stash = gv_stashpvn(origname, nsplit - origname, TRUE);
435 	}
436     }
437 
438     gv = gv_fetchmeth(stash, name, nend - name, 0);
439     if (!gv) {
440 	if (strEQ(name,"import") || strEQ(name,"unimport"))
441 	    gv = (GV*)&PL_sv_yes;
442 	else if (autoload)
443 	    gv = gv_autoload4(stash, name, nend - name, TRUE);
444     }
445     else if (autoload) {
446 	CV* cv = GvCV(gv);
447 	if (!CvROOT(cv) && !CvXSUB(cv)) {
448 	    GV* stubgv;
449 	    GV* autogv;
450 
451 	    if (CvANON(cv))
452 		stubgv = gv;
453 	    else {
454 		stubgv = CvGV(cv);
455 		if (GvCV(stubgv) != cv)		/* orphaned import */
456 		    stubgv = gv;
457 	    }
458 	    autogv = gv_autoload4(GvSTASH(stubgv),
459 				  GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
460 	    if (autogv)
461 		gv = autogv;
462 	}
463     }
464 
465     return gv;
466 }
467 
468 GV*
469 Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
470 {
471     char autoload[] = "AUTOLOAD";
472     STRLEN autolen = sizeof(autoload)-1;
473     GV* gv;
474     CV* cv;
475     HV* varstash;
476     GV* vargv;
477     SV* varsv;
478 
479     if (!stash)
480 	return Nullgv;	/* UNIVERSAL::AUTOLOAD could cause trouble */
481     if (len == autolen && strnEQ(name, autoload, autolen))
482 	return Nullgv;
483     if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE)))
484 	return Nullgv;
485     cv = GvCV(gv);
486 
487     if (!(CvROOT(cv) || CvXSUB(cv)))
488 	return Nullgv;
489 
490     /*
491      * Inheriting AUTOLOAD for non-methods works ... for now.
492      */
493     if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && !method &&
494 	(GvCVGEN(gv) || GvSTASH(gv) != stash))
495 	Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
496 	  "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
497 	     HvNAME(stash), (int)len, name);
498 
499 #ifndef USE_5005THREADS
500     if (CvXSUB(cv)) {
501         /* rather than lookup/init $AUTOLOAD here
502          * only to have the XSUB do another lookup for $AUTOLOAD
503          * and split that value on the last '::',
504          * pass along the same data via some unused fields in the CV
505          */
506         CvSTASH(cv) = stash;
507         SvPVX(cv) = (char *)name; /* cast to lose constness warning */
508         SvCUR(cv) = len;
509         return gv;
510     }
511 #endif
512 
513     /*
514      * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
515      * The subroutine's original name may not be "AUTOLOAD", so we don't
516      * use that, but for lack of anything better we will use the sub's
517      * original package to look up $AUTOLOAD.
518      */
519     varstash = GvSTASH(CvGV(cv));
520     vargv = *(GV**)hv_fetch(varstash, autoload, autolen, TRUE);
521     ENTER;
522 
523 #ifdef USE_5005THREADS
524     sv_lock((SV *)varstash);
525 #endif
526     if (!isGV(vargv))
527 	gv_init(vargv, varstash, autoload, autolen, FALSE);
528     LEAVE;
529     varsv = GvSV(vargv);
530 #ifdef USE_5005THREADS
531     sv_lock(varsv);
532 #endif
533     sv_setpv(varsv, HvNAME(stash));
534     sv_catpvn(varsv, "::", 2);
535     sv_catpvn(varsv, name, len);
536     SvTAINTED_off(varsv);
537     return gv;
538 }
539 
540 /* The "gv" parameter should be the glob known to Perl code as *!
541  * The scalar must already have been magicalized.
542  */
543 STATIC void
544 S_require_errno(pTHX_ GV *gv)
545 {
546     HV* stash = gv_stashpvn("Errno",5,FALSE);
547 
548     if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
549 	dSP;
550 	PUTBACK;
551 	ENTER;
552 	save_scalar(gv); /* keep the value of $! */
553         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
554                          newSVpvn("Errno",5), Nullsv);
555 	LEAVE;
556 	SPAGAIN;
557 	stash = gv_stashpvn("Errno",5,FALSE);
558 	if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
559 	    Perl_croak(aTHX_ "Can't use %%! because Errno.pm is not available");
560     }
561 }
562 
563 /*
564 =for apidoc gv_stashpv
565 
566 Returns a pointer to the stash for a specified package.  C<name> should
567 be a valid UTF-8 string.  If C<create> is set then the package will be
568 created if it does not already exist.  If C<create> is not set and the
569 package does not exist then NULL is returned.
570 
571 =cut
572 */
573 
574 HV*
575 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
576 {
577     return gv_stashpvn(name, strlen(name), create);
578 }
579 
580 HV*
581 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 create)
582 {
583     char smallbuf[256];
584     char *tmpbuf;
585     HV *stash;
586     GV *tmpgv;
587 
588     if (namelen + 3 < sizeof smallbuf)
589 	tmpbuf = smallbuf;
590     else
591 	New(606, tmpbuf, namelen + 3, char);
592     Copy(name,tmpbuf,namelen,char);
593     tmpbuf[namelen++] = ':';
594     tmpbuf[namelen++] = ':';
595     tmpbuf[namelen] = '\0';
596     tmpgv = gv_fetchpv(tmpbuf, create, SVt_PVHV);
597     if (tmpbuf != smallbuf)
598 	Safefree(tmpbuf);
599     if (!tmpgv)
600 	return 0;
601     if (!GvHV(tmpgv))
602 	GvHV(tmpgv) = newHV();
603     stash = GvHV(tmpgv);
604     if (!HvNAME(stash))
605 	HvNAME(stash) = savepv(name);
606     return stash;
607 }
608 
609 /*
610 =for apidoc gv_stashsv
611 
612 Returns a pointer to the stash for a specified package, which must be a
613 valid UTF-8 string.  See C<gv_stashpv>.
614 
615 =cut
616 */
617 
618 HV*
619 Perl_gv_stashsv(pTHX_ SV *sv, I32 create)
620 {
621     register char *ptr;
622     STRLEN len;
623     ptr = SvPV(sv,len);
624     return gv_stashpvn(ptr, len, create);
625 }
626 
627 
628 GV *
629 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type)
630 {
631     register const char *name = nambeg;
632     register GV *gv = 0;
633     GV**gvp;
634     I32 len;
635     register const char *namend;
636     HV *stash = 0;
637 
638     if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
639 	name++;
640 
641     for (namend = name; *namend; namend++) {
642 	if ((*namend == ':' && namend[1] == ':')
643 	    || (*namend == '\'' && namend[1]))
644 	{
645 	    if (!stash)
646 		stash = PL_defstash;
647 	    if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
648 		return Nullgv;
649 
650 	    len = namend - name;
651 	    if (len > 0) {
652 		char smallbuf[256];
653 		char *tmpbuf;
654 
655 		if (len + 3 < sizeof (smallbuf))
656 		    tmpbuf = smallbuf;
657 		else
658 		    New(601, tmpbuf, len+3, char);
659 		Copy(name, tmpbuf, len, char);
660 		tmpbuf[len++] = ':';
661 		tmpbuf[len++] = ':';
662 		tmpbuf[len] = '\0';
663 		gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
664 		gv = gvp ? *gvp : Nullgv;
665 		if (gv && gv != (GV*)&PL_sv_undef) {
666 		    if (SvTYPE(gv) != SVt_PVGV)
667 			gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
668 		    else
669 			GvMULTI_on(gv);
670 		}
671 		if (tmpbuf != smallbuf)
672 		    Safefree(tmpbuf);
673 		if (!gv || gv == (GV*)&PL_sv_undef)
674 		    return Nullgv;
675 
676 		if (!(stash = GvHV(gv)))
677 		    stash = GvHV(gv) = newHV();
678 
679 		if (!HvNAME(stash))
680 		    HvNAME(stash) = savepvn(nambeg, namend - nambeg);
681 	    }
682 
683 	    if (*namend == ':')
684 		namend++;
685 	    namend++;
686 	    name = namend;
687 	    if (!*name)
688 		return gv ? gv : (GV*)*hv_fetch(PL_defstash, "main::", 6, TRUE);
689 	}
690     }
691     len = namend - name;
692     if (!len)
693 	len = 1;
694 
695     /* No stash in name, so see how we can default */
696 
697     if (!stash) {
698 	if (isIDFIRST_lazy(name)) {
699 	    bool global = FALSE;
700 
701 	    if (isUPPER(*name)) {
702 		if (*name == 'S' && (
703 		    strEQ(name, "SIG") ||
704 		    strEQ(name, "STDIN") ||
705 		    strEQ(name, "STDOUT") ||
706 		    strEQ(name, "STDERR")))
707 		    global = TRUE;
708 		else if (*name == 'I' && strEQ(name, "INC"))
709 		    global = TRUE;
710 		else if (*name == 'E' && strEQ(name, "ENV"))
711 		    global = TRUE;
712 		else if (*name == 'A' && (
713 		  strEQ(name, "ARGV") ||
714 		  strEQ(name, "ARGVOUT")))
715 		    global = TRUE;
716 	    }
717 	    else if (*name == '_' && !name[1])
718 		global = TRUE;
719 
720 	    if (global)
721 		stash = PL_defstash;
722 	    else if ((COP*)PL_curcop == &PL_compiling) {
723 		stash = PL_curstash;
724 		if (add && (PL_hints & HINT_STRICT_VARS) &&
725 		    sv_type != SVt_PVCV &&
726 		    sv_type != SVt_PVGV &&
727 		    sv_type != SVt_PVFM &&
728 		    sv_type != SVt_PVIO &&
729 		    !(len == 1 && sv_type == SVt_PV && strchr("ab",*name)) )
730 		{
731 		    gvp = (GV**)hv_fetch(stash,name,len,0);
732 		    if (!gvp ||
733 			*gvp == (GV*)&PL_sv_undef ||
734 			SvTYPE(*gvp) != SVt_PVGV)
735 		    {
736 			stash = 0;
737 		    }
738 		    else if ((sv_type == SVt_PV   && !GvIMPORTED_SV(*gvp)) ||
739 			     (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
740 			     (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
741 		    {
742 			Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
743 			    sv_type == SVt_PVAV ? '@' :
744 			    sv_type == SVt_PVHV ? '%' : '$',
745 			    name);
746 			if (GvCVu(*gvp))
747 			    Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
748 			stash = 0;
749 		    }
750 		}
751 	    }
752 	    else
753 		stash = CopSTASH(PL_curcop);
754 	}
755 	else
756 	    stash = PL_defstash;
757     }
758 
759     /* By this point we should have a stash and a name */
760 
761     if (!stash) {
762 	if (add) {
763 	    qerror(Perl_mess(aTHX_
764 		 "Global symbol \"%s%s\" requires explicit package name",
765 		 (sv_type == SVt_PV ? "$"
766 		  : sv_type == SVt_PVAV ? "@"
767 		  : sv_type == SVt_PVHV ? "%"
768 		  : ""), name));
769 	    stash = PL_nullstash;
770 	}
771 	else
772 	    return Nullgv;
773     }
774 
775     if (!SvREFCNT(stash))	/* symbol table under destruction */
776 	return Nullgv;
777 
778     gvp = (GV**)hv_fetch(stash,name,len,add);
779     if (!gvp || *gvp == (GV*)&PL_sv_undef)
780 	return Nullgv;
781     gv = *gvp;
782     if (SvTYPE(gv) == SVt_PVGV) {
783 	if (add) {
784 	    GvMULTI_on(gv);
785 	    gv_init_sv(gv, sv_type);
786 	    if (*name=='!' && sv_type == SVt_PVHV && len==1)
787 		require_errno(gv);
788 	}
789 	return gv;
790     } else if (add & GV_NOINIT) {
791 	return gv;
792     }
793 
794     /* Adding a new symbol */
795 
796     if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
797 	Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
798     gv_init(gv, stash, name, len, add & GV_ADDMULTI);
799     gv_init_sv(gv, sv_type);
800 
801     if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
802 			                    : (PL_dowarn & G_WARN_ON ) ) )
803         GvMULTI_on(gv) ;
804 
805     /* set up magic where warranted */
806     switch (*name) {
807     case 'A':
808 	if (strEQ(name, "ARGV")) {
809 	    IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
810 	}
811 	break;
812     case 'E':
813 	if (strnEQ(name, "EXPORT", 6))
814 	    GvMULTI_on(gv);
815 	break;
816     case 'I':
817 	if (strEQ(name, "ISA")) {
818 	    AV* av = GvAVn(gv);
819 	    GvMULTI_on(gv);
820 	    sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
821 	    /* NOTE: No support for tied ISA */
822 	    if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
823 		&& AvFILLp(av) == -1)
824 	    {
825 		char *pname;
826 		av_push(av, newSVpvn(pname = "NDBM_File",9));
827 		gv_stashpvn(pname, 9, TRUE);
828 		av_push(av, newSVpvn(pname = "DB_File",7));
829 		gv_stashpvn(pname, 7, TRUE);
830 		av_push(av, newSVpvn(pname = "GDBM_File",9));
831 		gv_stashpvn(pname, 9, TRUE);
832 		av_push(av, newSVpvn(pname = "SDBM_File",9));
833 		gv_stashpvn(pname, 9, TRUE);
834 		av_push(av, newSVpvn(pname = "ODBM_File",9));
835 		gv_stashpvn(pname, 9, TRUE);
836 	    }
837 	}
838 	break;
839     case 'O':
840         if (strEQ(name, "OVERLOAD")) {
841             HV* hv = GvHVn(gv);
842             GvMULTI_on(gv);
843             hv_magic(hv, Nullgv, PERL_MAGIC_overload);
844         }
845         break;
846     case 'S':
847 	if (strEQ(name, "SIG")) {
848 	    HV *hv;
849 	    I32 i;
850 	    if (!PL_psig_ptr) {
851 		Newz(73, PL_psig_ptr,  SIG_SIZE, SV*);
852 		Newz(73, PL_psig_name, SIG_SIZE, SV*);
853 		Newz(73, PL_psig_pend, SIG_SIZE, int);
854 	    }
855 	    GvMULTI_on(gv);
856 	    hv = GvHVn(gv);
857 	    hv_magic(hv, Nullgv, PERL_MAGIC_sig);
858 	    for (i = 1; i < SIG_SIZE; i++) {
859 	    	SV ** init;
860 	    	init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
861 	    	if (init)
862 		    sv_setsv(*init, &PL_sv_undef);
863 	    	PL_psig_ptr[i] = 0;
864 	    	PL_psig_name[i] = 0;
865 	    	PL_psig_pend[i] = 0;
866 	    }
867 	}
868 	break;
869     case 'V':
870 	if (strEQ(name, "VERSION"))
871 	    GvMULTI_on(gv);
872 	break;
873 
874     case '&':
875     case '`':
876     case '\'':
877        if (
878            len > 1 ||
879            sv_type == SVt_PVAV ||
880            sv_type == SVt_PVHV ||
881            sv_type == SVt_PVCV ||
882            sv_type == SVt_PVFM ||
883            sv_type == SVt_PVIO
884        ) { break; }
885 	PL_sawampersand = TRUE;
886 	goto ro_magicalize;
887 
888     case ':':
889 	if (len > 1)
890 	    break;
891 	sv_setpv(GvSV(gv),PL_chopset);
892 	goto magicalize;
893 
894     case '?':
895 	if (len > 1)
896 	    break;
897 #ifdef COMPLEX_STATUS
898 	(void)SvUPGRADE(GvSV(gv), SVt_PVLV);
899 #endif
900 	goto magicalize;
901 
902     case '!':
903 	if (len > 1)
904 	    break;
905 
906 	/* If %! has been used, automatically load Errno.pm.
907 	   The require will itself set errno, so in order to
908 	   preserve its value we have to set up the magic
909 	   now (rather than going to magicalize)
910 	*/
911 
912 	sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
913 
914 	if (sv_type == SVt_PVHV)
915 	    require_errno(gv);
916 
917 	break;
918     case '-':
919 	if (len > 1)
920 	    break;
921 	else {
922             AV* av = GvAVn(gv);
923             sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
924 	    SvREADONLY_on(av);
925         }
926 	goto magicalize;
927     case '#':
928     case '*':
929 	if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && len == 1 && sv_type == SVt_PV)
930 	    Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX), "Use of $%s is deprecated", name);
931 	/* FALL THROUGH */
932     case '[':
933     case '^':
934     case '~':
935     case '=':
936     case '%':
937     case '.':
938     case '(':
939     case ')':
940     case '<':
941     case '>':
942     case ',':
943     case '\\':
944     case '/':
945     case '\001':	/* $^A */
946     case '\003':	/* $^C */
947     case '\004':	/* $^D */
948     case '\006':	/* $^F */
949     case '\010':	/* $^H */
950     case '\011':	/* $^I, NOT \t in EBCDIC */
951     case '\016':        /* $^N */
952     case '\020':	/* $^P */
953 	if (len > 1)
954 	    break;
955 	goto magicalize;
956     case '|':
957 	if (len > 1)
958 	    break;
959 	sv_setiv(GvSV(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
960 	goto magicalize;
961     case '\005':	/* $^E && $^ENCODING */
962 	if (len > 1 && strNE(name, "\005NCODING"))
963 	    break;
964 	goto magicalize;
965 
966     case '\017':	/* $^O & $^OPEN */
967 	if (len > 1 && strNE(name, "\017PEN"))
968 	    break;
969 	goto magicalize;
970     case '\023':	/* $^S */
971 	if (len > 1)
972 	    break;
973 	goto ro_magicalize;
974     case '\024':	/* $^T, ${^TAINT} */
975         if (len == 1)
976             goto magicalize;
977         else if (strEQ(name, "\024AINT"))
978             goto ro_magicalize;
979         else
980             break;
981     case '\027':	/* $^W & $^WARNING_BITS */
982 	if (len > 1 && strNE(name, "\027ARNING_BITS")
983 	    && strNE(name, "\027IDE_SYSTEM_CALLS"))
984 	    break;
985 	goto magicalize;
986 
987     case '+':
988 	if (len > 1)
989 	    break;
990 	else {
991             AV* av = GvAVn(gv);
992             sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
993 	    SvREADONLY_on(av);
994         }
995 	/* FALL THROUGH */
996     case '1':
997     case '2':
998     case '3':
999     case '4':
1000     case '5':
1001     case '6':
1002     case '7':
1003     case '8':
1004     case '9':
1005 	/* ensures variable is only digits */
1006 	/* ${"1foo"} fails this test (and is thus writeable) */
1007 	/* added by japhy, but borrowed from is_gv_magical */
1008 
1009 	if (len > 1) {
1010 	    const char *end = name + len;
1011 	    while (--end > name) {
1012 		if (!isDIGIT(*end)) return gv;
1013 	    }
1014 	}
1015 
1016       ro_magicalize:
1017 	SvREADONLY_on(GvSV(gv));
1018       magicalize:
1019 	sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1020 	break;
1021 
1022     case '\014':	/* $^L */
1023 	if (len > 1)
1024 	    break;
1025 	sv_setpv(GvSV(gv),"\f");
1026 	PL_formfeed = GvSV(gv);
1027 	break;
1028     case ';':
1029 	if (len > 1)
1030 	    break;
1031 	sv_setpv(GvSV(gv),"\034");
1032 	break;
1033     case ']':
1034 	if (len == 1) {
1035 	    SV *sv = GvSV(gv);
1036 	    (void)SvUPGRADE(sv, SVt_PVNV);
1037 	    Perl_sv_setpvf(aTHX_ sv,
1038 #if defined(PERL_SUBVERSION) && (PERL_SUBVERSION > 0)
1039 			    "%8.6"
1040 #else
1041 			    "%5.3"
1042 #endif
1043 			    NVff,
1044 			    SvNVX(PL_patchlevel));
1045 	    SvNVX(sv) = SvNVX(PL_patchlevel);
1046 	    SvNOK_on(sv);
1047 	    SvREADONLY_on(sv);
1048 	}
1049 	break;
1050     case '\026':	/* $^V */
1051 	if (len == 1) {
1052 	    SV *sv = GvSV(gv);
1053 	    GvSV(gv) = SvREFCNT_inc(PL_patchlevel);
1054 	    SvREFCNT_dec(sv);
1055 	}
1056 	break;
1057     }
1058     return gv;
1059 }
1060 
1061 void
1062 Perl_gv_fullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1063 {
1064     HV *hv = GvSTASH(gv);
1065     if (!hv) {
1066 	(void)SvOK_off(sv);
1067 	return;
1068     }
1069     sv_setpv(sv, prefix ? prefix : "");
1070     if (keepmain || strNE(HvNAME(hv), "main")) {
1071 	sv_catpv(sv,HvNAME(hv));
1072 	sv_catpvn(sv,"::", 2);
1073     }
1074     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1075 }
1076 
1077 void
1078 Perl_gv_fullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1079 {
1080     HV *hv = GvSTASH(gv);
1081     if (!hv) {
1082 	(void)SvOK_off(sv);
1083 	return;
1084     }
1085     sv_setpv(sv, prefix ? prefix : "");
1086     sv_catpv(sv,HvNAME(hv));
1087     sv_catpvn(sv,"::", 2);
1088     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1089 }
1090 
1091 void
1092 Perl_gv_efullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1093 {
1094     GV *egv = GvEGV(gv);
1095     if (!egv)
1096 	egv = gv;
1097     gv_fullname4(sv, egv, prefix, keepmain);
1098 }
1099 
1100 void
1101 Perl_gv_efullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1102 {
1103     GV *egv = GvEGV(gv);
1104     if (!egv)
1105 	egv = gv;
1106     gv_fullname3(sv, egv, prefix);
1107 }
1108 
1109 /* XXX compatibility with versions <= 5.003. */
1110 void
1111 Perl_gv_fullname(pTHX_ SV *sv, GV *gv)
1112 {
1113     gv_fullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1114 }
1115 
1116 /* XXX compatibility with versions <= 5.003. */
1117 void
1118 Perl_gv_efullname(pTHX_ SV *sv, GV *gv)
1119 {
1120     gv_efullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1121 }
1122 
1123 IO *
1124 Perl_newIO(pTHX)
1125 {
1126     IO *io;
1127     GV *iogv;
1128 
1129     io = (IO*)NEWSV(0,0);
1130     sv_upgrade((SV *)io,SVt_PVIO);
1131     SvREFCNT(io) = 1;
1132     SvOBJECT_on(io);
1133     iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
1134     /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1135     if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1136       iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
1137     SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
1138     return io;
1139 }
1140 
1141 void
1142 Perl_gv_check(pTHX_ HV *stash)
1143 {
1144     register HE *entry;
1145     register I32 i;
1146     register GV *gv;
1147     HV *hv;
1148 
1149     if (!HvARRAY(stash))
1150 	return;
1151     for (i = 0; i <= (I32) HvMAX(stash); i++) {
1152 	for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1153 	    if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1154 		(gv = (GV*)HeVAL(entry)) && (hv = GvHV(gv)))
1155 	    {
1156 		if (hv != PL_defstash && hv != stash)
1157 		     gv_check(hv);              /* nested package */
1158 	    }
1159 	    else if (isALPHA(*HeKEY(entry))) {
1160 		char *file;
1161 		gv = (GV*)HeVAL(entry);
1162 		if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1163 		    continue;
1164 		file = GvFILE(gv);
1165 		/* performance hack: if filename is absolute and it's a standard
1166 		 * module, don't bother warning */
1167 		if (file
1168 		    && PERL_FILE_IS_ABSOLUTE(file)
1169 #ifdef MACOS_TRADITIONAL
1170 		    && (instr(file, ":lib:")
1171 #else
1172 		    && (instr(file, "/lib/")
1173 #endif
1174 		    || instr(file, ".pm")))
1175 		{
1176 		    continue;
1177 		}
1178 		CopLINE_set(PL_curcop, GvLINE(gv));
1179 #ifdef USE_ITHREADS
1180 		CopFILE(PL_curcop) = file;	/* set for warning */
1181 #else
1182 		CopFILEGV(PL_curcop) = gv_fetchfile(file);
1183 #endif
1184 		Perl_warner(aTHX_ packWARN(WARN_ONCE),
1185 			"Name \"%s::%s\" used only once: possible typo",
1186 			HvNAME(stash), GvNAME(gv));
1187 	    }
1188 	}
1189     }
1190 }
1191 
1192 GV *
1193 Perl_newGVgen(pTHX_ char *pack)
1194 {
1195     return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1196 		      TRUE, SVt_PVGV);
1197 }
1198 
1199 /* hopefully this is only called on local symbol table entries */
1200 
1201 GP*
1202 Perl_gp_ref(pTHX_ GP *gp)
1203 {
1204     if (!gp)
1205 	return (GP*)NULL;
1206     gp->gp_refcnt++;
1207     if (gp->gp_cv) {
1208 	if (gp->gp_cvgen) {
1209 	    /* multi-named GPs cannot be used for method cache */
1210 	    SvREFCNT_dec(gp->gp_cv);
1211 	    gp->gp_cv = Nullcv;
1212 	    gp->gp_cvgen = 0;
1213 	}
1214 	else {
1215 	    /* Adding a new name to a subroutine invalidates method cache */
1216 	    PL_sub_generation++;
1217 	}
1218     }
1219     return gp;
1220 }
1221 
1222 void
1223 Perl_gp_free(pTHX_ GV *gv)
1224 {
1225     GP* gp;
1226 
1227     if (!gv || !(gp = GvGP(gv)))
1228 	return;
1229     if (gp->gp_refcnt == 0) {
1230 	if (ckWARN_d(WARN_INTERNAL))
1231 	    Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1232 			"Attempt to free unreferenced glob pointers");
1233         return;
1234     }
1235     if (gp->gp_cv) {
1236 	/* Deleting the name of a subroutine invalidates method cache */
1237 	PL_sub_generation++;
1238     }
1239     if (--gp->gp_refcnt > 0) {
1240 	if (gp->gp_egv == gv)
1241 	    gp->gp_egv = 0;
1242         return;
1243     }
1244 
1245     SvREFCNT_dec(gp->gp_sv);
1246     SvREFCNT_dec(gp->gp_av);
1247     SvREFCNT_dec(gp->gp_hv);
1248     SvREFCNT_dec(gp->gp_io);
1249     SvREFCNT_dec(gp->gp_cv);
1250     SvREFCNT_dec(gp->gp_form);
1251 
1252     Safefree(gp);
1253     GvGP(gv) = 0;
1254 }
1255 
1256 int
1257 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1258 {
1259     AMT *amtp = (AMT*)mg->mg_ptr;
1260     if (amtp && AMT_AMAGIC(amtp)) {
1261 	int i;
1262 	for (i = 1; i < NofAMmeth; i++) {
1263 	    CV *cv = amtp->table[i];
1264 	    if (cv != Nullcv) {
1265 		SvREFCNT_dec((SV *) cv);
1266 		amtp->table[i] = Nullcv;
1267 	    }
1268 	}
1269     }
1270  return 0;
1271 }
1272 
1273 /* Updates and caches the CV's */
1274 
1275 bool
1276 Perl_Gv_AMupdate(pTHX_ HV *stash)
1277 {
1278   GV* gv;
1279   CV* cv;
1280   MAGIC* mg=mg_find((SV*)stash, PERL_MAGIC_overload_table);
1281   AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1282   AMT amt;
1283 
1284   if (mg && amtp->was_ok_am == PL_amagic_generation
1285       && amtp->was_ok_sub == PL_sub_generation)
1286       return (bool)AMT_OVERLOADED(amtp);
1287   sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1288 
1289   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
1290 
1291   Zero(&amt,1,AMT);
1292   amt.was_ok_am = PL_amagic_generation;
1293   amt.was_ok_sub = PL_sub_generation;
1294   amt.fallback = AMGfallNO;
1295   amt.flags = 0;
1296 
1297   {
1298     int filled = 0, have_ovl = 0;
1299     int i, lim = 1;
1300     SV* sv = NULL;
1301 
1302     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1303 
1304     /* Try to find via inheritance. */
1305     gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1306     if (gv)
1307 	sv = GvSV(gv);
1308 
1309     if (!gv)
1310 	lim = DESTROY_amg;		/* Skip overloading entries. */
1311     else if (SvTRUE(sv))
1312 	amt.fallback=AMGfallYES;
1313     else if (SvOK(sv))
1314 	amt.fallback=AMGfallNEVER;
1315 
1316     for (i = 1; i < lim; i++)
1317 	amt.table[i] = Nullcv;
1318     for (; i < NofAMmeth; i++) {
1319 	char *cooky = (char*)PL_AMG_names[i];
1320 	/* Human-readable form, for debugging: */
1321 	char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1322 	STRLEN l = strlen(cooky);
1323 
1324 	DEBUG_o( Perl_deb(aTHX_ "Checking overloading of `%s' in package `%.256s'\n",
1325 		     cp, HvNAME(stash)) );
1326 	/* don't fill the cache while looking up!
1327 	   Creation of inheritance stubs in intermediate packages may
1328 	   conflict with the logic of runtime method substitution.
1329 	   Indeed, for inheritance A -> B -> C, if C overloads "+0",
1330 	   then we could have created stubs for "(+0" in A and C too.
1331 	   But if B overloads "bool", we may want to use it for
1332 	   numifying instead of C's "+0". */
1333 	if (i >= DESTROY_amg)
1334 	    gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1335 	else				/* Autoload taken care of below */
1336 	    gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1337         cv = 0;
1338         if (gv && (cv = GvCV(gv))) {
1339 	    if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1340 		&& strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
1341 		/* This is a hack to support autoloading..., while
1342 		   knowing *which* methods were declared as overloaded. */
1343 		/* GvSV contains the name of the method. */
1344 		GV *ngv = Nullgv;
1345 
1346 		DEBUG_o( Perl_deb(aTHX_ "Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n",
1347 			     SvPV_nolen(GvSV(gv)), cp, HvNAME(stash)) );
1348 		if (!SvPOK(GvSV(gv))
1349 		    || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
1350 						       FALSE)))
1351 		{
1352 		    /* Can be an import stub (created by `can'). */
1353 		    if (GvCVGEN(gv)) {
1354 			Perl_croak(aTHX_ "Stub found while resolving method `%.256s' overloading `%s' in package `%.256s'",
1355 			      (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
1356 			      cp, HvNAME(stash));
1357 		    } else
1358 			Perl_croak(aTHX_ "Can't resolve method `%.256s' overloading `%s' in package `%.256s'",
1359 			      (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
1360 			      cp, HvNAME(stash));
1361 		}
1362 		cv = GvCV(gv = ngv);
1363 	    }
1364 	    DEBUG_o( Perl_deb(aTHX_ "Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
1365 			 cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
1366 			 GvNAME(CvGV(cv))) );
1367 	    filled = 1;
1368 	    if (i < DESTROY_amg)
1369 		have_ovl = 1;
1370 	} else if (gv) {		/* Autoloaded... */
1371 	    cv = (CV*)gv;
1372 	    filled = 1;
1373 	}
1374 	amt.table[i]=(CV*)SvREFCNT_inc(cv);
1375     }
1376     if (filled) {
1377       AMT_AMAGIC_on(&amt);
1378       if (have_ovl)
1379 	  AMT_OVERLOADED_on(&amt);
1380       sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1381 						(char*)&amt, sizeof(AMT));
1382       return have_ovl;
1383     }
1384   }
1385   /* Here we have no table: */
1386   /* no_table: */
1387   AMT_AMAGIC_off(&amt);
1388   sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1389 						(char*)&amt, sizeof(AMTS));
1390   return FALSE;
1391 }
1392 
1393 
1394 CV*
1395 Perl_gv_handler(pTHX_ HV *stash, I32 id)
1396 {
1397     MAGIC *mg;
1398     AMT *amtp;
1399     CV *ret;
1400 
1401     if (!stash)
1402         return Nullcv;
1403     mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1404     if (!mg) {
1405       do_update:
1406 	Gv_AMupdate(stash);
1407 	mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1408     }
1409     amtp = (AMT*)mg->mg_ptr;
1410     if ( amtp->was_ok_am != PL_amagic_generation
1411 	 || amtp->was_ok_sub != PL_sub_generation )
1412 	goto do_update;
1413     if (AMT_AMAGIC(amtp)) {
1414 	ret = amtp->table[id];
1415 	if (ret && isGV(ret)) {		/* Autoloading stab */
1416 	    /* Passing it through may have resulted in a warning
1417 	       "Inherited AUTOLOAD for a non-method deprecated", since
1418 	       our caller is going through a function call, not a method call.
1419 	       So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1420 	    GV *gv = gv_fetchmethod(stash, (char*)PL_AMG_names[id]);
1421 
1422 	    if (gv && GvCV(gv))
1423 		return GvCV(gv);
1424 	}
1425 	return ret;
1426     }
1427 
1428     return Nullcv;
1429 }
1430 
1431 
1432 SV*
1433 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1434 {
1435   MAGIC *mg;
1436   CV *cv=NULL;
1437   CV **cvp=NULL, **ocvp=NULL;
1438   AMT *amtp=NULL, *oamtp=NULL;
1439   int off=0, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
1440   int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
1441 #ifdef DEBUGGING
1442   int fl=0;
1443 #endif
1444   HV* stash=NULL;
1445   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1446       && (stash = SvSTASH(SvRV(left)))
1447       && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1448       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1449 			? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1450 			: (CV **) NULL))
1451       && ((cv = cvp[off=method+assignshift])
1452 	  || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1453 						          * usual method */
1454 		  (
1455 #ifdef DEBUGGING
1456 		   fl = 1,
1457 #endif
1458 		   cv = cvp[off=method])))) {
1459     lr = -1;			/* Call method for left argument */
1460   } else {
1461     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1462       int logic;
1463 
1464       /* look for substituted methods */
1465       /* In all the covered cases we should be called with assign==0. */
1466 	 switch (method) {
1467 	 case inc_amg:
1468 	   force_cpy = 1;
1469 	   if ((cv = cvp[off=add_ass_amg])
1470 	       || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1471 	     right = &PL_sv_yes; lr = -1; assign = 1;
1472 	   }
1473 	   break;
1474 	 case dec_amg:
1475 	   force_cpy = 1;
1476 	   if ((cv = cvp[off = subtr_ass_amg])
1477 	       || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1478 	     right = &PL_sv_yes; lr = -1; assign = 1;
1479 	   }
1480 	   break;
1481 	 case bool__amg:
1482 	   (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1483 	   break;
1484 	 case numer_amg:
1485 	   (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1486 	   break;
1487 	 case string_amg:
1488 	   (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1489 	   break;
1490  case not_amg:
1491    (void)((cv = cvp[off=bool__amg])
1492 	  || (cv = cvp[off=numer_amg])
1493 	  || (cv = cvp[off=string_amg]));
1494    postpr = 1;
1495    break;
1496 	 case copy_amg:
1497 	   {
1498 	     /*
1499 		  * SV* ref causes confusion with the interpreter variable of
1500 		  * the same name
1501 		  */
1502 	     SV* tmpRef=SvRV(left);
1503 	     if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1504 		/*
1505 		 * Just to be extra cautious.  Maybe in some
1506 		 * additional cases sv_setsv is safe, too.
1507 		 */
1508 		SV* newref = newSVsv(tmpRef);
1509 		SvOBJECT_on(newref);
1510 		SvSTASH(newref) = (HV*)SvREFCNT_inc(SvSTASH(tmpRef));
1511 		return newref;
1512 	     }
1513 	   }
1514 	   break;
1515 	 case abs_amg:
1516 	   if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1517 	       && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1518 	     SV* nullsv=sv_2mortal(newSViv(0));
1519 	     if (off1==lt_amg) {
1520 	       SV* lessp = amagic_call(left,nullsv,
1521 				       lt_amg,AMGf_noright);
1522 	       logic = SvTRUE(lessp);
1523 	     } else {
1524 	       SV* lessp = amagic_call(left,nullsv,
1525 				       ncmp_amg,AMGf_noright);
1526 	       logic = (SvNV(lessp) < 0);
1527 	     }
1528 	     if (logic) {
1529 	       if (off==subtr_amg) {
1530 		 right = left;
1531 		 left = nullsv;
1532 		 lr = 1;
1533 	       }
1534 	     } else {
1535 	       return left;
1536 	     }
1537 	   }
1538 	   break;
1539 	 case neg_amg:
1540 	   if ((cv = cvp[off=subtr_amg])) {
1541 	     right = left;
1542 	     left = sv_2mortal(newSViv(0));
1543 	     lr = 1;
1544 	   }
1545 	   break;
1546 	 case int_amg:
1547 	 case iter_amg:			/* XXXX Eventually should do to_gv. */
1548 	     /* FAIL safe */
1549 	     return NULL;	/* Delegate operation to standard mechanisms. */
1550 	     break;
1551 	 case to_sv_amg:
1552 	 case to_av_amg:
1553 	 case to_hv_amg:
1554 	 case to_gv_amg:
1555 	 case to_cv_amg:
1556 	     /* FAIL safe */
1557 	     return left;	/* Delegate operation to standard mechanisms. */
1558 	     break;
1559 	 default:
1560 	   goto not_found;
1561 	 }
1562 	 if (!cv) goto not_found;
1563     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1564 	       && (stash = SvSTASH(SvRV(right)))
1565 	       && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1566 	       && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1567 			  ? (amtp = (AMT*)mg->mg_ptr)->table
1568 			  : (CV **) NULL))
1569 	       && (cv = cvp[off=method])) { /* Method for right
1570 					     * argument found */
1571       lr=1;
1572     } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1573 		 && (cvp=ocvp) && (lr = -1))
1574 		|| (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1575 	       && !(flags & AMGf_unary)) {
1576 				/* We look for substitution for
1577 				 * comparison operations and
1578 				 * concatenation */
1579       if (method==concat_amg || method==concat_ass_amg
1580 	  || method==repeat_amg || method==repeat_ass_amg) {
1581 	return NULL;		/* Delegate operation to string conversion */
1582       }
1583       off = -1;
1584       switch (method) {
1585 	 case lt_amg:
1586 	 case le_amg:
1587 	 case gt_amg:
1588 	 case ge_amg:
1589 	 case eq_amg:
1590 	 case ne_amg:
1591 	   postpr = 1; off=ncmp_amg; break;
1592 	 case slt_amg:
1593 	 case sle_amg:
1594 	 case sgt_amg:
1595 	 case sge_amg:
1596 	 case seq_amg:
1597 	 case sne_amg:
1598 	   postpr = 1; off=scmp_amg; break;
1599 	 }
1600       if (off != -1) cv = cvp[off];
1601       if (!cv) {
1602 	goto not_found;
1603       }
1604     } else {
1605     not_found:			/* No method found, either report or croak */
1606       switch (method) {
1607 	 case to_sv_amg:
1608 	 case to_av_amg:
1609 	 case to_hv_amg:
1610 	 case to_gv_amg:
1611 	 case to_cv_amg:
1612 	     /* FAIL safe */
1613 	     return left;	/* Delegate operation to standard mechanisms. */
1614 	     break;
1615       }
1616       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1617 	notfound = 1; lr = -1;
1618       } else if (cvp && (cv=cvp[nomethod_amg])) {
1619 	notfound = 1; lr = 1;
1620       } else {
1621 	SV *msg;
1622 	if (off==-1) off=method;
1623 	msg = sv_2mortal(Perl_newSVpvf(aTHX_
1624 		      "Operation `%s': no method found,%sargument %s%s%s%s",
1625 		      AMG_id2name(method + assignshift),
1626 		      (flags & AMGf_unary ? " " : "\n\tleft "),
1627 		      SvAMAGIC(left)?
1628 		        "in overloaded package ":
1629 		        "has no overloaded magic",
1630 		      SvAMAGIC(left)?
1631 		        HvNAME(SvSTASH(SvRV(left))):
1632 		        "",
1633 		      SvAMAGIC(right)?
1634 		        ",\n\tright argument in overloaded package ":
1635 		        (flags & AMGf_unary
1636 			 ? ""
1637 			 : ",\n\tright argument has no overloaded magic"),
1638 		      SvAMAGIC(right)?
1639 		        HvNAME(SvSTASH(SvRV(right))):
1640 		        ""));
1641 	if (amtp && amtp->fallback >= AMGfallYES) {
1642 	  DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX(msg)) );
1643 	} else {
1644 	  Perl_croak(aTHX_ "%"SVf, msg);
1645 	}
1646 	return NULL;
1647       }
1648       force_cpy = force_cpy || assign;
1649     }
1650   }
1651 #ifdef DEBUGGING
1652   if (!notfound) {
1653     DEBUG_o(Perl_deb(aTHX_
1654 		     "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1655 		     AMG_id2name(off),
1656 		     method+assignshift==off? "" :
1657 		     " (initially `",
1658 		     method+assignshift==off? "" :
1659 		     AMG_id2name(method+assignshift),
1660 		     method+assignshift==off? "" : "')",
1661 		     flags & AMGf_unary? "" :
1662 		     lr==1 ? " for right argument": " for left argument",
1663 		     flags & AMGf_unary? " for argument" : "",
1664 		     stash ? HvNAME(stash) : "null",
1665 		     fl? ",\n\tassignment variant used": "") );
1666   }
1667 #endif
1668     /* Since we use shallow copy during assignment, we need
1669      * to dublicate the contents, probably calling user-supplied
1670      * version of copy operator
1671      */
1672     /* We need to copy in following cases:
1673      * a) Assignment form was called.
1674      * 		assignshift==1,  assign==T, method + 1 == off
1675      * b) Increment or decrement, called directly.
1676      * 		assignshift==0,  assign==0, method + 0 == off
1677      * c) Increment or decrement, translated to assignment add/subtr.
1678      * 		assignshift==0,  assign==T,
1679      *		force_cpy == T
1680      * d) Increment or decrement, translated to nomethod.
1681      * 		assignshift==0,  assign==0,
1682      *		force_cpy == T
1683      * e) Assignment form translated to nomethod.
1684      * 		assignshift==1,  assign==T, method + 1 != off
1685      *		force_cpy == T
1686      */
1687     /*	off is method, method+assignshift, or a result of opcode substitution.
1688      *	In the latter case assignshift==0, so only notfound case is important.
1689      */
1690   if (( (method + assignshift == off)
1691 	&& (assign || (method == inc_amg) || (method == dec_amg)))
1692       || force_cpy)
1693     RvDEEPCP(left);
1694   {
1695     dSP;
1696     BINOP myop;
1697     SV* res;
1698     bool oldcatch = CATCH_GET;
1699 
1700     CATCH_SET(TRUE);
1701     Zero(&myop, 1, BINOP);
1702     myop.op_last = (OP *) &myop;
1703     myop.op_next = Nullop;
1704     myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1705 
1706     PUSHSTACKi(PERLSI_OVERLOAD);
1707     ENTER;
1708     SAVEOP();
1709     PL_op = (OP *) &myop;
1710     if (PERLDB_SUB && PL_curstash != PL_debstash)
1711 	PL_op->op_private |= OPpENTERSUB_DB;
1712     PUTBACK;
1713     pp_pushmark();
1714 
1715     EXTEND(SP, notfound + 5);
1716     PUSHs(lr>0? right: left);
1717     PUSHs(lr>0? left: right);
1718     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1719     if (notfound) {
1720       PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1721     }
1722     PUSHs((SV*)cv);
1723     PUTBACK;
1724 
1725     if ((PL_op = Perl_pp_entersub(aTHX)))
1726       CALLRUNOPS(aTHX);
1727     LEAVE;
1728     SPAGAIN;
1729 
1730     res=POPs;
1731     PUTBACK;
1732     POPSTACK;
1733     CATCH_SET(oldcatch);
1734 
1735     if (postpr) {
1736       int ans=0;
1737       switch (method) {
1738       case le_amg:
1739       case sle_amg:
1740 	ans=SvIV(res)<=0; break;
1741       case lt_amg:
1742       case slt_amg:
1743 	ans=SvIV(res)<0; break;
1744       case ge_amg:
1745       case sge_amg:
1746 	ans=SvIV(res)>=0; break;
1747       case gt_amg:
1748       case sgt_amg:
1749 	ans=SvIV(res)>0; break;
1750       case eq_amg:
1751       case seq_amg:
1752 	ans=SvIV(res)==0; break;
1753       case ne_amg:
1754       case sne_amg:
1755 	ans=SvIV(res)!=0; break;
1756       case inc_amg:
1757       case dec_amg:
1758 	SvSetSV(left,res); return left;
1759       case not_amg:
1760 	ans=!SvTRUE(res); break;
1761       }
1762       return boolSV(ans);
1763     } else if (method==copy_amg) {
1764       if (!SvROK(res)) {
1765 	Perl_croak(aTHX_ "Copy method did not return a reference");
1766       }
1767       return SvREFCNT_inc(SvRV(res));
1768     } else {
1769       return res;
1770     }
1771   }
1772 }
1773 
1774 /*
1775 =for apidoc is_gv_magical
1776 
1777 Returns C<TRUE> if given the name of a magical GV.
1778 
1779 Currently only useful internally when determining if a GV should be
1780 created even in rvalue contexts.
1781 
1782 C<flags> is not used at present but available for future extension to
1783 allow selecting particular classes of magical variable.
1784 
1785 =cut
1786 */
1787 bool
1788 Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags)
1789 {
1790     if (!len)
1791 	return FALSE;
1792 
1793     switch (*name) {
1794     case 'I':
1795 	if (len == 3 && strEQ(name, "ISA"))
1796 	    goto yes;
1797 	break;
1798     case 'O':
1799 	if (len == 8 && strEQ(name, "OVERLOAD"))
1800 	    goto yes;
1801 	break;
1802     case 'S':
1803 	if (len == 3 && strEQ(name, "SIG"))
1804 	    goto yes;
1805 	break;
1806     case '\017':   /* $^O & $^OPEN */
1807 	if (len == 1
1808 	    || (len == 4 && strEQ(name, "\017PEN")))
1809 	{
1810 	    goto yes;
1811 	}
1812 	break;
1813     case '\027':   /* $^W & $^WARNING_BITS */
1814 	if (len == 1
1815 	    || (len == 12 && strEQ(name, "\027ARNING_BITS"))
1816 	    || (len == 17 && strEQ(name, "\027IDE_SYSTEM_CALLS")))
1817 	{
1818 	    goto yes;
1819 	}
1820 	break;
1821 
1822     case '&':
1823     case '`':
1824     case '\'':
1825     case ':':
1826     case '?':
1827     case '!':
1828     case '-':
1829     case '#':
1830     case '*':
1831     case '[':
1832     case '^':
1833     case '~':
1834     case '=':
1835     case '%':
1836     case '.':
1837     case '(':
1838     case ')':
1839     case '<':
1840     case '>':
1841     case ',':
1842     case '\\':
1843     case '/':
1844     case '|':
1845     case '+':
1846     case ';':
1847     case ']':
1848     case '\001':   /* $^A */
1849     case '\003':   /* $^C */
1850     case '\004':   /* $^D */
1851     case '\005':   /* $^E */
1852     case '\006':   /* $^F */
1853     case '\010':   /* $^H */
1854     case '\011':   /* $^I, NOT \t in EBCDIC */
1855     case '\014':   /* $^L */
1856     case '\016':   /* $^N */
1857     case '\020':   /* $^P */
1858     case '\023':   /* $^S */
1859     case '\026':   /* $^V */
1860 	if (len == 1)
1861 	    goto yes;
1862 	break;
1863     case '\024':   /* $^T, ${^TAINT} */
1864         if (len == 1 || strEQ(name, "\024AINT"))
1865             goto yes;
1866         break;
1867     case '1':
1868     case '2':
1869     case '3':
1870     case '4':
1871     case '5':
1872     case '6':
1873     case '7':
1874     case '8':
1875     case '9':
1876 	if (len > 1) {
1877 	    char *end = name + len;
1878 	    while (--end > name) {
1879 		if (!isDIGIT(*end))
1880 		    return FALSE;
1881 	    }
1882 	}
1883     yes:
1884 	return TRUE;
1885     default:
1886 	break;
1887     }
1888     return FALSE;
1889 }
1890