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