[Encode] 1.77 Released
[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             /* 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         }
770         return Nullgv;
771     }
772
773     if (!SvREFCNT(stash))       /* symbol table under destruction */
774         return Nullgv;
775
776     gvp = (GV**)hv_fetch(stash,name,len,add);
777     if (!gvp || *gvp == (GV*)&PL_sv_undef)
778         return Nullgv;
779     gv = *gvp;
780     if (SvTYPE(gv) == SVt_PVGV) {
781         if (add) {
782             GvMULTI_on(gv);
783             gv_init_sv(gv, sv_type);
784             if (*name=='!' && sv_type == SVt_PVHV && len==1)
785                 require_errno(gv);
786         }
787         return gv;
788     } else if (add & GV_NOINIT) {
789         return gv;
790     }
791
792     /* Adding a new symbol */
793
794     if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
795         Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
796     gv_init(gv, stash, name, len, add & GV_ADDMULTI);
797     gv_init_sv(gv, sv_type);
798
799     if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE) 
800                                             : (PL_dowarn & G_WARN_ON ) ) )
801         GvMULTI_on(gv) ;
802
803     /* set up magic where warranted */
804     switch (*name) {
805     case 'A':
806         if (strEQ(name, "ARGV")) {
807             IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
808         }
809         break;
810     case 'E':
811         if (strnEQ(name, "EXPORT", 6))
812             GvMULTI_on(gv);
813         break;
814     case 'I':
815         if (strEQ(name, "ISA")) {
816             AV* av = GvAVn(gv);
817             GvMULTI_on(gv);
818             sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
819             /* NOTE: No support for tied ISA */
820             if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
821                 && AvFILLp(av) == -1)
822             {
823                 char *pname;
824                 av_push(av, newSVpvn(pname = "NDBM_File",9));
825                 gv_stashpvn(pname, 9, TRUE);
826                 av_push(av, newSVpvn(pname = "DB_File",7));
827                 gv_stashpvn(pname, 7, TRUE);
828                 av_push(av, newSVpvn(pname = "GDBM_File",9));
829                 gv_stashpvn(pname, 9, TRUE);
830                 av_push(av, newSVpvn(pname = "SDBM_File",9));
831                 gv_stashpvn(pname, 9, TRUE);
832                 av_push(av, newSVpvn(pname = "ODBM_File",9));
833                 gv_stashpvn(pname, 9, TRUE);
834             }
835         }
836         break;
837     case 'O':
838         if (strEQ(name, "OVERLOAD")) {
839             HV* hv = GvHVn(gv);
840             GvMULTI_on(gv);
841             hv_magic(hv, Nullgv, PERL_MAGIC_overload);
842         }
843         break;
844     case 'S':
845         if (strEQ(name, "SIG")) {
846             HV *hv;
847             I32 i;
848             if (!PL_psig_ptr) {
849                 Newz(73, PL_psig_ptr,  SIG_SIZE, SV*);
850                 Newz(73, PL_psig_name, SIG_SIZE, SV*);
851                 Newz(73, PL_psig_pend, SIG_SIZE, int);
852             }
853             GvMULTI_on(gv);
854             hv = GvHVn(gv);
855             hv_magic(hv, Nullgv, PERL_MAGIC_sig);
856             for (i = 1; i < SIG_SIZE; i++) {
857                 SV ** init;
858                 init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
859                 if (init)
860                     sv_setsv(*init, &PL_sv_undef);
861                 PL_psig_ptr[i] = 0;
862                 PL_psig_name[i] = 0;
863                 PL_psig_pend[i] = 0;
864             }
865         }
866         break;
867     case 'V':
868         if (strEQ(name, "VERSION"))
869             GvMULTI_on(gv);
870         break;
871
872     case '&':
873     case '`':
874     case '\'':
875        if (
876            len > 1 ||
877            sv_type == SVt_PVAV ||
878            sv_type == SVt_PVHV ||
879            sv_type == SVt_PVCV ||
880            sv_type == SVt_PVFM ||
881            sv_type == SVt_PVIO
882        ) { break; }
883         PL_sawampersand = TRUE;
884         goto ro_magicalize;
885
886     case ':':
887         if (len > 1)
888             break;
889         sv_setpv(GvSV(gv),PL_chopset);
890         goto magicalize;
891
892     case '?':
893         if (len > 1)
894             break;
895 #ifdef COMPLEX_STATUS
896         (void)SvUPGRADE(GvSV(gv), SVt_PVLV);
897 #endif
898         goto magicalize;
899
900     case '!':
901         if (len > 1)
902             break;
903
904         /* If %! has been used, automatically load Errno.pm.
905            The require will itself set errno, so in order to
906            preserve its value we have to set up the magic
907            now (rather than going to magicalize)
908         */
909
910         sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
911
912         if (sv_type == SVt_PVHV)
913             require_errno(gv);
914
915         break;
916     case '-':
917         if (len > 1)
918             break;
919         else {
920             AV* av = GvAVn(gv);
921             sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
922             SvREADONLY_on(av);
923         }
924         goto magicalize;
925     case '#':
926     case '*':
927         if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && len == 1 && sv_type == SVt_PV)
928             Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX), "Use of $%s is deprecated", name);
929         /* FALL THROUGH */
930     case '[':
931     case '^':
932     case '~':
933     case '=':
934     case '%':
935     case '.':
936     case '(':
937     case ')':
938     case '<':
939     case '>':
940     case ',':
941     case '\\':
942     case '/':
943     case '\001':        /* $^A */
944     case '\003':        /* $^C */
945     case '\004':        /* $^D */
946     case '\006':        /* $^F */
947     case '\010':        /* $^H */
948     case '\011':        /* $^I, NOT \t in EBCDIC */
949     case '\016':        /* $^N */
950     case '\020':        /* $^P */
951         if (len > 1)
952             break;
953         goto magicalize;
954     case '|':
955         if (len > 1)
956             break;
957         sv_setiv(GvSV(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
958         goto magicalize;
959     case '\005':        /* $^E && $^ENCODING */
960         if (len > 1 && strNE(name, "\005NCODING"))
961             break;
962         goto magicalize;
963
964     case '\017':        /* $^O & $^OPEN */
965         if (len > 1 && strNE(name, "\017PEN"))
966             break;
967         goto magicalize;
968     case '\023':        /* $^S */
969         if (len > 1)
970             break;
971         goto ro_magicalize;
972     case '\024':        /* $^T, ${^TAINT} */
973         if (len == 1)
974             goto magicalize;
975         else if (strEQ(name, "\024AINT"))
976             goto ro_magicalize;
977         else
978             break;
979     case '\027':        /* $^W & $^WARNING_BITS */
980         if (len > 1 && strNE(name, "\027ARNING_BITS")
981             && strNE(name, "\027IDE_SYSTEM_CALLS"))
982             break;
983         goto magicalize;
984
985     case '+':
986         if (len > 1)
987             break;
988         else {
989             AV* av = GvAVn(gv);
990             sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
991             SvREADONLY_on(av);
992         }
993         /* FALL THROUGH */
994     case '1':
995     case '2':
996     case '3':
997     case '4':
998     case '5':
999     case '6':
1000     case '7':
1001     case '8':
1002     case '9':
1003         /* ensures variable is only digits */
1004         /* ${"1foo"} fails this test (and is thus writeable) */
1005         /* added by japhy, but borrowed from is_gv_magical */
1006
1007         if (len > 1) {
1008             const char *end = name + len;
1009             while (--end > name) {
1010                 if (!isDIGIT(*end)) return gv;
1011             }
1012         }
1013
1014       ro_magicalize:
1015         SvREADONLY_on(GvSV(gv));
1016       magicalize:
1017         sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1018         break;
1019
1020     case '\014':        /* $^L */
1021         if (len > 1)
1022             break;
1023         sv_setpv(GvSV(gv),"\f");
1024         PL_formfeed = GvSV(gv);
1025         break;
1026     case ';':
1027         if (len > 1)
1028             break;
1029         sv_setpv(GvSV(gv),"\034");
1030         break;
1031     case ']':
1032         if (len == 1) {
1033             SV *sv = GvSV(gv);
1034             (void)SvUPGRADE(sv, SVt_PVNV);
1035             Perl_sv_setpvf(aTHX_ sv,
1036 #if defined(PERL_SUBVERSION) && (PERL_SUBVERSION > 0)
1037                             "%8.6"
1038 #else
1039                             "%5.3"
1040 #endif
1041                             NVff,
1042                             SvNVX(PL_patchlevel));
1043             SvNVX(sv) = SvNVX(PL_patchlevel);
1044             SvNOK_on(sv);
1045             SvREADONLY_on(sv);
1046         }
1047         break;
1048     case '\026':        /* $^V */
1049         if (len == 1) {
1050             SV *sv = GvSV(gv);
1051             GvSV(gv) = SvREFCNT_inc(PL_patchlevel);
1052             SvREFCNT_dec(sv);
1053         }
1054         break;
1055     }
1056     return gv;
1057 }
1058
1059 void
1060 Perl_gv_fullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1061 {
1062     HV *hv = GvSTASH(gv);
1063     if (!hv) {
1064         (void)SvOK_off(sv);
1065         return;
1066     }
1067     sv_setpv(sv, prefix ? prefix : "");
1068     if (keepmain || strNE(HvNAME(hv), "main")) {
1069         sv_catpv(sv,HvNAME(hv));
1070         sv_catpvn(sv,"::", 2);
1071     }
1072     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1073 }
1074
1075 void
1076 Perl_gv_fullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1077 {
1078     gv_fullname4(sv, gv, prefix, TRUE);
1079 }
1080
1081 void
1082 Perl_gv_efullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1083 {
1084     GV *egv = GvEGV(gv);
1085     if (!egv)
1086         egv = gv;
1087     gv_fullname4(sv, egv, prefix, keepmain);
1088 }
1089
1090 void
1091 Perl_gv_efullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1092 {
1093     gv_efullname4(sv, gv, prefix, TRUE);
1094 }
1095
1096 /* XXX compatibility with versions <= 5.003. */
1097 void
1098 Perl_gv_fullname(pTHX_ SV *sv, GV *gv)
1099 {
1100     gv_fullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1101 }
1102
1103 /* XXX compatibility with versions <= 5.003. */
1104 void
1105 Perl_gv_efullname(pTHX_ SV *sv, GV *gv)
1106 {
1107     gv_efullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1108 }
1109
1110 IO *
1111 Perl_newIO(pTHX)
1112 {
1113     IO *io;
1114     GV *iogv;
1115
1116     io = (IO*)NEWSV(0,0);
1117     sv_upgrade((SV *)io,SVt_PVIO);
1118     SvREFCNT(io) = 1;
1119     SvOBJECT_on(io);
1120     iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
1121     /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1122     if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1123       iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
1124     SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
1125     return io;
1126 }
1127
1128 void
1129 Perl_gv_check(pTHX_ HV *stash)
1130 {
1131     register HE *entry;
1132     register I32 i;
1133     register GV *gv;
1134     HV *hv;
1135
1136     if (!HvARRAY(stash))
1137         return;
1138     for (i = 0; i <= (I32) HvMAX(stash); i++) {
1139         for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1140             if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1141                 (gv = (GV*)HeVAL(entry)) && (hv = GvHV(gv)))
1142             {
1143                 if (hv != PL_defstash && hv != stash)
1144                      gv_check(hv);              /* nested package */
1145             }
1146             else if (isALPHA(*HeKEY(entry))) {
1147                 char *file;
1148                 gv = (GV*)HeVAL(entry);
1149                 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1150                     continue;
1151                 file = GvFILE(gv);
1152                 /* performance hack: if filename is absolute and it's a standard
1153                  * module, don't bother warning */
1154                 if (file
1155                     && PERL_FILE_IS_ABSOLUTE(file)
1156 #ifdef MACOS_TRADITIONAL
1157                     && (instr(file, ":lib:")
1158 #else
1159                     && (instr(file, "/lib/")
1160 #endif
1161                     || instr(file, ".pm")))
1162                 {
1163                     continue;
1164                 }
1165                 CopLINE_set(PL_curcop, GvLINE(gv));
1166 #ifdef USE_ITHREADS
1167                 CopFILE(PL_curcop) = file;      /* set for warning */
1168 #else
1169                 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1170 #endif
1171                 Perl_warner(aTHX_ packWARN(WARN_ONCE),
1172                         "Name \"%s::%s\" used only once: possible typo",
1173                         HvNAME(stash), GvNAME(gv));
1174             }
1175         }
1176     }
1177 }
1178
1179 GV *
1180 Perl_newGVgen(pTHX_ char *pack)
1181 {
1182     return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1183                       TRUE, SVt_PVGV);
1184 }
1185
1186 /* hopefully this is only called on local symbol table entries */
1187
1188 GP*
1189 Perl_gp_ref(pTHX_ GP *gp)
1190 {
1191     if (!gp)
1192         return (GP*)NULL;
1193     gp->gp_refcnt++;
1194     if (gp->gp_cv) {
1195         if (gp->gp_cvgen) {
1196             /* multi-named GPs cannot be used for method cache */
1197             SvREFCNT_dec(gp->gp_cv);
1198             gp->gp_cv = Nullcv;
1199             gp->gp_cvgen = 0;
1200         }
1201         else {
1202             /* Adding a new name to a subroutine invalidates method cache */
1203             PL_sub_generation++;
1204         }
1205     }
1206     return gp;
1207 }
1208
1209 void
1210 Perl_gp_free(pTHX_ GV *gv)
1211 {
1212     GP* gp;
1213
1214     if (!gv || !(gp = GvGP(gv)))
1215         return;
1216     if (gp->gp_refcnt == 0) {
1217         if (ckWARN_d(WARN_INTERNAL))
1218             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1219                         "Attempt to free unreferenced glob pointers");
1220         return;
1221     }
1222     if (gp->gp_cv) {
1223         /* Deleting the name of a subroutine invalidates method cache */
1224         PL_sub_generation++;
1225     }
1226     if (--gp->gp_refcnt > 0) {
1227         if (gp->gp_egv == gv)
1228             gp->gp_egv = 0;
1229         return;
1230     }
1231
1232     SvREFCNT_dec(gp->gp_sv);
1233     SvREFCNT_dec(gp->gp_av);
1234     SvREFCNT_dec(gp->gp_hv);
1235     SvREFCNT_dec(gp->gp_io);
1236     SvREFCNT_dec(gp->gp_cv);
1237     SvREFCNT_dec(gp->gp_form);
1238
1239     Safefree(gp);
1240     GvGP(gv) = 0;
1241 }
1242
1243 int
1244 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1245 {
1246     AMT *amtp = (AMT*)mg->mg_ptr;
1247     if (amtp && AMT_AMAGIC(amtp)) {
1248         int i;
1249         for (i = 1; i < NofAMmeth; i++) {
1250             CV *cv = amtp->table[i];
1251             if (cv != Nullcv) {
1252                 SvREFCNT_dec((SV *) cv);
1253                 amtp->table[i] = Nullcv;
1254             }
1255         }
1256     }
1257  return 0;
1258 }
1259
1260 /* Updates and caches the CV's */
1261
1262 bool
1263 Perl_Gv_AMupdate(pTHX_ HV *stash)
1264 {
1265   GV* gv;
1266   CV* cv;
1267   MAGIC* mg=mg_find((SV*)stash, PERL_MAGIC_overload_table);
1268   AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1269   AMT amt;
1270
1271   if (mg && amtp->was_ok_am == PL_amagic_generation
1272       && amtp->was_ok_sub == PL_sub_generation)
1273       return (bool)AMT_OVERLOADED(amtp);
1274   sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1275
1276   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
1277
1278   Zero(&amt,1,AMT);
1279   amt.was_ok_am = PL_amagic_generation;
1280   amt.was_ok_sub = PL_sub_generation;
1281   amt.fallback = AMGfallNO;
1282   amt.flags = 0;
1283
1284   {
1285     int filled = 0, have_ovl = 0;
1286     int i, lim = 1;
1287     SV* sv = NULL;
1288
1289     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1290
1291     /* Try to find via inheritance. */
1292     gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1293     if (gv)
1294         sv = GvSV(gv);
1295
1296     if (!gv)
1297         lim = DESTROY_amg;              /* Skip overloading entries. */
1298     else if (SvTRUE(sv))
1299         amt.fallback=AMGfallYES;
1300     else if (SvOK(sv))
1301         amt.fallback=AMGfallNEVER;
1302
1303     for (i = 1; i < lim; i++)
1304         amt.table[i] = Nullcv;
1305     for (; i < NofAMmeth; i++) {
1306         char *cooky = (char*)PL_AMG_names[i];
1307         /* Human-readable form, for debugging: */
1308         char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1309         STRLEN l = strlen(cooky);
1310
1311         DEBUG_o( Perl_deb(aTHX_ "Checking overloading of `%s' in package `%.256s'\n",
1312                      cp, HvNAME(stash)) );
1313         /* don't fill the cache while looking up!
1314            Creation of inheritance stubs in intermediate packages may
1315            conflict with the logic of runtime method substitution.
1316            Indeed, for inheritance A -> B -> C, if C overloads "+0",
1317            then we could have created stubs for "(+0" in A and C too.
1318            But if B overloads "bool", we may want to use it for
1319            numifying instead of C's "+0". */
1320         if (i >= DESTROY_amg)
1321             gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1322         else                            /* Autoload taken care of below */
1323             gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1324         cv = 0;
1325         if (gv && (cv = GvCV(gv))) {
1326             if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1327                 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
1328                 /* This is a hack to support autoloading..., while
1329                    knowing *which* methods were declared as overloaded. */
1330                 /* GvSV contains the name of the method. */
1331                 GV *ngv = Nullgv;
1332                 
1333                 DEBUG_o( Perl_deb(aTHX_ "Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n",
1334                              SvPV_nolen(GvSV(gv)), cp, HvNAME(stash)) );
1335                 if (!SvPOK(GvSV(gv))
1336                     || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
1337                                                        FALSE)))
1338                 {
1339                     /* Can be an import stub (created by `can'). */
1340                     if (GvCVGEN(gv)) {
1341                         Perl_croak(aTHX_ "Stub found while resolving method `%.256s' overloading `%s' in package `%.256s'",
1342                               (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
1343                               cp, HvNAME(stash));
1344                     } else
1345                         Perl_croak(aTHX_ "Can't resolve method `%.256s' overloading `%s' in package `%.256s'",
1346                               (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
1347                               cp, HvNAME(stash));
1348                 }
1349                 cv = GvCV(gv = ngv);
1350             }
1351             DEBUG_o( Perl_deb(aTHX_ "Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
1352                          cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
1353                          GvNAME(CvGV(cv))) );
1354             filled = 1;
1355             if (i < DESTROY_amg)
1356                 have_ovl = 1;
1357         } else if (gv) {                /* Autoloaded... */
1358             cv = (CV*)gv;
1359             filled = 1;
1360         }
1361         amt.table[i]=(CV*)SvREFCNT_inc(cv);
1362     }
1363     if (filled) {
1364       AMT_AMAGIC_on(&amt);
1365       if (have_ovl)
1366           AMT_OVERLOADED_on(&amt);
1367       sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1368                                                 (char*)&amt, sizeof(AMT));
1369       return have_ovl;
1370     }
1371   }
1372   /* Here we have no table: */
1373   /* no_table: */
1374   AMT_AMAGIC_off(&amt);
1375   sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1376                                                 (char*)&amt, sizeof(AMTS));
1377   return FALSE;
1378 }
1379
1380
1381 CV*
1382 Perl_gv_handler(pTHX_ HV *stash, I32 id)
1383 {
1384     MAGIC *mg;
1385     AMT *amtp;
1386     CV *ret;
1387
1388     if (!stash)
1389         return Nullcv;
1390     mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1391     if (!mg) {
1392       do_update:
1393         Gv_AMupdate(stash);
1394         mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1395     }
1396     amtp = (AMT*)mg->mg_ptr;
1397     if ( amtp->was_ok_am != PL_amagic_generation
1398          || amtp->was_ok_sub != PL_sub_generation )
1399         goto do_update;
1400     if (AMT_AMAGIC(amtp)) {
1401         ret = amtp->table[id];
1402         if (ret && isGV(ret)) {         /* Autoloading stab */
1403             /* Passing it through may have resulted in a warning
1404                "Inherited AUTOLOAD for a non-method deprecated", since
1405                our caller is going through a function call, not a method call.
1406                So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1407             GV *gv = gv_fetchmethod(stash, (char*)PL_AMG_names[id]);
1408
1409             if (gv && GvCV(gv))
1410                 return GvCV(gv);
1411         }
1412         return ret;
1413     }
1414     
1415     return Nullcv;
1416 }
1417
1418
1419 SV*
1420 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1421 {
1422   MAGIC *mg;
1423   CV *cv=NULL;
1424   CV **cvp=NULL, **ocvp=NULL;
1425   AMT *amtp=NULL, *oamtp=NULL;
1426   int off=0, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
1427   int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
1428 #ifdef DEBUGGING
1429   int fl=0;
1430 #endif
1431   HV* stash=NULL;
1432   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1433       && (stash = SvSTASH(SvRV(left)))
1434       && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1435       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1436                         ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1437                         : (CV **) NULL))
1438       && ((cv = cvp[off=method+assignshift])
1439           || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1440                                                           * usual method */
1441                   (
1442 #ifdef DEBUGGING
1443                    fl = 1,
1444 #endif 
1445                    cv = cvp[off=method])))) {
1446     lr = -1;                    /* Call method for left argument */
1447   } else {
1448     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1449       int logic;
1450
1451       /* look for substituted methods */
1452       /* In all the covered cases we should be called with assign==0. */
1453          switch (method) {
1454          case inc_amg:
1455            force_cpy = 1;
1456            if ((cv = cvp[off=add_ass_amg])
1457                || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1458              right = &PL_sv_yes; lr = -1; assign = 1;
1459            }
1460            break;
1461          case dec_amg:
1462            force_cpy = 1;
1463            if ((cv = cvp[off = subtr_ass_amg])
1464                || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1465              right = &PL_sv_yes; lr = -1; assign = 1;
1466            }
1467            break;
1468          case bool__amg:
1469            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1470            break;
1471          case numer_amg:
1472            (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1473            break;
1474          case string_amg:
1475            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1476            break;
1477  case not_amg:
1478    (void)((cv = cvp[off=bool__amg])
1479           || (cv = cvp[off=numer_amg])
1480           || (cv = cvp[off=string_amg]));
1481    postpr = 1;
1482    break;
1483          case copy_amg:
1484            {
1485              /*
1486                   * SV* ref causes confusion with the interpreter variable of
1487                   * the same name
1488                   */
1489              SV* tmpRef=SvRV(left);
1490              if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1491                 /*
1492                  * Just to be extra cautious.  Maybe in some
1493                  * additional cases sv_setsv is safe, too.
1494                  */
1495                 SV* newref = newSVsv(tmpRef);
1496                 SvOBJECT_on(newref);
1497                 SvSTASH(newref) = (HV*)SvREFCNT_inc(SvSTASH(tmpRef));
1498                 return newref;
1499              }
1500            }
1501            break;
1502          case abs_amg:
1503            if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1504                && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1505              SV* nullsv=sv_2mortal(newSViv(0));
1506              if (off1==lt_amg) {
1507                SV* lessp = amagic_call(left,nullsv,
1508                                        lt_amg,AMGf_noright);
1509                logic = SvTRUE(lessp);
1510              } else {
1511                SV* lessp = amagic_call(left,nullsv,
1512                                        ncmp_amg,AMGf_noright);
1513                logic = (SvNV(lessp) < 0);
1514              }
1515              if (logic) {
1516                if (off==subtr_amg) {
1517                  right = left;
1518                  left = nullsv;
1519                  lr = 1;
1520                }
1521              } else {
1522                return left;
1523              }
1524            }
1525            break;
1526          case neg_amg:
1527            if ((cv = cvp[off=subtr_amg])) {
1528              right = left;
1529              left = sv_2mortal(newSViv(0));
1530              lr = 1;
1531            }
1532            break;
1533          case int_amg:
1534          case iter_amg:                 /* XXXX Eventually should do to_gv. */
1535              /* FAIL safe */
1536              return NULL;       /* Delegate operation to standard mechanisms. */
1537              break;
1538          case to_sv_amg:
1539          case to_av_amg:
1540          case to_hv_amg:
1541          case to_gv_amg:
1542          case to_cv_amg:
1543              /* FAIL safe */
1544              return left;       /* Delegate operation to standard mechanisms. */
1545              break;
1546          default:
1547            goto not_found;
1548          }
1549          if (!cv) goto not_found;
1550     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1551                && (stash = SvSTASH(SvRV(right)))
1552                && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1553                && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1554                           ? (amtp = (AMT*)mg->mg_ptr)->table
1555                           : (CV **) NULL))
1556                && (cv = cvp[off=method])) { /* Method for right
1557                                              * argument found */
1558       lr=1;
1559     } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1560                  && (cvp=ocvp) && (lr = -1))
1561                 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1562                && !(flags & AMGf_unary)) {
1563                                 /* We look for substitution for
1564                                  * comparison operations and
1565                                  * concatenation */
1566       if (method==concat_amg || method==concat_ass_amg
1567           || method==repeat_amg || method==repeat_ass_amg) {
1568         return NULL;            /* Delegate operation to string conversion */
1569       }
1570       off = -1;
1571       switch (method) {
1572          case lt_amg:
1573          case le_amg:
1574          case gt_amg:
1575          case ge_amg:
1576          case eq_amg:
1577          case ne_amg:
1578            postpr = 1; off=ncmp_amg; break;
1579          case slt_amg:
1580          case sle_amg:
1581          case sgt_amg:
1582          case sge_amg:
1583          case seq_amg:
1584          case sne_amg:
1585            postpr = 1; off=scmp_amg; break;
1586          }
1587       if (off != -1) cv = cvp[off];
1588       if (!cv) {
1589         goto not_found;
1590       }
1591     } else {
1592     not_found:                  /* No method found, either report or croak */
1593       switch (method) {
1594          case to_sv_amg:
1595          case to_av_amg:
1596          case to_hv_amg:
1597          case to_gv_amg:
1598          case to_cv_amg:
1599              /* FAIL safe */
1600              return left;       /* Delegate operation to standard mechanisms. */
1601              break;
1602       }
1603       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1604         notfound = 1; lr = -1;
1605       } else if (cvp && (cv=cvp[nomethod_amg])) {
1606         notfound = 1; lr = 1;
1607       } else {
1608         SV *msg;
1609         if (off==-1) off=method;
1610         msg = sv_2mortal(Perl_newSVpvf(aTHX_
1611                       "Operation `%s': no method found,%sargument %s%s%s%s",
1612                       AMG_id2name(method + assignshift),
1613                       (flags & AMGf_unary ? " " : "\n\tleft "),
1614                       SvAMAGIC(left)?
1615                         "in overloaded package ":
1616                         "has no overloaded magic",
1617                       SvAMAGIC(left)?
1618                         HvNAME(SvSTASH(SvRV(left))):
1619                         "",
1620                       SvAMAGIC(right)?
1621                         ",\n\tright argument in overloaded package ":
1622                         (flags & AMGf_unary
1623                          ? ""
1624                          : ",\n\tright argument has no overloaded magic"),
1625                       SvAMAGIC(right)?
1626                         HvNAME(SvSTASH(SvRV(right))):
1627                         ""));
1628         if (amtp && amtp->fallback >= AMGfallYES) {
1629           DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX(msg)) );
1630         } else {
1631           Perl_croak(aTHX_ "%"SVf, msg);
1632         }
1633         return NULL;
1634       }
1635       force_cpy = force_cpy || assign;
1636     }
1637   }
1638 #ifdef DEBUGGING
1639   if (!notfound) {
1640     DEBUG_o(Perl_deb(aTHX_
1641                      "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1642                      AMG_id2name(off),
1643                      method+assignshift==off? "" :
1644                      " (initially `",
1645                      method+assignshift==off? "" :
1646                      AMG_id2name(method+assignshift),
1647                      method+assignshift==off? "" : "')",
1648                      flags & AMGf_unary? "" :
1649                      lr==1 ? " for right argument": " for left argument",
1650                      flags & AMGf_unary? " for argument" : "",
1651                      stash ? HvNAME(stash) : "null",
1652                      fl? ",\n\tassignment variant used": "") );
1653   }
1654 #endif
1655     /* Since we use shallow copy during assignment, we need
1656      * to dublicate the contents, probably calling user-supplied
1657      * version of copy operator
1658      */
1659     /* We need to copy in following cases:
1660      * a) Assignment form was called.
1661      *          assignshift==1,  assign==T, method + 1 == off
1662      * b) Increment or decrement, called directly.
1663      *          assignshift==0,  assign==0, method + 0 == off
1664      * c) Increment or decrement, translated to assignment add/subtr.
1665      *          assignshift==0,  assign==T,
1666      *          force_cpy == T
1667      * d) Increment or decrement, translated to nomethod.
1668      *          assignshift==0,  assign==0,
1669      *          force_cpy == T
1670      * e) Assignment form translated to nomethod.
1671      *          assignshift==1,  assign==T, method + 1 != off
1672      *          force_cpy == T
1673      */
1674     /*  off is method, method+assignshift, or a result of opcode substitution.
1675      *  In the latter case assignshift==0, so only notfound case is important.
1676      */
1677   if (( (method + assignshift == off)
1678         && (assign || (method == inc_amg) || (method == dec_amg)))
1679       || force_cpy)
1680     RvDEEPCP(left);
1681   {
1682     dSP;
1683     BINOP myop;
1684     SV* res;
1685     bool oldcatch = CATCH_GET;
1686
1687     CATCH_SET(TRUE);
1688     Zero(&myop, 1, BINOP);
1689     myop.op_last = (OP *) &myop;
1690     myop.op_next = Nullop;
1691     myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1692
1693     PUSHSTACKi(PERLSI_OVERLOAD);
1694     ENTER;
1695     SAVEOP();
1696     PL_op = (OP *) &myop;
1697     if (PERLDB_SUB && PL_curstash != PL_debstash)
1698         PL_op->op_private |= OPpENTERSUB_DB;
1699     PUTBACK;
1700     pp_pushmark();
1701
1702     EXTEND(SP, notfound + 5);
1703     PUSHs(lr>0? right: left);
1704     PUSHs(lr>0? left: right);
1705     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1706     if (notfound) {
1707       PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1708     }
1709     PUSHs((SV*)cv);
1710     PUTBACK;
1711
1712     if ((PL_op = Perl_pp_entersub(aTHX)))
1713       CALLRUNOPS(aTHX);
1714     LEAVE;
1715     SPAGAIN;
1716
1717     res=POPs;
1718     PUTBACK;
1719     POPSTACK;
1720     CATCH_SET(oldcatch);
1721
1722     if (postpr) {
1723       int ans=0;
1724       switch (method) {
1725       case le_amg:
1726       case sle_amg:
1727         ans=SvIV(res)<=0; break;
1728       case lt_amg:
1729       case slt_amg:
1730         ans=SvIV(res)<0; break;
1731       case ge_amg:
1732       case sge_amg:
1733         ans=SvIV(res)>=0; break;
1734       case gt_amg:
1735       case sgt_amg:
1736         ans=SvIV(res)>0; break;
1737       case eq_amg:
1738       case seq_amg:
1739         ans=SvIV(res)==0; break;
1740       case ne_amg:
1741       case sne_amg:
1742         ans=SvIV(res)!=0; break;
1743       case inc_amg:
1744       case dec_amg:
1745         SvSetSV(left,res); return left;
1746       case not_amg:
1747         ans=!SvTRUE(res); break;
1748       }
1749       return boolSV(ans);
1750     } else if (method==copy_amg) {
1751       if (!SvROK(res)) {
1752         Perl_croak(aTHX_ "Copy method did not return a reference");
1753       }
1754       return SvREFCNT_inc(SvRV(res));
1755     } else {
1756       return res;
1757     }
1758   }
1759 }
1760
1761 /*
1762 =for apidoc is_gv_magical
1763
1764 Returns C<TRUE> if given the name of a magical GV.
1765
1766 Currently only useful internally when determining if a GV should be
1767 created even in rvalue contexts.
1768
1769 C<flags> is not used at present but available for future extension to
1770 allow selecting particular classes of magical variable.
1771
1772 =cut
1773 */
1774 bool
1775 Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags)
1776 {
1777     if (!len)
1778         return FALSE;
1779
1780     switch (*name) {
1781     case 'I':
1782         if (len == 3 && strEQ(name, "ISA"))
1783             goto yes;
1784         break;
1785     case 'O':
1786         if (len == 8 && strEQ(name, "OVERLOAD"))
1787             goto yes;
1788         break;
1789     case 'S':
1790         if (len == 3 && strEQ(name, "SIG"))
1791             goto yes;
1792         break;
1793     case '\017':   /* $^O & $^OPEN */
1794         if (len == 1
1795             || (len == 4 && strEQ(name, "\017PEN")))
1796         {
1797             goto yes;
1798         }
1799         break;
1800     case '\027':   /* $^W & $^WARNING_BITS */
1801         if (len == 1
1802             || (len == 12 && strEQ(name, "\027ARNING_BITS"))
1803             || (len == 17 && strEQ(name, "\027IDE_SYSTEM_CALLS")))
1804         {
1805             goto yes;
1806         }
1807         break;
1808
1809     case '&':
1810     case '`':
1811     case '\'':
1812     case ':':
1813     case '?':
1814     case '!':
1815     case '-':
1816     case '#':
1817     case '*':
1818     case '[':
1819     case '^':
1820     case '~':
1821     case '=':
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 '\001':   /* $^A */
1836     case '\003':   /* $^C */
1837     case '\004':   /* $^D */
1838     case '\005':   /* $^E */
1839     case '\006':   /* $^F */
1840     case '\010':   /* $^H */
1841     case '\011':   /* $^I, NOT \t in EBCDIC */
1842     case '\014':   /* $^L */
1843     case '\016':   /* $^N */
1844     case '\020':   /* $^P */
1845     case '\023':   /* $^S */
1846     case '\026':   /* $^V */
1847         if (len == 1)
1848             goto yes;
1849         break;
1850     case '\024':   /* $^T, ${^TAINT} */
1851         if (len == 1 || strEQ(name, "\024AINT"))
1852             goto yes;
1853         break;
1854     case '1':
1855     case '2':
1856     case '3':
1857     case '4':
1858     case '5':
1859     case '6':
1860     case '7':
1861     case '8':
1862     case '9':
1863         if (len > 1) {
1864             char *end = name + len;
1865             while (--end > name) {
1866                 if (!isDIGIT(*end))
1867                     return FALSE;
1868             }
1869         }
1870     yes:
1871         return TRUE;
1872     default:
1873         break;
1874     }
1875     return FALSE;
1876 }