Upgrade to Tie::File 0.20.
[p5sagit/p5-mst-13.2.git] / gv.c
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
430     gv = gv_fetchmeth(stash, name, nend - name, 0);
431     if (!gv) {
432         if (strEQ(name,"import") || strEQ(name,"unimport"))
433             gv = (GV*)&PL_sv_yes;
434         else if (autoload)
435             gv = gv_autoload4(stash, name, nend - name, TRUE);
436     }
437     else if (autoload) {
438         CV* cv = GvCV(gv);
439         if (!CvROOT(cv) && !CvXSUB(cv)) {
440             GV* stubgv;
441             GV* autogv;
442
443             if (CvANON(cv))
444                 stubgv = gv;
445             else {
446                 stubgv = CvGV(cv);
447                 if (GvCV(stubgv) != cv)         /* orphaned import */
448                     stubgv = gv;
449             }
450             autogv = gv_autoload4(GvSTASH(stubgv),
451                                   GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
452             if (autogv)
453                 gv = autogv;
454         }
455     }
456
457     return gv;
458 }
459
460 GV*
461 Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
462 {
463     char autoload[] = "AUTOLOAD";
464     STRLEN autolen = sizeof(autoload)-1;
465     GV* gv;
466     CV* cv;
467     HV* varstash;
468     GV* vargv;
469     SV* varsv;
470
471     if (!stash)
472         return Nullgv;  /* UNIVERSAL::AUTOLOAD could cause trouble */
473     if (len == autolen && strnEQ(name, autoload, autolen))
474         return Nullgv;
475     if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE)))
476         return Nullgv;
477     cv = GvCV(gv);
478
479     if (!(CvROOT(cv) || CvXSUB(cv)))
480         return Nullgv;
481
482     /*
483      * Inheriting AUTOLOAD for non-methods works ... for now.
484      */
485     if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && !method &&
486         (GvCVGEN(gv) || GvSTASH(gv) != stash))
487         Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
488           "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
489              HvNAME(stash), (int)len, name);
490
491 #ifndef USE_5005THREADS
492     if (CvXSUB(cv)) {
493         /* rather than lookup/init $AUTOLOAD here
494          * only to have the XSUB do another lookup for $AUTOLOAD
495          * and split that value on the last '::',
496          * pass along the same data via some unused fields in the CV
497          */
498         CvSTASH(cv) = stash;
499         SvPVX(cv) = (char *)name; /* cast to lose constness warning */
500         SvCUR(cv) = len;
501         return gv;
502     }
503 #endif
504
505     /*
506      * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
507      * The subroutine's original name may not be "AUTOLOAD", so we don't
508      * use that, but for lack of anything better we will use the sub's
509      * original package to look up $AUTOLOAD.
510      */
511     varstash = GvSTASH(CvGV(cv));
512     vargv = *(GV**)hv_fetch(varstash, autoload, autolen, TRUE);
513     ENTER;
514
515 #ifdef USE_5005THREADS
516     sv_lock((SV *)varstash);
517 #endif
518     if (!isGV(vargv))
519         gv_init(vargv, varstash, autoload, autolen, FALSE);
520     LEAVE;
521     varsv = GvSV(vargv);
522 #ifdef USE_5005THREADS
523     sv_lock(varsv);
524 #endif
525     sv_setpv(varsv, HvNAME(stash));
526     sv_catpvn(varsv, "::", 2);
527     sv_catpvn(varsv, name, len);
528     SvTAINTED_off(varsv);
529     return gv;
530 }
531
532 /* The "gv" parameter should be the glob known to Perl code as *!
533  * The scalar must already have been magicalized.
534  */
535 STATIC void
536 S_require_errno(pTHX_ GV *gv)
537 {
538     HV* stash = gv_stashpvn("Errno",5,FALSE);
539
540     if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) { 
541         dSP;
542         PUTBACK;
543         ENTER;
544         save_scalar(gv); /* keep the value of $! */
545         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
546                          newSVpvn("Errno",5), Nullsv);
547         LEAVE;
548         SPAGAIN;
549         stash = gv_stashpvn("Errno",5,FALSE);
550         if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
551             Perl_croak(aTHX_ "Can't use %%! because Errno.pm is not available");
552     }
553 }
554
555 /*
556 =for apidoc gv_stashpv
557
558 Returns a pointer to the stash for a specified package.  C<name> should
559 be a valid UTF-8 string.  If C<create> is set then the package will be
560 created if it does not already exist.  If C<create> is not set and the
561 package does not exist then NULL is returned.
562
563 =cut
564 */
565
566 HV*
567 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
568 {
569     return gv_stashpvn(name, strlen(name), create);
570 }
571
572 HV*
573 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 create)
574 {
575     char smallbuf[256];
576     char *tmpbuf;
577     HV *stash;
578     GV *tmpgv;
579
580     if (namelen + 3 < sizeof smallbuf)
581         tmpbuf = smallbuf;
582     else
583         New(606, tmpbuf, namelen + 3, char);
584     Copy(name,tmpbuf,namelen,char);
585     tmpbuf[namelen++] = ':';
586     tmpbuf[namelen++] = ':';
587     tmpbuf[namelen] = '\0';
588     tmpgv = gv_fetchpv(tmpbuf, create, SVt_PVHV);
589     if (tmpbuf != smallbuf)
590         Safefree(tmpbuf);
591     if (!tmpgv)
592         return 0;
593     if (!GvHV(tmpgv))
594         GvHV(tmpgv) = newHV();
595     stash = GvHV(tmpgv);
596     if (!HvNAME(stash))
597         HvNAME(stash) = savepv(name);
598     return stash;
599 }
600
601 /*
602 =for apidoc gv_stashsv
603
604 Returns a pointer to the stash for a specified package, which must be a
605 valid UTF-8 string.  See C<gv_stashpv>.
606
607 =cut
608 */
609
610 HV*
611 Perl_gv_stashsv(pTHX_ SV *sv, I32 create)
612 {
613     register char *ptr;
614     STRLEN len;
615     ptr = SvPV(sv,len);
616     return gv_stashpvn(ptr, len, create);
617 }
618
619
620 GV *
621 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type)
622 {
623     register const char *name = nambeg;
624     register GV *gv = 0;
625     GV**gvp;
626     I32 len;
627     register const char *namend;
628     HV *stash = 0;
629
630     if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
631         name++;
632
633     for (namend = name; *namend; namend++) {
634         if ((*namend == ':' && namend[1] == ':')
635             || (*namend == '\'' && namend[1]))
636         {
637             if (!stash)
638                 stash = PL_defstash;
639             if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
640                 return Nullgv;
641
642             len = namend - name;
643             if (len > 0) {
644                 char smallbuf[256];
645                 char *tmpbuf;
646
647                 if (len + 3 < sizeof smallbuf)
648                     tmpbuf = smallbuf;
649                 else
650                     New(601, tmpbuf, len+3, char);
651                 Copy(name, tmpbuf, len, char);
652                 tmpbuf[len++] = ':';
653                 tmpbuf[len++] = ':';
654                 tmpbuf[len] = '\0';
655                 gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
656                 gv = gvp ? *gvp : Nullgv;
657                 if (gv && gv != (GV*)&PL_sv_undef) {
658                     if (SvTYPE(gv) != SVt_PVGV)
659                         gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
660                     else
661                         GvMULTI_on(gv);
662                 }
663                 if (tmpbuf != smallbuf)
664                     Safefree(tmpbuf);
665                 if (!gv || gv == (GV*)&PL_sv_undef)
666                     return Nullgv;
667
668                 if (!(stash = GvHV(gv)))
669                     stash = GvHV(gv) = newHV();
670
671                 if (!HvNAME(stash))
672                     HvNAME(stash) = savepvn(nambeg, namend - nambeg);
673             }
674
675             if (*namend == ':')
676                 namend++;
677             namend++;
678             name = namend;
679             if (!*name)
680                 return gv ? gv : (GV*)*hv_fetch(PL_defstash, "main::", 6, TRUE);
681         }
682     }
683     len = namend - name;
684     if (!len)
685         len = 1;
686
687     /* No stash in name, so see how we can default */
688
689     if (!stash) {
690         if (isIDFIRST_lazy(name)) {
691             bool global = FALSE;
692
693             if (isUPPER(*name)) {
694                 if (*name == 'S' && (
695                     strEQ(name, "SIG") ||
696                     strEQ(name, "STDIN") ||
697                     strEQ(name, "STDOUT") ||
698                     strEQ(name, "STDERR")))
699                     global = TRUE;
700                 else if (*name == 'I' && strEQ(name, "INC"))
701                     global = TRUE;
702                 else if (*name == 'E' && strEQ(name, "ENV"))
703                     global = TRUE;
704                 else if (*name == 'A' && (
705                   strEQ(name, "ARGV") ||
706                   strEQ(name, "ARGVOUT")))
707                     global = TRUE;
708             }
709             else if (*name == '_' && !name[1])
710                 global = TRUE;
711
712             if (global)
713                 stash = PL_defstash;
714             else if ((COP*)PL_curcop == &PL_compiling) {
715                 stash = PL_curstash;
716                 if (add && (PL_hints & HINT_STRICT_VARS) &&
717                     sv_type != SVt_PVCV &&
718                     sv_type != SVt_PVGV &&
719                     sv_type != SVt_PVFM &&
720                     sv_type != SVt_PVIO &&
721                     !(len == 1 && sv_type == SVt_PV && strchr("ab",*name)) )
722                 {
723                     gvp = (GV**)hv_fetch(stash,name,len,0);
724                     if (!gvp ||
725                         *gvp == (GV*)&PL_sv_undef ||
726                         SvTYPE(*gvp) != SVt_PVGV)
727                     {
728                         stash = 0;
729                     }
730                     else if ((sv_type == SVt_PV   && !GvIMPORTED_SV(*gvp)) ||
731                              (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
732                              (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
733                     {
734                         Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
735                             sv_type == SVt_PVAV ? '@' :
736                             sv_type == SVt_PVHV ? '%' : '$',
737                             name);
738                         if (GvCVu(*gvp))
739                             Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
740                         stash = 0;
741                     }
742                 }
743             }
744             else
745                 stash = CopSTASH(PL_curcop);
746         }
747         else
748             stash = PL_defstash;
749     }
750
751     /* By this point we should have a stash and a name */
752
753     if (!stash) {
754         if (add) {
755             qerror(Perl_mess(aTHX_
756                  "Global symbol \"%s%s\" requires explicit package name",
757                  (sv_type == SVt_PV ? "$"
758                   : sv_type == SVt_PVAV ? "@"
759                   : sv_type == SVt_PVHV ? "%"
760                   : ""), name));
761             stash = PL_nullstash;
762         }
763         else
764             return Nullgv;
765     }
766
767     if (!SvREFCNT(stash))       /* symbol table under destruction */
768         return Nullgv;
769
770     gvp = (GV**)hv_fetch(stash,name,len,add);
771     if (!gvp || *gvp == (GV*)&PL_sv_undef)
772         return Nullgv;
773     gv = *gvp;
774     if (SvTYPE(gv) == SVt_PVGV) {
775         if (add) {
776             GvMULTI_on(gv);
777             gv_init_sv(gv, sv_type);
778             if (*name=='!' && sv_type == SVt_PVHV && len==1)
779                 require_errno(gv);
780         }
781         return gv;
782     } else if (add & GV_NOINIT) {
783         return gv;
784     }
785
786     /* Adding a new symbol */
787
788     if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
789         Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
790     gv_init(gv, stash, name, len, add & GV_ADDMULTI);
791     gv_init_sv(gv, sv_type);
792
793     if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE) 
794                                             : (PL_dowarn & G_WARN_ON ) ) )
795         GvMULTI_on(gv) ;
796
797     /* set up magic where warranted */
798     switch (*name) {
799     case 'A':
800         if (strEQ(name, "ARGV")) {
801             IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
802         }
803         break;
804     case 'E':
805         if (strnEQ(name, "EXPORT", 6))
806             GvMULTI_on(gv);
807         break;
808     case 'I':
809         if (strEQ(name, "ISA")) {
810             AV* av = GvAVn(gv);
811             GvMULTI_on(gv);
812             sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
813             /* NOTE: No support for tied ISA */
814             if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
815                 && AvFILLp(av) == -1)
816             {
817                 char *pname;
818                 av_push(av, newSVpvn(pname = "NDBM_File",9));
819                 gv_stashpvn(pname, 9, TRUE);
820                 av_push(av, newSVpvn(pname = "DB_File",7));
821                 gv_stashpvn(pname, 7, TRUE);
822                 av_push(av, newSVpvn(pname = "GDBM_File",9));
823                 gv_stashpvn(pname, 9, TRUE);
824                 av_push(av, newSVpvn(pname = "SDBM_File",9));
825                 gv_stashpvn(pname, 9, TRUE);
826                 av_push(av, newSVpvn(pname = "ODBM_File",9));
827                 gv_stashpvn(pname, 9, TRUE);
828             }
829         }
830         break;
831     case 'O':
832         if (strEQ(name, "OVERLOAD")) {
833             HV* hv = GvHVn(gv);
834             GvMULTI_on(gv);
835             hv_magic(hv, Nullgv, PERL_MAGIC_overload);
836         }
837         break;
838     case 'S':
839         if (strEQ(name, "SIG")) {
840             HV *hv;
841             I32 i;
842             if (!PL_psig_ptr) {
843                 Newz(73, PL_psig_ptr,  SIG_SIZE, SV*);
844                 Newz(73, PL_psig_name, SIG_SIZE, SV*);
845                 Newz(73, PL_psig_pend, SIG_SIZE, int);
846             }
847             GvMULTI_on(gv);
848             hv = GvHVn(gv);
849             hv_magic(hv, Nullgv, PERL_MAGIC_sig);
850             for (i = 1; i < SIG_SIZE; i++) {
851                 SV ** init;
852                 init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
853                 if (init)
854                     sv_setsv(*init, &PL_sv_undef);
855                 PL_psig_ptr[i] = 0;
856                 PL_psig_name[i] = 0;
857                 PL_psig_pend[i] = 0;
858             }
859         }
860         break;
861     case 'V':
862         if (strEQ(name, "VERSION"))
863             GvMULTI_on(gv);
864         break;
865
866     case '&':
867     case '`':
868     case '\'':
869        if (
870            len > 1 ||
871            sv_type == SVt_PVAV ||
872            sv_type == SVt_PVHV ||
873            sv_type == SVt_PVCV ||
874            sv_type == SVt_PVFM ||
875            sv_type == SVt_PVIO
876        ) { break; }
877         PL_sawampersand = TRUE;
878         goto ro_magicalize;
879
880     case ':':
881         if (len > 1)
882             break;
883         sv_setpv(GvSV(gv),PL_chopset);
884         goto magicalize;
885
886     case '?':
887         if (len > 1)
888             break;
889 #ifdef COMPLEX_STATUS
890         (void)SvUPGRADE(GvSV(gv), SVt_PVLV);
891 #endif
892         goto magicalize;
893
894     case '!':
895         if (len > 1)
896             break;
897
898         /* If %! has been used, automatically load Errno.pm.
899            The require will itself set errno, so in order to
900            preserve its value we have to set up the magic
901            now (rather than going to magicalize)
902         */
903
904         sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
905
906         if (sv_type == SVt_PVHV)
907             require_errno(gv);
908
909         break;
910     case '-':
911         if (len > 1)
912             break;
913         else {
914             AV* av = GvAVn(gv);
915             sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
916             SvREADONLY_on(av);
917         }
918         goto magicalize;
919     case '#':
920     case '*':
921         if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && len == 1 && sv_type == SVt_PV)
922             Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX), "Use of $%s is deprecated", name);
923         /* FALL THROUGH */
924     case '[':
925     case '^':
926     case '~':
927     case '=':
928     case '%':
929     case '.':
930     case '(':
931     case ')':
932     case '<':
933     case '>':
934     case ',':
935     case '\\':
936     case '/':
937     case '\001':        /* $^A */
938     case '\003':        /* $^C */
939     case '\004':        /* $^D */
940     case '\006':        /* $^F */
941     case '\010':        /* $^H */
942     case '\011':        /* $^I, NOT \t in EBCDIC */
943     case '\016':        /* $^N */
944     case '\020':        /* $^P */
945         if (len > 1)
946             break;
947         goto magicalize;
948     case '|':
949         if (len > 1)
950             break;
951         sv_setiv(GvSV(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
952         goto magicalize;
953     case '\005':        /* $^E && $^ENCODING */
954         if (len > 1 && strNE(name, "\005NCODING"))
955             break;
956         goto magicalize;
957
958     case '\017':        /* $^O & $^OPEN */
959         if (len > 1 && strNE(name, "\017PEN"))
960             break;
961         goto magicalize;
962     case '\023':        /* $^S */
963         if (len > 1)
964             break;
965         goto ro_magicalize;
966     case '\024':        /* $^T, ${^TAINT} */
967         if (len == 1)
968             goto magicalize;
969         else if (strEQ(name, "\024AINT"))
970             goto ro_magicalize;
971         else
972             break;
973     case '\027':        /* $^W & $^WARNING_BITS */
974         if (len > 1 && strNE(name, "\027ARNING_BITS")
975             && strNE(name, "\027IDE_SYSTEM_CALLS"))
976             break;
977         goto magicalize;
978
979     case '+':
980         if (len > 1)
981             break;
982         else {
983             AV* av = GvAVn(gv);
984             sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
985             SvREADONLY_on(av);
986         }
987         /* FALL THROUGH */
988     case '1':
989     case '2':
990     case '3':
991     case '4':
992     case '5':
993     case '6':
994     case '7':
995     case '8':
996     case '9':
997         /* ensures variable is only digits */
998         /* ${"1foo"} fails this test (and is thus writeable) */
999         /* added by japhy, but borrowed from is_gv_magical */
1000
1001         if (len > 1) {
1002             const char *end = name + len;
1003             while (--end > name) {
1004                 if (!isDIGIT(*end)) return gv;
1005             }
1006         }
1007
1008       ro_magicalize:
1009         SvREADONLY_on(GvSV(gv));
1010       magicalize:
1011         sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1012         break;
1013
1014     case '\014':        /* $^L */
1015         if (len > 1)
1016             break;
1017         sv_setpv(GvSV(gv),"\f");
1018         PL_formfeed = GvSV(gv);
1019         break;
1020     case ';':
1021         if (len > 1)
1022             break;
1023         sv_setpv(GvSV(gv),"\034");
1024         break;
1025     case ']':
1026         if (len == 1) {
1027             SV *sv = GvSV(gv);
1028             (void)SvUPGRADE(sv, SVt_PVNV);
1029             Perl_sv_setpvf(aTHX_ sv,
1030 #if defined(PERL_SUBVERSION) && (PERL_SUBVERSION > 0)
1031                             "%8.6"
1032 #else
1033                             "%5.3"
1034 #endif
1035                             NVff,
1036                             SvNVX(PL_patchlevel));
1037             SvNVX(sv) = SvNVX(PL_patchlevel);
1038             SvNOK_on(sv);
1039             SvREADONLY_on(sv);
1040         }
1041         break;
1042     case '\026':        /* $^V */
1043         if (len == 1) {
1044             SV *sv = GvSV(gv);
1045             GvSV(gv) = SvREFCNT_inc(PL_patchlevel);
1046             SvREFCNT_dec(sv);
1047         }
1048         break;
1049     }
1050     return gv;
1051 }
1052
1053 void
1054 Perl_gv_fullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1055 {
1056     HV *hv = GvSTASH(gv);
1057     if (!hv) {
1058         (void)SvOK_off(sv);
1059         return;
1060     }
1061     sv_setpv(sv, prefix ? prefix : "");
1062     if (keepmain || strNE(HvNAME(hv), "main")) {
1063         sv_catpv(sv,HvNAME(hv));
1064         sv_catpvn(sv,"::", 2);
1065     }
1066     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1067 }
1068
1069 void
1070 Perl_gv_fullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1071 {
1072     HV *hv = GvSTASH(gv);
1073     if (!hv) {
1074         (void)SvOK_off(sv);
1075         return;
1076     }
1077     sv_setpv(sv, prefix ? prefix : "");
1078     sv_catpv(sv,HvNAME(hv));
1079     sv_catpvn(sv,"::", 2);
1080     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1081 }
1082
1083 void
1084 Perl_gv_efullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1085 {
1086     GV *egv = GvEGV(gv);
1087     if (!egv)
1088         egv = gv;
1089     gv_fullname4(sv, egv, prefix, keepmain);
1090 }
1091
1092 void
1093 Perl_gv_efullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1094 {
1095     GV *egv = GvEGV(gv);
1096     if (!egv)
1097         egv = gv;
1098     gv_fullname3(sv, egv, prefix);
1099 }
1100
1101 /* XXX compatibility with versions <= 5.003. */
1102 void
1103 Perl_gv_fullname(pTHX_ SV *sv, GV *gv)
1104 {
1105     gv_fullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1106 }
1107
1108 /* XXX compatibility with versions <= 5.003. */
1109 void
1110 Perl_gv_efullname(pTHX_ SV *sv, GV *gv)
1111 {
1112     gv_efullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1113 }
1114
1115 IO *
1116 Perl_newIO(pTHX)
1117 {
1118     IO *io;
1119     GV *iogv;
1120
1121     io = (IO*)NEWSV(0,0);
1122     sv_upgrade((SV *)io,SVt_PVIO);
1123     SvREFCNT(io) = 1;
1124     SvOBJECT_on(io);
1125     iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
1126     /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1127     if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1128       iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
1129     SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
1130     return io;
1131 }
1132
1133 void
1134 Perl_gv_check(pTHX_ HV *stash)
1135 {
1136     register HE *entry;
1137     register I32 i;
1138     register GV *gv;
1139     HV *hv;
1140
1141     if (!HvARRAY(stash))
1142         return;
1143     for (i = 0; i <= (I32) HvMAX(stash); i++) {
1144         for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1145             if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1146                 (gv = (GV*)HeVAL(entry)) && (hv = GvHV(gv)))
1147             {
1148                 if (hv != PL_defstash && hv != stash)
1149                      gv_check(hv);              /* nested package */
1150             }
1151             else if (isALPHA(*HeKEY(entry))) {
1152                 char *file;
1153                 gv = (GV*)HeVAL(entry);
1154                 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1155                     continue;
1156                 file = GvFILE(gv);
1157                 /* performance hack: if filename is absolute and it's a standard
1158                  * module, don't bother warning */
1159                 if (file
1160                     && PERL_FILE_IS_ABSOLUTE(file)
1161 #ifdef MACOS_TRADITIONAL
1162                     && (instr(file, ":lib:")
1163 #else
1164                     && (instr(file, "/lib/")
1165 #endif
1166                     || instr(file, ".pm")))
1167                 {
1168                     continue;
1169                 }
1170                 CopLINE_set(PL_curcop, GvLINE(gv));
1171 #ifdef USE_ITHREADS
1172                 CopFILE(PL_curcop) = file;      /* set for warning */
1173 #else
1174                 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1175 #endif
1176                 Perl_warner(aTHX_ packWARN(WARN_ONCE),
1177                         "Name \"%s::%s\" used only once: possible typo",
1178                         HvNAME(stash), GvNAME(gv));
1179             }
1180         }
1181     }
1182 }
1183
1184 GV *
1185 Perl_newGVgen(pTHX_ char *pack)
1186 {
1187     return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1188                       TRUE, SVt_PVGV);
1189 }
1190
1191 /* hopefully this is only called on local symbol table entries */
1192
1193 GP*
1194 Perl_gp_ref(pTHX_ GP *gp)
1195 {
1196     if (!gp)
1197         return (GP*)NULL;
1198     gp->gp_refcnt++;
1199     if (gp->gp_cv) {
1200         if (gp->gp_cvgen) {
1201             /* multi-named GPs cannot be used for method cache */
1202             SvREFCNT_dec(gp->gp_cv);
1203             gp->gp_cv = Nullcv;
1204             gp->gp_cvgen = 0;
1205         }
1206         else {
1207             /* Adding a new name to a subroutine invalidates method cache */
1208             PL_sub_generation++;
1209         }
1210     }
1211     return gp;
1212 }
1213
1214 void
1215 Perl_gp_free(pTHX_ GV *gv)
1216 {
1217     GP* gp;
1218
1219     if (!gv || !(gp = GvGP(gv)))
1220         return;
1221     if (gp->gp_refcnt == 0) {
1222         if (ckWARN_d(WARN_INTERNAL))
1223             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1224                         "Attempt to free unreferenced glob pointers");
1225         return;
1226     }
1227     if (gp->gp_cv) {
1228         /* Deleting the name of a subroutine invalidates method cache */
1229         PL_sub_generation++;
1230     }
1231     if (--gp->gp_refcnt > 0) {
1232         if (gp->gp_egv == gv)
1233             gp->gp_egv = 0;
1234         return;
1235     }
1236
1237     SvREFCNT_dec(gp->gp_sv);
1238     SvREFCNT_dec(gp->gp_av);
1239     SvREFCNT_dec(gp->gp_hv);
1240     SvREFCNT_dec(gp->gp_io);
1241     SvREFCNT_dec(gp->gp_cv);
1242     SvREFCNT_dec(gp->gp_form);
1243
1244     Safefree(gp);
1245     GvGP(gv) = 0;
1246 }
1247
1248 #if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
1249 #define MICROPORT
1250 #endif
1251
1252 #ifdef  MICROPORT       /* Microport 2.4 hack */
1253 AV *GvAVn(gv)
1254 register GV *gv;
1255 {
1256     if (GvGP(gv)->gp_av)
1257         return GvGP(gv)->gp_av;
1258     else
1259         return GvGP(gv_AVadd(gv))->gp_av;
1260 }
1261
1262 HV *GvHVn(gv)
1263 register GV *gv;
1264 {
1265     if (GvGP(gv)->gp_hv)
1266         return GvGP(gv)->gp_hv;
1267     else
1268         return GvGP(gv_HVadd(gv))->gp_hv;
1269 }
1270 #endif                  /* Microport 2.4 hack */
1271
1272 int
1273 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1274 {
1275     AMT *amtp = (AMT*)mg->mg_ptr;
1276     if (amtp && AMT_AMAGIC(amtp)) {
1277         int i;
1278         for (i = 1; i < NofAMmeth; i++) {
1279             CV *cv = amtp->table[i];
1280             if (cv != Nullcv) {
1281                 SvREFCNT_dec((SV *) cv);
1282                 amtp->table[i] = Nullcv;
1283             }
1284         }
1285     }
1286  return 0;
1287 }
1288
1289 /* Updates and caches the CV's */
1290
1291 bool
1292 Perl_Gv_AMupdate(pTHX_ HV *stash)
1293 {
1294   GV* gv;
1295   CV* cv;
1296   MAGIC* mg=mg_find((SV*)stash, PERL_MAGIC_overload_table);
1297   AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1298   AMT amt;
1299
1300   if (mg && amtp->was_ok_am == PL_amagic_generation
1301       && amtp->was_ok_sub == PL_sub_generation)
1302       return AMT_OVERLOADED(amtp);
1303   sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1304
1305   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
1306
1307   Zero(&amt,1,AMT);
1308   amt.was_ok_am = PL_amagic_generation;
1309   amt.was_ok_sub = PL_sub_generation;
1310   amt.fallback = AMGfallNO;
1311   amt.flags = 0;
1312
1313   {
1314     int filled = 0, have_ovl = 0;
1315     int i, lim = 1;
1316     SV* sv = NULL;
1317
1318     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1319
1320     /* Try to find via inheritance. */
1321     gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1322     if (gv)
1323         sv = GvSV(gv);
1324
1325     if (!gv)
1326         lim = DESTROY_amg;              /* Skip overloading entries. */
1327     else if (SvTRUE(sv))
1328         amt.fallback=AMGfallYES;
1329     else if (SvOK(sv))
1330         amt.fallback=AMGfallNEVER;
1331
1332     for (i = 1; i < lim; i++)
1333         amt.table[i] = Nullcv;
1334     for (; i < NofAMmeth; i++) {
1335         char *cooky = (char*)PL_AMG_names[i];
1336         /* Human-readable form, for debugging: */
1337         char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1338         STRLEN l = strlen(cooky);
1339
1340         DEBUG_o( Perl_deb(aTHX_ "Checking overloading of `%s' in package `%.256s'\n",
1341                      cp, HvNAME(stash)) );
1342         /* don't fill the cache while looking up!
1343            Creation of inheritance stubs in intermediate packages may
1344            conflict with the logic of runtime method substitution.
1345            Indeed, for inheritance A -> B -> C, if C overloads "+0",
1346            then we could have created stubs for "(+0" in A and C too.
1347            But if B overloads "bool", we may want to use it for
1348            numifying instead of C's "+0". */
1349         if (i >= DESTROY_amg)
1350             gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1351         else                            /* Autoload taken care of below */
1352             gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1353         cv = 0;
1354         if (gv && (cv = GvCV(gv))) {
1355             if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1356                 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
1357                 /* This is a hack to support autoloading..., while
1358                    knowing *which* methods were declared as overloaded. */
1359                 /* GvSV contains the name of the method. */
1360                 GV *ngv = Nullgv;
1361                 
1362                 DEBUG_o( Perl_deb(aTHX_ "Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n",
1363                              SvPV_nolen(GvSV(gv)), cp, HvNAME(stash)) );
1364                 if (!SvPOK(GvSV(gv))
1365                     || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
1366                                                        FALSE)))
1367                 {
1368                     /* Can be an import stub (created by `can'). */
1369                     if (GvCVGEN(gv)) {
1370                         Perl_croak(aTHX_ "Stub found while resolving method `%.256s' overloading `%s' in package `%.256s'",
1371                               (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
1372                               cp, HvNAME(stash));
1373                     } else
1374                         Perl_croak(aTHX_ "Can't resolve method `%.256s' overloading `%s' in package `%.256s'",
1375                               (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
1376                               cp, HvNAME(stash));
1377                 }
1378                 cv = GvCV(gv = ngv);
1379             }
1380             DEBUG_o( Perl_deb(aTHX_ "Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
1381                          cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
1382                          GvNAME(CvGV(cv))) );
1383             filled = 1;
1384             if (i < DESTROY_amg)
1385                 have_ovl = 1;
1386         } else if (gv) {                /* Autoloaded... */
1387             cv = (CV*)gv;
1388             filled = 1;
1389         }
1390         amt.table[i]=(CV*)SvREFCNT_inc(cv);
1391     }
1392     if (filled) {
1393       AMT_AMAGIC_on(&amt);
1394       if (have_ovl)
1395           AMT_OVERLOADED_on(&amt);
1396       sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1397                                                 (char*)&amt, sizeof(AMT));
1398       return have_ovl;
1399     }
1400   }
1401   /* Here we have no table: */
1402   /* no_table: */
1403   AMT_AMAGIC_off(&amt);
1404   sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1405                                                 (char*)&amt, sizeof(AMTS));
1406   return FALSE;
1407 }
1408
1409
1410 CV*
1411 Perl_gv_handler(pTHX_ HV *stash, I32 id)
1412 {
1413     MAGIC *mg;
1414     AMT *amtp;
1415     CV *ret;
1416
1417     if (!stash)
1418         return Nullcv;
1419     mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1420     if (!mg) {
1421       do_update:
1422         Gv_AMupdate(stash);
1423         mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1424     }
1425     amtp = (AMT*)mg->mg_ptr;
1426     if ( amtp->was_ok_am != PL_amagic_generation
1427          || amtp->was_ok_sub != PL_sub_generation )
1428         goto do_update;
1429     if (AMT_AMAGIC(amtp)) {
1430         ret = amtp->table[id];
1431         if (ret && isGV(ret)) {         /* Autoloading stab */
1432             /* Passing it through may have resulted in a warning
1433                "Inherited AUTOLOAD for a non-method deprecated", since
1434                our caller is going through a function call, not a method call.
1435                So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1436             GV *gv = gv_fetchmethod(stash, (char*)PL_AMG_names[id]);
1437
1438             if (gv && GvCV(gv))
1439                 return GvCV(gv);
1440         }
1441         return ret;
1442     }
1443     
1444     return Nullcv;
1445 }
1446
1447
1448 SV*
1449 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1450 {
1451   MAGIC *mg;
1452   CV *cv=NULL;
1453   CV **cvp=NULL, **ocvp=NULL;
1454   AMT *amtp=NULL, *oamtp=NULL;
1455   int off=0, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
1456   int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
1457 #ifdef DEBUGGING
1458   int fl=0;
1459 #endif
1460   HV* stash=NULL;
1461   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1462       && (stash = SvSTASH(SvRV(left)))
1463       && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1464       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1465                         ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1466                         : (CV **) NULL))
1467       && ((cv = cvp[off=method+assignshift])
1468           || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1469                                                           * usual method */
1470                   (
1471 #ifdef DEBUGGING
1472                    fl = 1,
1473 #endif 
1474                    cv = cvp[off=method])))) {
1475     lr = -1;                    /* Call method for left argument */
1476   } else {
1477     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1478       int logic;
1479
1480       /* look for substituted methods */
1481       /* In all the covered cases we should be called with assign==0. */
1482          switch (method) {
1483          case inc_amg:
1484            force_cpy = 1;
1485            if ((cv = cvp[off=add_ass_amg])
1486                || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1487              right = &PL_sv_yes; lr = -1; assign = 1;
1488            }
1489            break;
1490          case dec_amg:
1491            force_cpy = 1;
1492            if ((cv = cvp[off = subtr_ass_amg])
1493                || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1494              right = &PL_sv_yes; lr = -1; assign = 1;
1495            }
1496            break;
1497          case bool__amg:
1498            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1499            break;
1500          case numer_amg:
1501            (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1502            break;
1503          case string_amg:
1504            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1505            break;
1506  case not_amg:
1507    (void)((cv = cvp[off=bool__amg])
1508           || (cv = cvp[off=numer_amg])
1509           || (cv = cvp[off=string_amg]));
1510    postpr = 1;
1511    break;
1512          case copy_amg:
1513            {
1514              /*
1515                   * SV* ref causes confusion with the interpreter variable of
1516                   * the same name
1517                   */
1518              SV* tmpRef=SvRV(left);
1519              if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1520                 /*
1521                  * Just to be extra cautious.  Maybe in some
1522                  * additional cases sv_setsv is safe, too.
1523                  */
1524                 SV* newref = newSVsv(tmpRef);
1525                 SvOBJECT_on(newref);
1526                 SvSTASH(newref) = (HV*)SvREFCNT_inc(SvSTASH(tmpRef));
1527                 return newref;
1528              }
1529            }
1530            break;
1531          case abs_amg:
1532            if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1533                && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1534              SV* nullsv=sv_2mortal(newSViv(0));
1535              if (off1==lt_amg) {
1536                SV* lessp = amagic_call(left,nullsv,
1537                                        lt_amg,AMGf_noright);
1538                logic = SvTRUE(lessp);
1539              } else {
1540                SV* lessp = amagic_call(left,nullsv,
1541                                        ncmp_amg,AMGf_noright);
1542                logic = (SvNV(lessp) < 0);
1543              }
1544              if (logic) {
1545                if (off==subtr_amg) {
1546                  right = left;
1547                  left = nullsv;
1548                  lr = 1;
1549                }
1550              } else {
1551                return left;
1552              }
1553            }
1554            break;
1555          case neg_amg:
1556            if ((cv = cvp[off=subtr_amg])) {
1557              right = left;
1558              left = sv_2mortal(newSViv(0));
1559              lr = 1;
1560            }
1561            break;
1562          case int_amg:
1563          case iter_amg:                 /* XXXX Eventually should do to_gv. */
1564              /* FAIL safe */
1565              return NULL;       /* Delegate operation to standard mechanisms. */
1566              break;
1567          case to_sv_amg:
1568          case to_av_amg:
1569          case to_hv_amg:
1570          case to_gv_amg:
1571          case to_cv_amg:
1572              /* FAIL safe */
1573              return left;       /* Delegate operation to standard mechanisms. */
1574              break;
1575          default:
1576            goto not_found;
1577          }
1578          if (!cv) goto not_found;
1579     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1580                && (stash = SvSTASH(SvRV(right)))
1581                && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1582                && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1583                           ? (amtp = (AMT*)mg->mg_ptr)->table
1584                           : (CV **) NULL))
1585                && (cv = cvp[off=method])) { /* Method for right
1586                                              * argument found */
1587       lr=1;
1588     } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1589                  && (cvp=ocvp) && (lr = -1))
1590                 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1591                && !(flags & AMGf_unary)) {
1592                                 /* We look for substitution for
1593                                  * comparison operations and
1594                                  * concatenation */
1595       if (method==concat_amg || method==concat_ass_amg
1596           || method==repeat_amg || method==repeat_ass_amg) {
1597         return NULL;            /* Delegate operation to string conversion */
1598       }
1599       off = -1;
1600       switch (method) {
1601          case lt_amg:
1602          case le_amg:
1603          case gt_amg:
1604          case ge_amg:
1605          case eq_amg:
1606          case ne_amg:
1607            postpr = 1; off=ncmp_amg; break;
1608          case slt_amg:
1609          case sle_amg:
1610          case sgt_amg:
1611          case sge_amg:
1612          case seq_amg:
1613          case sne_amg:
1614            postpr = 1; off=scmp_amg; break;
1615          }
1616       if (off != -1) cv = cvp[off];
1617       if (!cv) {
1618         goto not_found;
1619       }
1620     } else {
1621     not_found:                  /* No method found, either report or croak */
1622       switch (method) {
1623          case to_sv_amg:
1624          case to_av_amg:
1625          case to_hv_amg:
1626          case to_gv_amg:
1627          case to_cv_amg:
1628              /* FAIL safe */
1629              return left;       /* Delegate operation to standard mechanisms. */
1630              break;
1631       }
1632       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1633         notfound = 1; lr = -1;
1634       } else if (cvp && (cv=cvp[nomethod_amg])) {
1635         notfound = 1; lr = 1;
1636       } else {
1637         SV *msg;
1638         if (off==-1) off=method;
1639         msg = sv_2mortal(Perl_newSVpvf(aTHX_
1640                       "Operation `%s': no method found,%sargument %s%s%s%s",
1641                       AMG_id2name(method + assignshift),
1642                       (flags & AMGf_unary ? " " : "\n\tleft "),
1643                       SvAMAGIC(left)?
1644                         "in overloaded package ":
1645                         "has no overloaded magic",
1646                       SvAMAGIC(left)?
1647                         HvNAME(SvSTASH(SvRV(left))):
1648                         "",
1649                       SvAMAGIC(right)?
1650                         ",\n\tright argument in overloaded package ":
1651                         (flags & AMGf_unary
1652                          ? ""
1653                          : ",\n\tright argument has no overloaded magic"),
1654                       SvAMAGIC(right)?
1655                         HvNAME(SvSTASH(SvRV(right))):
1656                         ""));
1657         if (amtp && amtp->fallback >= AMGfallYES) {
1658           DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX(msg)) );
1659         } else {
1660           Perl_croak(aTHX_ "%"SVf, msg);
1661         }
1662         return NULL;
1663       }
1664       force_cpy = force_cpy || assign;
1665     }
1666   }
1667 #ifdef DEBUGGING
1668   if (!notfound) {
1669     DEBUG_o(Perl_deb(aTHX_
1670                      "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1671                      AMG_id2name(off),
1672                      method+assignshift==off? "" :
1673                      " (initially `",
1674                      method+assignshift==off? "" :
1675                      AMG_id2name(method+assignshift),
1676                      method+assignshift==off? "" : "')",
1677                      flags & AMGf_unary? "" :
1678                      lr==1 ? " for right argument": " for left argument",
1679                      flags & AMGf_unary? " for argument" : "",
1680                      stash ? HvNAME(stash) : "null",
1681                      fl? ",\n\tassignment variant used": "") );
1682   }
1683 #endif
1684     /* Since we use shallow copy during assignment, we need
1685      * to dublicate the contents, probably calling user-supplied
1686      * version of copy operator
1687      */
1688     /* We need to copy in following cases:
1689      * a) Assignment form was called.
1690      *          assignshift==1,  assign==T, method + 1 == off
1691      * b) Increment or decrement, called directly.
1692      *          assignshift==0,  assign==0, method + 0 == off
1693      * c) Increment or decrement, translated to assignment add/subtr.
1694      *          assignshift==0,  assign==T,
1695      *          force_cpy == T
1696      * d) Increment or decrement, translated to nomethod.
1697      *          assignshift==0,  assign==0,
1698      *          force_cpy == T
1699      * e) Assignment form translated to nomethod.
1700      *          assignshift==1,  assign==T, method + 1 != off
1701      *          force_cpy == T
1702      */
1703     /*  off is method, method+assignshift, or a result of opcode substitution.
1704      *  In the latter case assignshift==0, so only notfound case is important.
1705      */
1706   if (( (method + assignshift == off)
1707         && (assign || (method == inc_amg) || (method == dec_amg)))
1708       || force_cpy)
1709     RvDEEPCP(left);
1710   {
1711     dSP;
1712     BINOP myop;
1713     SV* res;
1714     bool oldcatch = CATCH_GET;
1715
1716     CATCH_SET(TRUE);
1717     Zero(&myop, 1, BINOP);
1718     myop.op_last = (OP *) &myop;
1719     myop.op_next = Nullop;
1720     myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1721
1722     PUSHSTACKi(PERLSI_OVERLOAD);
1723     ENTER;
1724     SAVEOP();
1725     PL_op = (OP *) &myop;
1726     if (PERLDB_SUB && PL_curstash != PL_debstash)
1727         PL_op->op_private |= OPpENTERSUB_DB;
1728     PUTBACK;
1729     pp_pushmark();
1730
1731     EXTEND(SP, notfound + 5);
1732     PUSHs(lr>0? right: left);
1733     PUSHs(lr>0? left: right);
1734     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1735     if (notfound) {
1736       PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1737     }
1738     PUSHs((SV*)cv);
1739     PUTBACK;
1740
1741     if ((PL_op = Perl_pp_entersub(aTHX)))
1742       CALLRUNOPS(aTHX);
1743     LEAVE;
1744     SPAGAIN;
1745
1746     res=POPs;
1747     PUTBACK;
1748     POPSTACK;
1749     CATCH_SET(oldcatch);
1750
1751     if (postpr) {
1752       int ans=0;
1753       switch (method) {
1754       case le_amg:
1755       case sle_amg:
1756         ans=SvIV(res)<=0; break;
1757       case lt_amg:
1758       case slt_amg:
1759         ans=SvIV(res)<0; break;
1760       case ge_amg:
1761       case sge_amg:
1762         ans=SvIV(res)>=0; break;
1763       case gt_amg:
1764       case sgt_amg:
1765         ans=SvIV(res)>0; break;
1766       case eq_amg:
1767       case seq_amg:
1768         ans=SvIV(res)==0; break;
1769       case ne_amg:
1770       case sne_amg:
1771         ans=SvIV(res)!=0; break;
1772       case inc_amg:
1773       case dec_amg:
1774         SvSetSV(left,res); return left;
1775       case not_amg:
1776         ans=!SvTRUE(res); break;
1777       }
1778       return boolSV(ans);
1779     } else if (method==copy_amg) {
1780       if (!SvROK(res)) {
1781         Perl_croak(aTHX_ "Copy method did not return a reference");
1782       }
1783       return SvREFCNT_inc(SvRV(res));
1784     } else {
1785       return res;
1786     }
1787   }
1788 }
1789
1790 /*
1791 =for apidoc is_gv_magical
1792
1793 Returns C<TRUE> if given the name of a magical GV.
1794
1795 Currently only useful internally when determining if a GV should be
1796 created even in rvalue contexts.
1797
1798 C<flags> is not used at present but available for future extension to
1799 allow selecting particular classes of magical variable.
1800
1801 =cut
1802 */
1803 bool
1804 Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags)
1805 {
1806     if (!len)
1807         return FALSE;
1808
1809     switch (*name) {
1810     case 'I':
1811         if (len == 3 && strEQ(name, "ISA"))
1812             goto yes;
1813         break;
1814     case 'O':
1815         if (len == 8 && strEQ(name, "OVERLOAD"))
1816             goto yes;
1817         break;
1818     case 'S':
1819         if (len == 3 && strEQ(name, "SIG"))
1820             goto yes;
1821         break;
1822     case '\017':   /* $^O & $^OPEN */
1823         if (len == 1
1824             || (len == 4 && strEQ(name, "\027PEN")))
1825         {
1826             goto yes;
1827         }
1828         break;
1829     case '\027':   /* $^W & $^WARNING_BITS */
1830         if (len == 1
1831             || (len == 12 && strEQ(name, "\027ARNING_BITS"))
1832             || (len == 17 && strEQ(name, "\027IDE_SYSTEM_CALLS")))
1833         {
1834             goto yes;
1835         }
1836         break;
1837
1838     case '&':
1839     case '`':
1840     case '\'':
1841     case ':':
1842     case '?':
1843     case '!':
1844     case '-':
1845     case '#':
1846     case '*':
1847     case '[':
1848     case '^':
1849     case '~':
1850     case '=':
1851     case '%':
1852     case '.':
1853     case '(':
1854     case ')':
1855     case '<':
1856     case '>':
1857     case ',':
1858     case '\\':
1859     case '/':
1860     case '|':
1861     case '+':
1862     case ';':
1863     case ']':
1864     case '\001':   /* $^A */
1865     case '\003':   /* $^C */
1866     case '\004':   /* $^D */
1867     case '\005':   /* $^E */
1868     case '\006':   /* $^F */
1869     case '\010':   /* $^H */
1870     case '\011':   /* $^I, NOT \t in EBCDIC */
1871     case '\014':   /* $^L */
1872     case '\016':   /* $^N */
1873     case '\020':   /* $^P */
1874     case '\023':   /* $^S */
1875     case '\026':   /* $^V */
1876         if (len == 1)
1877             goto yes;
1878         break;
1879     case '\024':   /* $^T, ${^TAINT} */
1880         if (len == 1 || strEQ(name, "\024AINT"))
1881             goto yes;
1882         break;
1883     case '1':
1884     case '2':
1885     case '3':
1886     case '4':
1887     case '5':
1888     case '6':
1889     case '7':
1890     case '8':
1891     case '9':
1892         if (len > 1) {
1893             char *end = name + len;
1894             while (--end > name) {
1895                 if (!isDIGIT(*end))
1896                     return FALSE;
1897             }
1898         }
1899     yes:
1900         return TRUE;
1901     default:
1902         break;
1903     }
1904     return FALSE;
1905 }