YA resync with mainstem, including VMS patches from others
[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") || strEQ(name,"unimport"))
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_fullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
923 {
924     HV *hv = GvSTASH(gv);
925     if (!hv) {
926         (void)SvOK_off(sv);
927         return;
928     }
929     sv_setpv(sv, prefix ? prefix : "");
930     if (keepmain || strNE(HvNAME(hv), "main")) {
931         sv_catpv(sv,HvNAME(hv));
932         sv_catpvn(sv,"::", 2);
933     }
934     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
935 }
936
937 void
938 Perl_gv_fullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
939 {
940     HV *hv = GvSTASH(gv);
941     if (!hv) {
942         (void)SvOK_off(sv);
943         return;
944     }
945     sv_setpv(sv, prefix ? prefix : "");
946     sv_catpv(sv,HvNAME(hv));
947     sv_catpvn(sv,"::", 2);
948     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
949 }
950
951 void
952 Perl_gv_efullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
953 {
954     GV *egv = GvEGV(gv);
955     if (!egv)
956         egv = gv;
957     gv_fullname4(sv, egv, prefix, keepmain);
958 }
959
960 void
961 Perl_gv_efullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
962 {
963     GV *egv = GvEGV(gv);
964     if (!egv)
965         egv = gv;
966     gv_fullname3(sv, egv, prefix);
967 }
968
969 /* XXX compatibility with versions <= 5.003. */
970 void
971 Perl_gv_fullname(pTHX_ SV *sv, GV *gv)
972 {
973     gv_fullname3(sv, gv, sv == (SV*)gv ? "*" : "");
974 }
975
976 /* XXX compatibility with versions <= 5.003. */
977 void
978 Perl_gv_efullname(pTHX_ SV *sv, GV *gv)
979 {
980     gv_efullname3(sv, gv, sv == (SV*)gv ? "*" : "");
981 }
982
983 IO *
984 Perl_newIO(pTHX)
985 {
986     dTHR;
987     IO *io;
988     GV *iogv;
989
990     io = (IO*)NEWSV(0,0);
991     sv_upgrade((SV *)io,SVt_PVIO);
992     SvREFCNT(io) = 1;
993     SvOBJECT_on(io);
994     iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
995     /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
996     if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
997       iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
998     SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
999     return io;
1000 }
1001
1002 void
1003 Perl_gv_check(pTHX_ HV *stash)
1004 {
1005     dTHR;
1006     register HE *entry;
1007     register I32 i;
1008     register GV *gv;
1009     HV *hv;
1010
1011     if (!HvARRAY(stash))
1012         return;
1013     for (i = 0; i <= (I32) HvMAX(stash); i++) {
1014         for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1015             if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1016                 (gv = (GV*)HeVAL(entry)) && (hv = GvHV(gv)) && HvNAME(hv))
1017             {
1018                 if (hv != PL_defstash && hv != stash)
1019                      gv_check(hv);              /* nested package */
1020             }
1021             else if (isALPHA(*HeKEY(entry))) {
1022                 char *file;
1023                 gv = (GV*)HeVAL(entry);
1024                 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1025                     continue;
1026                 file = GvFILE(gv);
1027                 /* performance hack: if filename is absolute and it's a standard
1028                  * module, don't bother warning */
1029                 if (file
1030                     && PERL_FILE_IS_ABSOLUTE(file)
1031                     && (instr(file, "/lib/") || instr(file, ".pm")))
1032                 {
1033                     continue;
1034                 }
1035                 CopLINE_set(PL_curcop, GvLINE(gv));
1036 #ifdef USE_ITHREADS
1037                 CopFILE(PL_curcop) = file;      /* set for warning */
1038 #else
1039                 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1040 #endif
1041                 Perl_warner(aTHX_ WARN_ONCE,
1042                         "Name \"%s::%s\" used only once: possible typo",
1043                         HvNAME(stash), GvNAME(gv));
1044             }
1045         }
1046     }
1047 }
1048
1049 GV *
1050 Perl_newGVgen(pTHX_ char *pack)
1051 {
1052     return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1053                       TRUE, SVt_PVGV);
1054 }
1055
1056 /* hopefully this is only called on local symbol table entries */
1057
1058 GP*
1059 Perl_gp_ref(pTHX_ GP *gp)
1060 {
1061     if (!gp)
1062         return (GP*)NULL;
1063     gp->gp_refcnt++;
1064     if (gp->gp_cv) {
1065         if (gp->gp_cvgen) {
1066             /* multi-named GPs cannot be used for method cache */
1067             SvREFCNT_dec(gp->gp_cv);
1068             gp->gp_cv = Nullcv;
1069             gp->gp_cvgen = 0;
1070         }
1071         else {
1072             /* Adding a new name to a subroutine invalidates method cache */
1073             PL_sub_generation++;
1074         }
1075     }
1076     return gp;
1077 }
1078
1079 void
1080 Perl_gp_free(pTHX_ GV *gv)
1081 {
1082     dTHR;  
1083     GP* gp;
1084
1085     if (!gv || !(gp = GvGP(gv)))
1086         return;
1087     if (gp->gp_refcnt == 0) {
1088         if (ckWARN_d(WARN_INTERNAL))
1089             Perl_warner(aTHX_ WARN_INTERNAL,
1090                         "Attempt to free unreferenced glob pointers");
1091         return;
1092     }
1093     if (gp->gp_cv) {
1094         /* Deleting the name of a subroutine invalidates method cache */
1095         PL_sub_generation++;
1096     }
1097     if (--gp->gp_refcnt > 0) {
1098         if (gp->gp_egv == gv)
1099             gp->gp_egv = 0;
1100         return;
1101     }
1102
1103     SvREFCNT_dec(gp->gp_sv);
1104     SvREFCNT_dec(gp->gp_av);
1105     SvREFCNT_dec(gp->gp_hv);
1106     SvREFCNT_dec(gp->gp_io);
1107     SvREFCNT_dec(gp->gp_cv);
1108     SvREFCNT_dec(gp->gp_form);
1109
1110     Safefree(gp);
1111     GvGP(gv) = 0;
1112 }
1113
1114 #if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
1115 #define MICROPORT
1116 #endif
1117
1118 #ifdef  MICROPORT       /* Microport 2.4 hack */
1119 AV *GvAVn(gv)
1120 register GV *gv;
1121 {
1122     if (GvGP(gv)->gp_av) 
1123         return GvGP(gv)->gp_av;
1124     else
1125         return GvGP(gv_AVadd(gv))->gp_av;
1126 }
1127
1128 HV *GvHVn(gv)
1129 register GV *gv;
1130 {
1131     if (GvGP(gv)->gp_hv)
1132         return GvGP(gv)->gp_hv;
1133     else
1134         return GvGP(gv_HVadd(gv))->gp_hv;
1135 }
1136 #endif                  /* Microport 2.4 hack */
1137
1138 /* Updates and caches the CV's */
1139
1140 bool
1141 Perl_Gv_AMupdate(pTHX_ HV *stash)
1142 {
1143   dTHR;
1144   GV* gv;
1145   CV* cv;
1146   MAGIC* mg=mg_find((SV*)stash,'c');
1147   AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1148   AMT amt;
1149   STRLEN n_a;
1150 #ifdef OVERLOAD_VIA_HASH
1151   GV** gvp;
1152   HV* hv;
1153 #endif
1154
1155   if (mg && amtp->was_ok_am == PL_amagic_generation
1156       && amtp->was_ok_sub == PL_sub_generation)
1157       return AMT_AMAGIC(amtp);
1158   if (amtp && AMT_AMAGIC(amtp)) {       /* Have table. */
1159     int i;
1160     for (i=1; i<NofAMmeth; i++) {
1161       if (amtp->table[i]) {
1162         SvREFCNT_dec(amtp->table[i]);
1163       }
1164     }
1165   }
1166   sv_unmagic((SV*)stash, 'c');
1167
1168   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
1169
1170   amt.was_ok_am = PL_amagic_generation;
1171   amt.was_ok_sub = PL_sub_generation;
1172   amt.fallback = AMGfallNO;
1173   amt.flags = 0;
1174
1175 #ifdef OVERLOAD_VIA_HASH
1176   gvp=(GV**)hv_fetch(stash,"OVERLOAD",8,FALSE); /* A shortcut */
1177   if (gvp && ((gv = *gvp) != (GV*)&PL_sv_undef && (hv = GvHV(gv)))) {
1178     int filled=0;
1179     int i;
1180     char *cp;
1181     SV* sv;
1182     SV** svp;
1183
1184     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1185
1186     if (( cp = (char *)PL_AMG_names[0] ) &&
1187         (svp = (SV**)hv_fetch(hv,cp,strlen(cp),FALSE)) && (sv = *svp)) {
1188       if (SvTRUE(sv)) amt.fallback=AMGfallYES;
1189       else if (SvOK(sv)) amt.fallback=AMGfallNEVER;
1190     }
1191     for (i = 1; i < NofAMmeth; i++) {
1192       cv = 0;
1193       cp = (char *)PL_AMG_names[i];
1194       
1195         svp = (SV**)hv_fetch(hv, cp, strlen(cp), FALSE);
1196         if (svp && ((sv = *svp) != &PL_sv_undef)) {
1197           switch (SvTYPE(sv)) {
1198             default:
1199               if (!SvROK(sv)) {
1200                 if (!SvOK(sv)) break;
1201                 gv = gv_fetchmethod(stash, SvPV(sv, n_a));
1202                 if (gv) cv = GvCV(gv);
1203                 break;
1204               }
1205               cv = (CV*)SvRV(sv);
1206               if (SvTYPE(cv) == SVt_PVCV)
1207                   break;
1208                 /* FALL THROUGH */
1209             case SVt_PVHV:
1210             case SVt_PVAV:
1211               Perl_croak(aTHX_ "Not a subroutine reference in overload table");
1212               return FALSE;
1213             case SVt_PVCV:
1214               cv = (CV*)sv;
1215               break;
1216             case SVt_PVGV:
1217               if (!(cv = GvCVu((GV*)sv)))
1218                 cv = sv_2cv(sv, &stash, &gv, FALSE);
1219               break;
1220           }
1221           if (cv) filled=1;
1222           else {
1223             Perl_croak(aTHX_ "Method for operation %s not found in package %.256s during blessing\n",
1224                 cp,HvNAME(stash));
1225             return FALSE;
1226           }
1227         }
1228 #else
1229   {
1230     int filled = 0;
1231     int i;
1232     const char *cp;
1233     SV* sv = NULL;
1234
1235     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1236
1237     if ((cp = PL_AMG_names[0])) {
1238         /* Try to find via inheritance. */
1239         gv = gv_fetchmeth(stash, "()", 2, -1); /* A cookie: "()". */
1240         if (gv)
1241             sv = GvSV(gv);
1242
1243         if (!gv)
1244             goto no_table;
1245         else if (SvTRUE(sv))
1246             amt.fallback=AMGfallYES;
1247         else if (SvOK(sv))
1248             amt.fallback=AMGfallNEVER;
1249     }
1250
1251     for (i = 1; i < NofAMmeth; i++) {
1252         SV *cookie = sv_2mortal(Perl_newSVpvf(aTHX_ "(%s", cp = PL_AMG_names[i]));
1253         DEBUG_o( Perl_deb(aTHX_ "Checking overloading of `%s' in package `%.256s'\n",
1254                      cp, HvNAME(stash)) );
1255         /* don't fill the cache while looking up! */
1256         gv = gv_fetchmeth(stash, SvPVX(cookie), SvCUR(cookie), -1);
1257         cv = 0;
1258         if(gv && (cv = GvCV(gv))) {
1259             if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1260                 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
1261                 /* GvSV contains the name of the method. */
1262                 GV *ngv;
1263                 
1264                 DEBUG_o( Perl_deb(aTHX_ "Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n", 
1265                              SvPV(GvSV(gv), n_a), cp, HvNAME(stash)) );
1266                 if (!SvPOK(GvSV(gv)) 
1267                     || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
1268                                                        FALSE)))
1269                 {
1270                     /* Can be an import stub (created by `can'). */
1271                     if (GvCVGEN(gv)) {
1272                         Perl_croak(aTHX_ "Stub found while resolving method `%.256s' overloading `%s' in package `%.256s'", 
1273                               (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
1274                               cp, HvNAME(stash));
1275                     } else
1276                         Perl_croak(aTHX_ "Can't resolve method `%.256s' overloading `%s' in package `%.256s'", 
1277                               (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
1278                               cp, HvNAME(stash));
1279                 }
1280                 cv = GvCV(gv = ngv);
1281             }
1282             DEBUG_o( Perl_deb(aTHX_ "Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
1283                          cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
1284                          GvNAME(CvGV(cv))) );
1285             filled = 1;
1286         }
1287 #endif 
1288         amt.table[i]=(CV*)SvREFCNT_inc(cv);
1289     }
1290     if (filled) {
1291       AMT_AMAGIC_on(&amt);
1292       sv_magic((SV*)stash, 0, 'c', (char*)&amt, sizeof(AMT));
1293       return TRUE;
1294     }
1295   }
1296   /* Here we have no table: */
1297  no_table:
1298   AMT_AMAGIC_off(&amt);
1299   sv_magic((SV*)stash, 0, 'c', (char*)&amt, sizeof(AMTS));
1300   return FALSE;
1301 }
1302
1303 SV*
1304 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1305 {
1306   dTHR;
1307   MAGIC *mg; 
1308   CV *cv; 
1309   CV **cvp=NULL, **ocvp=NULL;
1310   AMT *amtp, *oamtp;
1311   int fl=0, off, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
1312   int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
1313   HV* stash;
1314   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1315       && (mg = mg_find((SV*)(stash=SvSTASH(SvRV(left))),'c'))
1316       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr) 
1317                         ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1318                         : (CV **) NULL))
1319       && ((cv = cvp[off=method+assignshift]) 
1320           || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1321                                                           * usual method */
1322                   (fl = 1, cv = cvp[off=method])))) {
1323     lr = -1;                    /* Call method for left argument */
1324   } else {
1325     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1326       int logic;
1327
1328       /* look for substituted methods */
1329       /* In all the covered cases we should be called with assign==0. */
1330          switch (method) {
1331          case inc_amg:
1332            force_cpy = 1;
1333            if ((cv = cvp[off=add_ass_amg])
1334                || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1335              right = &PL_sv_yes; lr = -1; assign = 1;
1336            }
1337            break;
1338          case dec_amg:
1339            force_cpy = 1;
1340            if ((cv = cvp[off = subtr_ass_amg])
1341                || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1342              right = &PL_sv_yes; lr = -1; assign = 1;
1343            }
1344            break;
1345          case bool__amg:
1346            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1347            break;
1348          case numer_amg:
1349            (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1350            break;
1351          case string_amg:
1352            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1353            break;
1354  case not_amg:
1355    (void)((cv = cvp[off=bool__amg]) 
1356           || (cv = cvp[off=numer_amg])
1357           || (cv = cvp[off=string_amg]));
1358    postpr = 1;
1359    break;
1360          case copy_amg:
1361            {
1362              /*
1363                   * SV* ref causes confusion with the interpreter variable of
1364                   * the same name
1365                   */
1366              SV* tmpRef=SvRV(left);
1367              if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1368                 /*
1369                  * Just to be extra cautious.  Maybe in some
1370                  * additional cases sv_setsv is safe, too.
1371                  */
1372                 SV* newref = newSVsv(tmpRef);
1373                 SvOBJECT_on(newref);
1374                 SvSTASH(newref) = (HV*)SvREFCNT_inc(SvSTASH(tmpRef));
1375                 return newref;
1376              }
1377            }
1378            break;
1379          case abs_amg:
1380            if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg]) 
1381                && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1382              SV* nullsv=sv_2mortal(newSViv(0));
1383              if (off1==lt_amg) {
1384                SV* lessp = amagic_call(left,nullsv,
1385                                        lt_amg,AMGf_noright);
1386                logic = SvTRUE(lessp);
1387              } else {
1388                SV* lessp = amagic_call(left,nullsv,
1389                                        ncmp_amg,AMGf_noright);
1390                logic = (SvNV(lessp) < 0);
1391              }
1392              if (logic) {
1393                if (off==subtr_amg) {
1394                  right = left;
1395                  left = nullsv;
1396                  lr = 1;
1397                }
1398              } else {
1399                return left;
1400              }
1401            }
1402            break;
1403          case neg_amg:
1404            if ((cv = cvp[off=subtr_amg])) {
1405              right = left;
1406              left = sv_2mortal(newSViv(0));
1407              lr = 1;
1408            }
1409            break;
1410          case iter_amg:                 /* XXXX Eventually should do to_gv. */
1411          case to_sv_amg:
1412          case to_av_amg:
1413          case to_hv_amg:
1414          case to_gv_amg:
1415          case to_cv_amg:
1416              /* FAIL safe */
1417              return NULL;       /* Delegate operation to standard mechanisms. */
1418              break;
1419          default:
1420            goto not_found;
1421          }
1422          if (!cv) goto not_found;
1423     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1424                && (mg = mg_find((SV*)(stash=SvSTASH(SvRV(right))),'c'))
1425                && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr) 
1426                           ? (amtp = (AMT*)mg->mg_ptr)->table
1427                           : (CV **) NULL))
1428                && (cv = cvp[off=method])) { /* Method for right
1429                                              * argument found */
1430       lr=1;
1431     } else if (((ocvp && oamtp->fallback > AMGfallNEVER 
1432                  && (cvp=ocvp) && (lr = -1)) 
1433                 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1434                && !(flags & AMGf_unary)) {
1435                                 /* We look for substitution for
1436                                  * comparison operations and
1437                                  * concatenation */
1438       if (method==concat_amg || method==concat_ass_amg
1439           || method==repeat_amg || method==repeat_ass_amg) {
1440         return NULL;            /* Delegate operation to string conversion */
1441       }
1442       off = -1;
1443       switch (method) {
1444          case lt_amg:
1445          case le_amg:
1446          case gt_amg:
1447          case ge_amg:
1448          case eq_amg:
1449          case ne_amg:
1450            postpr = 1; off=ncmp_amg; break;
1451          case slt_amg:
1452          case sle_amg:
1453          case sgt_amg:
1454          case sge_amg:
1455          case seq_amg:
1456          case sne_amg:
1457            postpr = 1; off=scmp_amg; break;
1458          }
1459       if (off != -1) cv = cvp[off];
1460       if (!cv) {
1461         goto not_found;
1462       }
1463     } else {
1464     not_found:                  /* No method found, either report or croak */
1465       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1466         notfound = 1; lr = -1;
1467       } else if (cvp && (cv=cvp[nomethod_amg])) {
1468         notfound = 1; lr = 1;
1469       } else {
1470         SV *msg;
1471         if (off==-1) off=method;
1472         msg = sv_2mortal(Perl_newSVpvf(aTHX_ 
1473                       "Operation `%s': no method found,%sargument %s%s%s%s",
1474                       PL_AMG_names[method + assignshift],
1475                       (flags & AMGf_unary ? " " : "\n\tleft "),
1476                       SvAMAGIC(left)? 
1477                         "in overloaded package ":
1478                         "has no overloaded magic",
1479                       SvAMAGIC(left)? 
1480                         HvNAME(SvSTASH(SvRV(left))):
1481                         "",
1482                       SvAMAGIC(right)? 
1483                         ",\n\tright argument in overloaded package ":
1484                         (flags & AMGf_unary 
1485                          ? ""
1486                          : ",\n\tright argument has no overloaded magic"),
1487                       SvAMAGIC(right)? 
1488                         HvNAME(SvSTASH(SvRV(right))):
1489                         ""));
1490         if (amtp && amtp->fallback >= AMGfallYES) {
1491           DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX(msg)) );
1492         } else {
1493           Perl_croak(aTHX_ "%"SVf, msg);
1494         }
1495         return NULL;
1496       }
1497       force_cpy = force_cpy || assign;
1498     }
1499   }
1500   if (!notfound) {
1501     DEBUG_o( Perl_deb(aTHX_ 
1502   "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1503                  PL_AMG_names[off],
1504                  method+assignshift==off? "" :
1505                              " (initially `",
1506                  method+assignshift==off? "" :
1507                              PL_AMG_names[method+assignshift],
1508                  method+assignshift==off? "" : "')",
1509                  flags & AMGf_unary? "" :
1510                    lr==1 ? " for right argument": " for left argument",
1511                  flags & AMGf_unary? " for argument" : "",
1512                  HvNAME(stash), 
1513                  fl? ",\n\tassignment variant used": "") );
1514   }
1515     /* Since we use shallow copy during assignment, we need
1516      * to dublicate the contents, probably calling user-supplied
1517      * version of copy operator
1518      */
1519     /* We need to copy in following cases:
1520      * a) Assignment form was called.
1521      *          assignshift==1,  assign==T, method + 1 == off
1522      * b) Increment or decrement, called directly.
1523      *          assignshift==0,  assign==0, method + 0 == off
1524      * c) Increment or decrement, translated to assignment add/subtr.
1525      *          assignshift==0,  assign==T, 
1526      *          force_cpy == T
1527      * d) Increment or decrement, translated to nomethod.
1528      *          assignshift==0,  assign==0, 
1529      *          force_cpy == T
1530      * e) Assignment form translated to nomethod.
1531      *          assignshift==1,  assign==T, method + 1 != off
1532      *          force_cpy == T
1533      */
1534     /*  off is method, method+assignshift, or a result of opcode substitution.
1535      *  In the latter case assignshift==0, so only notfound case is important.
1536      */
1537   if (( (method + assignshift == off)
1538         && (assign || (method == inc_amg) || (method == dec_amg)))
1539       || force_cpy)
1540     RvDEEPCP(left);
1541   {
1542     dSP;
1543     BINOP myop;
1544     SV* res;
1545     bool oldcatch = CATCH_GET;
1546
1547     CATCH_SET(TRUE);
1548     Zero(&myop, 1, BINOP);
1549     myop.op_last = (OP *) &myop;
1550     myop.op_next = Nullop;
1551     myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1552
1553     PUSHSTACKi(PERLSI_OVERLOAD);
1554     ENTER;
1555     SAVEOP();
1556     PL_op = (OP *) &myop;
1557     if (PERLDB_SUB && PL_curstash != PL_debstash)
1558         PL_op->op_private |= OPpENTERSUB_DB;
1559     PUTBACK;
1560     pp_pushmark();
1561
1562     EXTEND(SP, notfound + 5);
1563     PUSHs(lr>0? right: left);
1564     PUSHs(lr>0? left: right);
1565     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1566     if (notfound) {
1567       PUSHs( sv_2mortal(newSVpv((char *)PL_AMG_names[method + assignshift],0)));
1568     }
1569     PUSHs((SV*)cv);
1570     PUTBACK;
1571
1572     if ((PL_op = Perl_pp_entersub(aTHX)))
1573       CALLRUNOPS(aTHX);
1574     LEAVE;
1575     SPAGAIN;
1576
1577     res=POPs;
1578     PUTBACK;
1579     POPSTACK;
1580     CATCH_SET(oldcatch);
1581
1582     if (postpr) {
1583       int ans;
1584       switch (method) {
1585       case le_amg:
1586       case sle_amg:
1587         ans=SvIV(res)<=0; break;
1588       case lt_amg:
1589       case slt_amg:
1590         ans=SvIV(res)<0; break;
1591       case ge_amg:
1592       case sge_amg:
1593         ans=SvIV(res)>=0; break;
1594       case gt_amg:
1595       case sgt_amg:
1596         ans=SvIV(res)>0; break;
1597       case eq_amg:
1598       case seq_amg:
1599         ans=SvIV(res)==0; break;
1600       case ne_amg:
1601       case sne_amg:
1602         ans=SvIV(res)!=0; break;
1603       case inc_amg:
1604       case dec_amg:
1605         SvSetSV(left,res); return left;
1606       case not_amg:
1607         ans=!SvTRUE(res); break;
1608       }
1609       return boolSV(ans);
1610     } else if (method==copy_amg) {
1611       if (!SvROK(res)) {
1612         Perl_croak(aTHX_ "Copy method did not return a reference");
1613       }
1614       return SvREFCNT_inc(SvRV(res));
1615     } else {
1616       return res;
1617     }
1618   }
1619 }
1620
1621 /*
1622 =for apidoc is_gv_magical
1623
1624 Returns C<TRUE> if given the name of a magical GV.
1625
1626 Currently only useful internally when determining if a GV should be
1627 created even in rvalue contexts.
1628
1629 C<flags> is not used at present but available for future extension to
1630 allow selecting particular classes of magical variable.
1631
1632 =cut
1633 */
1634 bool
1635 Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags)
1636 {
1637     if (!len)
1638         return FALSE;
1639
1640     switch (*name) {
1641     case 'I':
1642         if (len == 3 && strEQ(name, "ISA"))
1643             goto yes;
1644         break;
1645     case 'O':
1646         if (len == 8 && strEQ(name, "OVERLOAD"))
1647             goto yes;
1648         break;
1649     case 'S':
1650         if (len == 3 && strEQ(name, "SIG"))
1651             goto yes;
1652         break;
1653     case '\027':   /* $^W & $^WARNING_BITS */
1654         if (len == 1
1655             || (len == 12 && strEQ(name, "\027ARNING_BITS"))
1656             || (len == 17 && strEQ(name, "\027IDE_SYSTEM_CALLS")))
1657         {
1658             goto yes;
1659         }
1660         break;
1661
1662     case '&':
1663     case '`':
1664     case '\'':
1665     case ':':
1666     case '?':
1667     case '!':
1668     case '-':
1669     case '#':
1670     case '*':
1671     case '[':
1672     case '^':
1673     case '~':
1674     case '=':
1675     case '%':
1676     case '.':
1677     case '(':
1678     case ')':
1679     case '<':
1680     case '>':
1681     case ',':
1682     case '\\':
1683     case '/':
1684     case '|':
1685     case '+':
1686     case ';':
1687     case ']':
1688     case '\001':   /* $^A */
1689     case '\003':   /* $^C */
1690     case '\004':   /* $^D */
1691     case '\005':   /* $^E */
1692     case '\006':   /* $^F */
1693     case '\010':   /* $^H */
1694     case '\011':   /* $^I, NOT \t in EBCDIC */
1695     case '\014':   /* $^L */
1696     case '\017':   /* $^O */
1697     case '\020':   /* $^P */
1698     case '\023':   /* $^S */
1699     case '\024':   /* $^T */
1700     case '\026':   /* $^V */
1701         if (len == 1)
1702             goto yes;
1703         break;
1704     case '1':
1705     case '2':
1706     case '3':
1707     case '4':
1708     case '5':
1709     case '6':
1710     case '7':
1711     case '8':
1712     case '9':
1713         if (len > 1) {
1714             char *end = name + len;
1715             while (--end > name) {
1716                 if (!isDIGIT(*end))
1717                     return FALSE;
1718             }
1719         }
1720     yes:
1721         return TRUE;
1722     default:
1723         break;
1724     }
1725     return FALSE;
1726 }