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