doubleplusoops. Apart from the documented NUL termination assumption.
[p5sagit/p5-mst-13.2.git] / gv.c
1 /*    gv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  */
10
11 /*
12  *   'Mercy!' cried Gandalf.  'If the giving of information is to be the cure
13  * of your inquisitiveness, I shall spend all the rest of my days answering
14  * you.  What more do you want to know?'
15  *   'The names of all the stars, and of all living things, and the whole
16  * history of Middle-earth and Over-heaven and of the Sundering Seas,'
17  * laughed Pippin.
18  */
19
20 /*
21 =head1 GV Functions
22
23 A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
24 It is a structure that holds a pointer to a scalar, an array, a hash etc,
25 corresponding to $foo, @foo, %foo.
26
27 GVs are usually found as values in stashes (symbol table hashes) where
28 Perl stores its global variables.
29
30 =cut
31 */
32
33 #include "EXTERN.h"
34 #define PERL_IN_GV_C
35 #include "perl.h"
36
37 static const char S_autoload[] = "AUTOLOAD";
38 static const STRLEN S_autolen = sizeof(S_autoload)-1;
39
40
41 #ifdef PERL_DONT_CREATE_GVSV
42 GV *
43 Perl_gv_SVadd(pTHX_ GV *gv)
44 {
45     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
46         Perl_croak(aTHX_ "Bad symbol for scalar");
47     if (!GvSV(gv))
48         GvSV(gv) = newSV(0);
49     return gv;
50 }
51 #endif
52
53 GV *
54 Perl_gv_AVadd(pTHX_ register GV *gv)
55 {
56     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
57         Perl_croak(aTHX_ "Bad symbol for array");
58     if (!GvAV(gv))
59         GvAV(gv) = newAV();
60     return gv;
61 }
62
63 GV *
64 Perl_gv_HVadd(pTHX_ register GV *gv)
65 {
66     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
67         Perl_croak(aTHX_ "Bad symbol for hash");
68     if (!GvHV(gv))
69         GvHV(gv) = newHV();
70     return gv;
71 }
72
73 GV *
74 Perl_gv_IOadd(pTHX_ register GV *gv)
75 {
76     dVAR;
77     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV) {
78
79         /*
80          * if it walks like a dirhandle, then let's assume that
81          * this is a dirhandle.
82          */
83         const char *fh = PL_op->op_type == OP_READDIR ||
84                          PL_op->op_type ==  OP_TELLDIR ||
85                          PL_op->op_type ==  OP_SEEKDIR ||
86                          PL_op->op_type ==  OP_REWINDDIR ||
87                          PL_op->op_type ==  OP_CLOSEDIR ?
88                          "dirhandle" : "filehandle";
89         Perl_croak(aTHX_ "Bad symbol for %s", fh);
90     }
91
92     if (!GvIOp(gv)) {
93 #ifdef GV_UNIQUE_CHECK
94         if (GvUNIQUE(gv)) {
95             Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
96         }
97 #endif
98         GvIOp(gv) = newIO();
99     }
100     return gv;
101 }
102
103 GV *
104 Perl_gv_fetchfile(pTHX_ const char *name)
105 {
106     dVAR;
107     char smallbuf[256];
108     char *tmpbuf;
109     STRLEN tmplen;
110     GV *gv;
111
112     if (!PL_defstash)
113         return Nullgv;
114
115     tmplen = strlen(name) + 2;
116     if (tmplen < sizeof smallbuf)
117         tmpbuf = smallbuf;
118     else
119         Newx(tmpbuf, tmplen + 1, char);
120     /* This is where the debugger's %{"::_<$filename"} hash is created */
121     tmpbuf[0] = '_';
122     tmpbuf[1] = '<';
123     memcpy(tmpbuf + 2, name, tmplen - 1);
124     gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
125     if (!isGV(gv)) {
126         gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
127 #ifdef PERL_DONT_CREATE_GVSV
128         GvSV(gv) = newSVpvn(name, tmplen - 2);
129 #else
130         sv_setpvn(GvSV(gv), name, tmplen - 2);
131 #endif
132         if (PERLDB_LINE)
133             hv_magic(GvHVn(gv_AVadd(gv)), Nullgv, PERL_MAGIC_dbfile);
134     }
135     if (tmpbuf != smallbuf)
136         Safefree(tmpbuf);
137     return gv;
138 }
139
140 /*
141 =for apidoc gv_const_sv
142
143 If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
144 inlining, or C<gv> is a placeholder reference that would be promoted to such
145 a typeglob, then returns the value returned by the sub.  Otherwise, returns
146 NULL.
147
148 =cut
149 */
150
151 SV *
152 Perl_gv_const_sv(pTHX_ GV *gv)
153 {
154     if (SvTYPE(gv) == SVt_PVGV)
155         return cv_const_sv(GvCVu(gv));
156     return SvROK(gv) ? SvRV(gv) : NULL;
157 }
158
159 void
160 Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
161 {
162     dVAR;
163     register GP *gp;
164     const bool doproto = SvTYPE(gv) > SVt_NULL;
165     const char * const proto = (doproto && SvPOK(gv)) ? SvPVX_const(gv) : NULL;
166     SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
167
168     assert (!(proto && has_constant));
169
170     if (has_constant) {
171         /* The constant has to be a simple scalar type.  */
172         switch (SvTYPE(has_constant)) {
173         case SVt_PVAV:
174         case SVt_PVHV:
175         case SVt_PVCV:
176         case SVt_PVFM:
177         case SVt_PVIO:
178             Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
179                        sv_reftype(has_constant, 0));
180         }
181         SvRV_set(gv, NULL);
182         SvROK_off(gv);
183     }
184
185     sv_upgrade((SV*)gv, SVt_PVGV);
186     if (SvLEN(gv)) {
187         if (proto) {
188             SvPV_set(gv, NULL);
189             SvLEN_set(gv, 0);
190             SvPOK_off(gv);
191         } else
192             Safefree(SvPVX_mutable(gv));
193     }
194     Newxz(gp, 1, GP);
195     GvGP(gv) = gp_ref(gp);
196 #ifdef PERL_DONT_CREATE_GVSV
197     GvSV(gv) = NULL;
198 #else
199     GvSV(gv) = newSV(0);
200 #endif
201     GvLINE(gv) = CopLINE(PL_curcop);
202     /* XXX Ideally this cast would be replaced with a change to const char*
203        in the struct.  */
204     GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : (char *) "";
205     GvCVGEN(gv) = 0;
206     GvEGV(gv) = gv;
207     sv_magic((SV*)gv, (SV*)gv, PERL_MAGIC_glob, Nullch, 0);
208     GvSTASH(gv) = stash;
209     if (stash)
210         Perl_sv_add_backref(aTHX_ (SV*)stash, (SV*)gv);
211     GvNAME(gv) = savepvn(name, len);
212     GvNAMELEN(gv) = len;
213     if (multi || doproto)              /* doproto means it _was_ mentioned */
214         GvMULTI_on(gv);
215     if (doproto) {                      /* Replicate part of newSUB here. */
216         SvIOK_off(gv);
217         ENTER;
218         if (has_constant) {
219             /* newCONSTSUB takes ownership of the reference from us.  */
220             GvCV(gv) = newCONSTSUB(stash, name, has_constant);
221         } else {
222             /* XXX unsafe for threads if eval_owner isn't held */
223             (void) start_subparse(0,0); /* Create empty CV in compcv. */
224             GvCV(gv) = PL_compcv;
225         }
226         LEAVE;
227
228         PL_sub_generation++;
229         CvGV(GvCV(gv)) = gv;
230         CvFILE_set_from_cop(GvCV(gv), PL_curcop);
231         CvSTASH(GvCV(gv)) = PL_curstash;
232         if (proto) {
233             sv_setpv((SV*)GvCV(gv), proto);
234             Safefree(proto);
235         }
236     }
237 }
238
239 STATIC void
240 S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
241 {
242     switch (sv_type) {
243     case SVt_PVIO:
244         (void)GvIOn(gv);
245         break;
246     case SVt_PVAV:
247         (void)GvAVn(gv);
248         break;
249     case SVt_PVHV:
250         (void)GvHVn(gv);
251         break;
252 #ifdef PERL_DONT_CREATE_GVSV
253     case SVt_NULL:
254     case SVt_PVCV:
255     case SVt_PVFM:
256     case SVt_PVGV:
257         break;
258     default:
259         (void)GvSVn(gv);
260 #endif
261     }
262 }
263
264 /*
265 =for apidoc gv_fetchmeth
266
267 Returns the glob with the given C<name> and a defined subroutine or
268 C<NULL>.  The glob lives in the given C<stash>, or in the stashes
269 accessible via @ISA and UNIVERSAL::.
270
271 The argument C<level> should be either 0 or -1.  If C<level==0>, as a
272 side-effect creates a glob with the given C<name> in the given C<stash>
273 which in the case of success contains an alias for the subroutine, and sets
274 up caching info for this glob.  Similarly for all the searched stashes.
275
276 This function grants C<"SUPER"> token as a postfix of the stash name. The
277 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
278 visible to Perl code.  So when calling C<call_sv>, you should not use
279 the GV directly; instead, you should use the method's CV, which can be
280 obtained from the GV with the C<GvCV> macro.
281
282 =cut
283 */
284
285 GV *
286 Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
287 {
288     dVAR;
289     AV* av;
290     GV* topgv;
291     GV* gv;
292     GV** gvp;
293     CV* cv;
294     const char *hvname;
295
296     /* UNIVERSAL methods should be callable without a stash */
297     if (!stash) {
298         level = -1;  /* probably appropriate */
299         if(!(stash = gv_stashpvs("UNIVERSAL", FALSE)))
300             return 0;
301     }
302
303     hvname = HvNAME_get(stash);
304     if (!hvname)
305       Perl_croak(aTHX_
306                  "Can't use anonymous symbol table for method lookup");
307
308     if ((level > 100) || (level < -100))
309         Perl_croak(aTHX_ "Recursive inheritance detected while looking for method '%s' in package '%s'",
310               name, hvname);
311
312     DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,hvname) );
313
314     gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
315     if (!gvp)
316         topgv = Nullgv;
317     else {
318         topgv = *gvp;
319         if (SvTYPE(topgv) != SVt_PVGV)
320             gv_init(topgv, stash, name, len, TRUE);
321         if ((cv = GvCV(topgv))) {
322             /* If genuine method or valid cache entry, use it */
323             if (!GvCVGEN(topgv) || GvCVGEN(topgv) == PL_sub_generation)
324                 return topgv;
325             /* Stale cached entry: junk it */
326             SvREFCNT_dec(cv);
327             GvCV(topgv) = cv = Nullcv;
328             GvCVGEN(topgv) = 0;
329         }
330         else if (GvCVGEN(topgv) == PL_sub_generation)
331             return 0;  /* cache indicates sub doesn't exist */
332     }
333
334     gvp = (GV**)hv_fetchs(stash, "ISA", FALSE);
335     av = (gvp && (gv = *gvp) && gv != (GV*)&PL_sv_undef) ? GvAV(gv) : NULL;
336
337     /* create and re-create @.*::SUPER::ISA on demand */
338     if (!av || !SvMAGIC(av)) {
339         STRLEN packlen = HvNAMELEN_get(stash);
340
341         if (packlen >= 7 && strEQ(hvname + packlen - 7, "::SUPER")) {
342             HV* basestash;
343
344             packlen -= 7;
345             basestash = gv_stashpvn(hvname, packlen, TRUE);
346             gvp = (GV**)hv_fetchs(basestash, "ISA", FALSE);
347             if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
348                 gvp = (GV**)hv_fetchs(stash, "ISA", TRUE);
349                 if (!gvp || !(gv = *gvp))
350                     Perl_croak(aTHX_ "Cannot create %s::ISA", hvname);
351                 if (SvTYPE(gv) != SVt_PVGV)
352                     gv_init(gv, stash, "ISA", 3, TRUE);
353                 SvREFCNT_dec(GvAV(gv));
354                 GvAV(gv) = (AV*)SvREFCNT_inc(av);
355             }
356         }
357     }
358
359     if (av) {
360         SV** svp = AvARRAY(av);
361         /* NOTE: No support for tied ISA */
362         I32 items = AvFILLp(av) + 1;
363         while (items--) {
364             SV* const sv = *svp++;
365             HV* const basestash = gv_stashsv(sv, FALSE);
366             if (!basestash) {
367                 if (ckWARN(WARN_MISC))
368                     Perl_warner(aTHX_ packWARN(WARN_MISC), "Can't locate package %"SVf" for @%s::ISA",
369                         sv, hvname);
370                 continue;
371             }
372             gv = gv_fetchmeth(basestash, name, len,
373                               (level >= 0) ? level + 1 : level - 1);
374             if (gv)
375                 goto gotcha;
376         }
377     }
378
379     /* if at top level, try UNIVERSAL */
380
381     if (level == 0 || level == -1) {
382         HV* const lastchance = gv_stashpvs("UNIVERSAL", FALSE);
383
384         if (lastchance) {
385             if ((gv = gv_fetchmeth(lastchance, name, len,
386                                   (level >= 0) ? level + 1 : level - 1)))
387             {
388           gotcha:
389                 /*
390                  * Cache method in topgv if:
391                  *  1. topgv has no synonyms (else inheritance crosses wires)
392                  *  2. method isn't a stub (else AUTOLOAD fails spectacularly)
393                  */
394                 if (topgv &&
395                     GvREFCNT(topgv) == 1 &&
396                     (cv = GvCV(gv)) &&
397                     (CvROOT(cv) || CvXSUB(cv)))
398                 {
399                     if ((cv = GvCV(topgv)))
400                         SvREFCNT_dec(cv);
401                     GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
402                     GvCVGEN(topgv) = PL_sub_generation;
403                 }
404                 return gv;
405             }
406             else if (topgv && GvREFCNT(topgv) == 1) {
407                 /* cache the fact that the method is not defined */
408                 GvCVGEN(topgv) = PL_sub_generation;
409             }
410         }
411     }
412
413     return 0;
414 }
415
416 /*
417 =for apidoc gv_fetchmeth_autoload
418
419 Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
420 Returns a glob for the subroutine.
421
422 For an autoloaded subroutine without a GV, will create a GV even
423 if C<level < 0>.  For an autoloaded subroutine without a stub, GvCV()
424 of the result may be zero.
425
426 =cut
427 */
428
429 GV *
430 Perl_gv_fetchmeth_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
431 {
432     GV *gv = gv_fetchmeth(stash, name, len, level);
433
434     if (!gv) {
435         CV *cv;
436         GV **gvp;
437
438         if (!stash)
439             return NULL;        /* UNIVERSAL::AUTOLOAD could cause trouble */
440         if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
441             return NULL;
442         if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
443             return NULL;
444         cv = GvCV(gv);
445         if (!(CvROOT(cv) || CvXSUB(cv)))
446             return NULL;
447         /* Have an autoload */
448         if (level < 0)  /* Cannot do without a stub */
449             gv_fetchmeth(stash, name, len, 0);
450         gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
451         if (!gvp)
452             return NULL;
453         return *gvp;
454     }
455     return gv;
456 }
457
458 /*
459 =for apidoc gv_fetchmethod_autoload
460
461 Returns the glob which contains the subroutine to call to invoke the method
462 on the C<stash>.  In fact in the presence of autoloading this may be the
463 glob for "AUTOLOAD".  In this case the corresponding variable $AUTOLOAD is
464 already setup.
465
466 The third parameter of C<gv_fetchmethod_autoload> determines whether
467 AUTOLOAD lookup is performed if the given method is not present: non-zero
468 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
469 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
470 with a non-zero C<autoload> parameter.
471
472 These functions grant C<"SUPER"> token as a prefix of the method name. Note
473 that if you want to keep the returned glob for a long time, you need to
474 check for it being "AUTOLOAD", since at the later time the call may load a
475 different subroutine due to $AUTOLOAD changing its value. Use the glob
476 created via a side effect to do this.
477
478 These functions have the same side-effects and as C<gv_fetchmeth> with
479 C<level==0>.  C<name> should be writable if contains C<':'> or C<'
480 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
481 C<call_sv> apply equally to these functions.
482
483 =cut
484 */
485
486 GV *
487 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
488 {
489     dVAR;
490     register const char *nend;
491     const char *nsplit = NULL;
492     GV* gv;
493     HV* ostash = stash;
494
495     if (stash && SvTYPE(stash) < SVt_PVHV)
496         stash = NULL;
497
498     for (nend = name; *nend; nend++) {
499         if (*nend == '\'')
500             nsplit = nend;
501         else if (*nend == ':' && *(nend + 1) == ':')
502             nsplit = ++nend;
503     }
504     if (nsplit) {
505         const char * const origname = name;
506         name = nsplit + 1;
507         if (*nsplit == ':')
508             --nsplit;
509         if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
510             /* ->SUPER::method should really be looked up in original stash */
511             SV *tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
512                                                   CopSTASHPV(PL_curcop)));
513             /* __PACKAGE__::SUPER stash should be autovivified */
514             stash = gv_stashpvn(SvPVX_const(tmpstr), SvCUR(tmpstr), TRUE);
515             DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
516                          origname, HvNAME_get(stash), name) );
517         }
518         else {
519             /* don't autovifify if ->NoSuchStash::method */
520             stash = gv_stashpvn(origname, nsplit - origname, FALSE);
521
522             /* however, explicit calls to Pkg::SUPER::method may
523                happen, and may require autovivification to work */
524             if (!stash && (nsplit - origname) >= 7 &&
525                 strnEQ(nsplit - 7, "::SUPER", 7) &&
526                 gv_stashpvn(origname, nsplit - origname - 7, FALSE))
527               stash = gv_stashpvn(origname, nsplit - origname, TRUE);
528         }
529         ostash = stash;
530     }
531
532     gv = gv_fetchmeth(stash, name, nend - name, 0);
533     if (!gv) {
534         if (strEQ(name,"import") || strEQ(name,"unimport"))
535             gv = (GV*)&PL_sv_yes;
536         else if (autoload)
537             gv = gv_autoload4(ostash, name, nend - name, TRUE);
538     }
539     else if (autoload) {
540         CV* const cv = GvCV(gv);
541         if (!CvROOT(cv) && !CvXSUB(cv)) {
542             GV* stubgv;
543             GV* autogv;
544
545             if (CvANON(cv))
546                 stubgv = gv;
547             else {
548                 stubgv = CvGV(cv);
549                 if (GvCV(stubgv) != cv)         /* orphaned import */
550                     stubgv = gv;
551             }
552             autogv = gv_autoload4(GvSTASH(stubgv),
553                                   GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
554             if (autogv)
555                 gv = autogv;
556         }
557     }
558
559     return gv;
560 }
561
562 GV*
563 Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
564 {
565     dVAR;
566     GV* gv;
567     CV* cv;
568     HV* varstash;
569     GV* vargv;
570     SV* varsv;
571     const char *packname = "";
572     STRLEN packname_len;
573
574     if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
575         return Nullgv;
576     if (stash) {
577         if (SvTYPE(stash) < SVt_PVHV) {
578             packname = SvPV_const((SV*)stash, packname_len);
579             stash = NULL;
580         }
581         else {
582             packname = HvNAME_get(stash);
583             packname_len = HvNAMELEN_get(stash);
584         }
585     }
586     if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
587         return Nullgv;
588     cv = GvCV(gv);
589
590     if (!(CvROOT(cv) || CvXSUB(cv)))
591         return Nullgv;
592
593     /*
594      * Inheriting AUTOLOAD for non-methods works ... for now.
595      */
596     if (!method && (GvCVGEN(gv) || GvSTASH(gv) != stash)
597         && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)
598     )
599         Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
600           "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
601              packname, (int)len, name);
602
603     if (CvXSUB(cv)) {
604         /* rather than lookup/init $AUTOLOAD here
605          * only to have the XSUB do another lookup for $AUTOLOAD
606          * and split that value on the last '::',
607          * pass along the same data via some unused fields in the CV
608          */
609         CvSTASH(cv) = stash;
610         SvPV_set(cv, (char *)name); /* cast to lose constness warning */
611         SvCUR_set(cv, len);
612         return gv;
613     }
614
615     /*
616      * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
617      * The subroutine's original name may not be "AUTOLOAD", so we don't
618      * use that, but for lack of anything better we will use the sub's
619      * original package to look up $AUTOLOAD.
620      */
621     varstash = GvSTASH(CvGV(cv));
622     vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
623     ENTER;
624
625     if (!isGV(vargv)) {
626         gv_init(vargv, varstash, S_autoload, S_autolen, FALSE);
627 #ifdef PERL_DONT_CREATE_GVSV
628         GvSV(vargv) = newSV(0);
629 #endif
630     }
631     LEAVE;
632     varsv = GvSVn(vargv);
633     sv_setpvn(varsv, packname, packname_len);
634     sv_catpvs(varsv, "::");
635     sv_catpvn(varsv, name, len);
636     SvTAINTED_off(varsv);
637     return gv;
638 }
639
640 /* The "gv" parameter should be the glob known to Perl code as *!
641  * The scalar must already have been magicalized.
642  */
643 STATIC void
644 S_require_errno(pTHX_ GV *gv)
645 {
646     dVAR;
647     HV* stash = gv_stashpvs("Errno", FALSE);
648
649     if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
650         dSP;
651         PUTBACK;
652         ENTER;
653         save_scalar(gv); /* keep the value of $! */
654         Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
655                          newSVpvs("Errno"), Nullsv);
656         LEAVE;
657         SPAGAIN;
658         stash = gv_stashpvs("Errno", FALSE);
659         if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
660             Perl_croak(aTHX_ "Can't use %%! because Errno.pm is not available");
661     }
662 }
663
664 /*
665 =for apidoc gv_stashpv
666
667 Returns a pointer to the stash for a specified package.  C<name> should
668 be a valid UTF-8 string and must be null-terminated.  If C<create> is set
669 then the package will be created if it does not already exist.  If C<create>
670 is not set and the package does not exist then NULL is returned.
671
672 =cut
673 */
674
675 HV*
676 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
677 {
678     return gv_stashpvn(name, strlen(name), create);
679 }
680
681 /*
682 =for apidoc gv_stashpvn
683
684 Returns a pointer to the stash for a specified package.  C<name> should
685 be a valid UTF-8 string.  The C<namelen> parameter indicates the length of
686 the C<name>, in bytes.  If C<create> is set then the package will be
687 created if it does not already exist.  If C<create> is not set and the
688 package does not exist then NULL is returned.
689
690 =cut
691 */
692
693 HV*
694 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 create)
695 {
696     char smallbuf[128];
697     char *tmpbuf;
698     HV *stash;
699     GV *tmpgv;
700
701     if (namelen + 3 < sizeof smallbuf)
702         tmpbuf = smallbuf;
703     else
704         Newx(tmpbuf, namelen + 3, char);
705     Copy(name,tmpbuf,namelen,char);
706     tmpbuf[namelen++] = ':';
707     tmpbuf[namelen++] = ':';
708     tmpbuf[namelen] = '\0';
709     tmpgv = gv_fetchpvn_flags(tmpbuf, namelen, create, SVt_PVHV);
710     if (tmpbuf != smallbuf)
711         Safefree(tmpbuf);
712     if (!tmpgv)
713         return 0;
714     if (!GvHV(tmpgv))
715         GvHV(tmpgv) = newHV();
716     stash = GvHV(tmpgv);
717     if (!HvNAME_get(stash))
718         hv_name_set(stash, name, namelen, 0);
719     return stash;
720 }
721
722 /*
723 =for apidoc gv_stashsv
724
725 Returns a pointer to the stash for a specified package, which must be a
726 valid UTF-8 string.  See C<gv_stashpv>.
727
728 =cut
729 */
730
731 HV*
732 Perl_gv_stashsv(pTHX_ SV *sv, I32 create)
733 {
734     STRLEN len;
735     const char * const ptr = SvPV_const(sv,len);
736     return gv_stashpvn(ptr, len, create);
737 }
738
739
740 GV *
741 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) {
742     return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
743 }
744
745 GV *
746 Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, I32 sv_type) {
747     STRLEN len;
748     const char * const nambeg = SvPV_const(name, len);
749     return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
750 }
751
752 GV *
753 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
754                        I32 sv_type)
755 {
756     dVAR;
757     register const char *name = nambeg;
758     register GV *gv = NULL;
759     GV**gvp;
760     I32 len;
761     register const char *name_cursor;
762     HV *stash = NULL;
763     const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
764     const I32 no_expand = flags & GV_NOEXPAND;
765     const I32 add = flags & ~SVf_UTF8 & ~GV_NOADD_NOINIT & ~GV_NOEXPAND;
766     const char *const name_end = nambeg + full_len;
767     const char *const name_em1 = name_end - 1;
768
769     if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
770         name++;
771
772     for (name_cursor = name; name_cursor < name_end; name_cursor++) {
773         if ((*name_cursor == ':' && name_cursor < name_em1
774              && name_cursor[1] == ':')
775             || (*name_cursor == '\'' && name_cursor[1]))
776         {
777             if (!stash)
778                 stash = PL_defstash;
779             if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
780                 return Nullgv;
781
782             len = name_cursor - name;
783             if (len > 0) {
784                 char smallbuf[128];
785                 char *tmpbuf;
786
787                 if (len + 3 < sizeof (smallbuf))
788                     tmpbuf = smallbuf;
789                 else
790                     Newx(tmpbuf, len+3, char);
791                 Copy(name, tmpbuf, len, char);
792                 tmpbuf[len++] = ':';
793                 tmpbuf[len++] = ':';
794                 tmpbuf[len] = '\0';
795                 gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
796                 gv = gvp ? *gvp : Nullgv;
797                 if (gv && gv != (GV*)&PL_sv_undef) {
798                     if (SvTYPE(gv) != SVt_PVGV)
799                         gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
800                     else
801                         GvMULTI_on(gv);
802                 }
803                 if (tmpbuf != smallbuf)
804                     Safefree(tmpbuf);
805                 if (!gv || gv == (GV*)&PL_sv_undef)
806                     return Nullgv;
807
808                 if (!(stash = GvHV(gv)))
809                     stash = GvHV(gv) = newHV();
810
811                 if (!HvNAME_get(stash))
812                     hv_name_set(stash, nambeg, name_cursor - nambeg, 0);
813             }
814
815             if (*name_cursor == ':')
816                 name_cursor++;
817             name_cursor++;
818             name = name_cursor;
819             if (name == name_end)
820                 return gv ? gv : (GV*)*hv_fetchs(PL_defstash, "main::", TRUE);
821         }
822     }
823     len = name_cursor - name;
824
825     /* No stash in name, so see how we can default */
826
827     if (!stash) {
828         if (len && isIDFIRST_lazy(name)) {
829             bool global = FALSE;
830
831             switch (len) {
832             case 1:
833                 if (*name == '_')
834                     global = TRUE;
835                 break;
836             case 3:
837                 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
838                     || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
839                     || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
840                     global = TRUE;
841                 break;
842             case 4:
843                 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
844                     && name[3] == 'V')
845                     global = TRUE;
846                 break;
847             case 5:
848                 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
849                     && name[3] == 'I' && name[4] == 'N')
850                     global = TRUE;
851                 break;
852             case 6:
853                 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
854                     &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
855                        ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
856                     global = TRUE;
857                 break;
858             case 7:
859                 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
860                     && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
861                     && name[6] == 'T')
862                     global = TRUE;
863                 break;
864             }
865
866             if (global)
867                 stash = PL_defstash;
868             else if (IN_PERL_COMPILETIME) {
869                 stash = PL_curstash;
870                 if (add && (PL_hints & HINT_STRICT_VARS) &&
871                     sv_type != SVt_PVCV &&
872                     sv_type != SVt_PVGV &&
873                     sv_type != SVt_PVFM &&
874                     sv_type != SVt_PVIO &&
875                     !(len == 1 && sv_type == SVt_PV &&
876                       (*name == 'a' || *name == 'b')) )
877                 {
878                     gvp = (GV**)hv_fetch(stash,name,len,0);
879                     if (!gvp ||
880                         *gvp == (GV*)&PL_sv_undef ||
881                         SvTYPE(*gvp) != SVt_PVGV)
882                     {
883                         stash = 0;
884                     }
885                     else if ((sv_type == SVt_PV   && !GvIMPORTED_SV(*gvp)) ||
886                              (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
887                              (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
888                     {
889                         Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
890                             sv_type == SVt_PVAV ? '@' :
891                             sv_type == SVt_PVHV ? '%' : '$',
892                             name);
893                         if (GvCVu(*gvp))
894                             Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
895                         stash = 0;
896                     }
897                 }
898             }
899             else
900                 stash = CopSTASH(PL_curcop);
901         }
902         else
903             stash = PL_defstash;
904     }
905
906     /* By this point we should have a stash and a name */
907
908     if (!stash) {
909         if (add) {
910             SV * const err = Perl_mess(aTHX_
911                  "Global symbol \"%s%s\" requires explicit package name",
912                  (sv_type == SVt_PV ? "$"
913                   : sv_type == SVt_PVAV ? "@"
914                   : sv_type == SVt_PVHV ? "%"
915                   : ""), name);
916             if (USE_UTF8_IN_NAMES)
917                 SvUTF8_on(err);
918             qerror(err);
919             stash = GvHV(gv_fetchpvn_flags("<none>::", 8, GV_ADDMULTI, SVt_PVHV));
920         }
921         else
922             return Nullgv;
923     }
924
925     if (!SvREFCNT(stash))       /* symbol table under destruction */
926         return Nullgv;
927
928     gvp = (GV**)hv_fetch(stash,name,len,add);
929     if (!gvp || *gvp == (GV*)&PL_sv_undef)
930         return Nullgv;
931     gv = *gvp;
932     if (SvTYPE(gv) == SVt_PVGV) {
933         if (add) {
934             GvMULTI_on(gv);
935             gv_init_sv(gv, sv_type);
936             if (*name=='!' && sv_type == SVt_PVHV && len==1)
937                 require_errno(gv);
938         }
939         return gv;
940     } else if (no_init) {
941         return gv;
942     } else if (no_expand && SvROK(gv)) {
943         return gv;
944     }
945
946     /* Adding a new symbol */
947
948     if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
949         Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
950     gv_init(gv, stash, name, len, add & GV_ADDMULTI);
951     gv_init_sv(gv, sv_type);
952
953     if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
954                                             : (PL_dowarn & G_WARN_ON ) ) )
955         GvMULTI_on(gv) ;
956
957     /* set up magic where warranted */
958     if (len > 1) {
959 #ifndef EBCDIC
960         if (*name > 'V' ) {
961             /* Nothing else to do.
962                The compiler will probably turn the switch statement into a
963                branch table. Make sure we avoid even that small overhead for
964                the common case of lower case variable names.  */
965         } else
966 #endif
967         {
968             const char * const name2 = name + 1;
969             switch (*name) {
970             case 'A':
971                 if (strEQ(name2, "RGV")) {
972                     IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
973                 }
974                 break;
975             case 'E':
976                 if (strnEQ(name2, "XPORT", 5))
977                     GvMULTI_on(gv);
978                 break;
979             case 'I':
980                 if (strEQ(name2, "SA")) {
981                     AV* const av = GvAVn(gv);
982                     GvMULTI_on(gv);
983                     sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
984                     /* NOTE: No support for tied ISA */
985                     if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
986                         && AvFILLp(av) == -1)
987                         {
988                             const char *pname;
989                             av_push(av, newSVpvn(pname = "NDBM_File",9));
990                             gv_stashpvn(pname, 9, TRUE);
991                             av_push(av, newSVpvn(pname = "DB_File",7));
992                             gv_stashpvn(pname, 7, TRUE);
993                             av_push(av, newSVpvn(pname = "GDBM_File",9));
994                             gv_stashpvn(pname, 9, TRUE);
995                             av_push(av, newSVpvn(pname = "SDBM_File",9));
996                             gv_stashpvn(pname, 9, TRUE);
997                             av_push(av, newSVpvn(pname = "ODBM_File",9));
998                             gv_stashpvn(pname, 9, TRUE);
999                         }
1000                 }
1001                 break;
1002             case 'O':
1003                 if (strEQ(name2, "VERLOAD")) {
1004                     HV* const hv = GvHVn(gv);
1005                     GvMULTI_on(gv);
1006                     hv_magic(hv, Nullgv, PERL_MAGIC_overload);
1007                 }
1008                 break;
1009             case 'S':
1010                 if (strEQ(name2, "IG")) {
1011                     HV *hv;
1012                     I32 i;
1013                     if (!PL_psig_ptr) {
1014                         Newxz(PL_psig_ptr,  SIG_SIZE, SV*);
1015                         Newxz(PL_psig_name, SIG_SIZE, SV*);
1016                         Newxz(PL_psig_pend, SIG_SIZE, int);
1017                     }
1018                     GvMULTI_on(gv);
1019                     hv = GvHVn(gv);
1020                     hv_magic(hv, Nullgv, PERL_MAGIC_sig);
1021                     for (i = 1; i < SIG_SIZE; i++) {
1022                         SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1023                         if (init)
1024                             sv_setsv(*init, &PL_sv_undef);
1025                         PL_psig_ptr[i] = 0;
1026                         PL_psig_name[i] = 0;
1027                         PL_psig_pend[i] = 0;
1028                     }
1029                 }
1030                 break;
1031             case 'V':
1032                 if (strEQ(name2, "ERSION"))
1033                     GvMULTI_on(gv);
1034                 break;
1035             case '\003':        /* $^CHILD_ERROR_NATIVE */
1036                 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1037                     goto magicalize;
1038                 break;
1039             case '\005':        /* $^ENCODING */
1040                 if (strEQ(name2, "NCODING"))
1041                     goto magicalize;
1042                 break;
1043             case '\017':        /* $^OPEN */
1044                 if (strEQ(name2, "PEN"))
1045                     goto magicalize;
1046                 break;
1047             case '\024':        /* ${^TAINT} */
1048                 if (strEQ(name2, "AINT"))
1049                     goto ro_magicalize;
1050                 break;
1051             case '\025':        /* ${^UNICODE}, ${^UTF8LOCALE} */
1052                 if (strEQ(name2, "NICODE"))
1053                     goto ro_magicalize;
1054                 if (strEQ(name2, "TF8LOCALE"))
1055                     goto ro_magicalize;
1056                 break;
1057             case '\027':        /* $^WARNING_BITS */
1058                 if (strEQ(name2, "ARNING_BITS"))
1059                     goto magicalize;
1060                 break;
1061             case '1':
1062             case '2':
1063             case '3':
1064             case '4':
1065             case '5':
1066             case '6':
1067             case '7':
1068             case '8':
1069             case '9':
1070             {
1071                 /* ensures variable is only digits */
1072                 /* ${"1foo"} fails this test (and is thus writeable) */
1073                 /* added by japhy, but borrowed from is_gv_magical */
1074                 const char *end = name + len;
1075                 while (--end > name) {
1076                     if (!isDIGIT(*end)) return gv;
1077                 }
1078                 goto ro_magicalize;
1079             }
1080             }
1081         }
1082     } else {
1083         /* Names of length 1.  (Or 0. But name is NUL terminated, so that will
1084            be case '\0' in this switch statement (ie a default case)  */
1085         switch (*name) {
1086         case '&':
1087         case '`':
1088         case '\'':
1089             if (
1090                 sv_type == SVt_PVAV ||
1091                 sv_type == SVt_PVHV ||
1092                 sv_type == SVt_PVCV ||
1093                 sv_type == SVt_PVFM ||
1094                 sv_type == SVt_PVIO
1095                 ) { break; }
1096             PL_sawampersand = TRUE;
1097             goto ro_magicalize;
1098
1099         case ':':
1100             sv_setpv(GvSVn(gv),PL_chopset);
1101             goto magicalize;
1102
1103         case '?':
1104 #ifdef COMPLEX_STATUS
1105             SvUPGRADE(GvSVn(gv), SVt_PVLV);
1106 #endif
1107             goto magicalize;
1108
1109         case '!':
1110
1111             /* If %! has been used, automatically load Errno.pm.
1112                The require will itself set errno, so in order to
1113                preserve its value we have to set up the magic
1114                now (rather than going to magicalize)
1115             */
1116
1117             sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1118
1119             if (sv_type == SVt_PVHV)
1120                 require_errno(gv);
1121
1122             break;
1123         case '-':
1124         {
1125             AV* const av = GvAVn(gv);
1126             sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
1127             SvREADONLY_on(av);
1128             goto magicalize;
1129         }
1130         case '*':
1131         case '#':
1132             if (sv_type == SVt_PV && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
1133                 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1134                             "$%c is no longer supported", *name);
1135             break;
1136         case '|':
1137             sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
1138             goto magicalize;
1139
1140         case '+':
1141         {
1142             AV* const av = GvAVn(gv);
1143             sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
1144             SvREADONLY_on(av);
1145             /* FALL THROUGH */
1146         }
1147         case '\023':    /* $^S */
1148         case '1':
1149         case '2':
1150         case '3':
1151         case '4':
1152         case '5':
1153         case '6':
1154         case '7':
1155         case '8':
1156         case '9':
1157         ro_magicalize:
1158             SvREADONLY_on(GvSVn(gv));
1159             /* FALL THROUGH */
1160         case '[':
1161         case '^':
1162         case '~':
1163         case '=':
1164         case '%':
1165         case '.':
1166         case '(':
1167         case ')':
1168         case '<':
1169         case '>':
1170         case ',':
1171         case '\\':
1172         case '/':
1173         case '\001':    /* $^A */
1174         case '\003':    /* $^C */
1175         case '\004':    /* $^D */
1176         case '\005':    /* $^E */
1177         case '\006':    /* $^F */
1178         case '\010':    /* $^H */
1179         case '\011':    /* $^I, NOT \t in EBCDIC */
1180         case '\016':    /* $^N */
1181         case '\017':    /* $^O */
1182         case '\020':    /* $^P */
1183         case '\024':    /* $^T */
1184         case '\027':    /* $^W */
1185         magicalize:
1186             sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1187             break;
1188
1189         case '\014':    /* $^L */
1190             sv_setpvn(GvSVn(gv),"\f",1);
1191             PL_formfeed = GvSVn(gv);
1192             break;
1193         case ';':
1194             sv_setpvn(GvSVn(gv),"\034",1);
1195             break;
1196         case ']':
1197         {
1198             SV * const sv = GvSVn(gv);
1199             if (!sv_derived_from(PL_patchlevel, "version"))
1200                 upg_version(PL_patchlevel);
1201             GvSV(gv) = vnumify(PL_patchlevel);
1202             SvREADONLY_on(GvSV(gv));
1203             SvREFCNT_dec(sv);
1204         }
1205         break;
1206         case '\026':    /* $^V */
1207         {
1208             SV * const sv = GvSVn(gv);
1209             GvSV(gv) = new_version(PL_patchlevel);
1210             SvREADONLY_on(GvSV(gv));
1211             SvREFCNT_dec(sv);
1212         }
1213         break;
1214         }
1215     }
1216     return gv;
1217 }
1218
1219 void
1220 Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1221 {
1222     const char *name;
1223     STRLEN namelen;
1224     const HV * const hv = GvSTASH(gv);
1225     if (!hv) {
1226         SvOK_off(sv);
1227         return;
1228     }
1229     sv_setpv(sv, prefix ? prefix : "");
1230
1231     name = HvNAME_get(hv);
1232     if (name) {
1233         namelen = HvNAMELEN_get(hv);
1234     } else {
1235         name = "__ANON__";
1236         namelen = 8;
1237     }
1238
1239     if (keepmain || strNE(name, "main")) {
1240         sv_catpvn(sv,name,namelen);
1241         sv_catpvs(sv,"::");
1242     }
1243     sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1244 }
1245
1246 void
1247 Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1248 {
1249     const GV * const egv = GvEGV(gv);
1250     gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
1251 }
1252
1253 IO *
1254 Perl_newIO(pTHX)
1255 {
1256     dVAR;
1257     GV *iogv;
1258     IO * const io = (IO*)newSV(0);
1259
1260     sv_upgrade((SV *)io,SVt_PVIO);
1261     /* This used to read SvREFCNT(io) = 1;
1262        It's not clear why the reference count needed an explicit reset. NWC
1263     */
1264     assert (SvREFCNT(io) == 1);
1265     SvOBJECT_on(io);
1266     /* Clear the stashcache because a new IO could overrule a package name */
1267     hv_clear(PL_stashcache);
1268     iogv = gv_fetchpvn_flags("FileHandle::", 12, 0, SVt_PVHV);
1269     /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1270     if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1271       iogv = gv_fetchpvn_flags("IO::Handle::", 12, TRUE, SVt_PVHV);
1272     SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
1273     return io;
1274 }
1275
1276 void
1277 Perl_gv_check(pTHX_ HV *stash)
1278 {
1279     dVAR;
1280     register I32 i;
1281
1282     if (!HvARRAY(stash))
1283         return;
1284     for (i = 0; i <= (I32) HvMAX(stash); i++) {
1285         const HE *entry;
1286         for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1287             register GV *gv;
1288             HV *hv;
1289             if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1290                 (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
1291             {
1292                 if (hv != PL_defstash && hv != stash)
1293                      gv_check(hv);              /* nested package */
1294             }
1295             else if (isALPHA(*HeKEY(entry))) {
1296                 const char *file;
1297                 gv = (GV*)HeVAL(entry);
1298                 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1299                     continue;
1300                 file = GvFILE(gv);
1301                 /* performance hack: if filename is absolute and it's a standard
1302                  * module, don't bother warning */
1303 #ifdef MACOS_TRADITIONAL
1304 #   define LIB_COMPONENT ":lib:"
1305 #else
1306 #   define LIB_COMPONENT "/lib/"
1307 #endif
1308                 if (file
1309                     && PERL_FILE_IS_ABSOLUTE(file)
1310                     && (instr(file, LIB_COMPONENT) || instr(file, ".pm")))
1311                 {
1312                     continue;
1313                 }
1314                 CopLINE_set(PL_curcop, GvLINE(gv));
1315 #ifdef USE_ITHREADS
1316                 CopFILE(PL_curcop) = (char *)file;      /* set for warning */
1317 #else
1318                 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1319 #endif
1320                 Perl_warner(aTHX_ packWARN(WARN_ONCE),
1321                         "Name \"%s::%s\" used only once: possible typo",
1322                         HvNAME_get(stash), GvNAME(gv));
1323             }
1324         }
1325     }
1326 }
1327
1328 GV *
1329 Perl_newGVgen(pTHX_ const char *pack)
1330 {
1331     dVAR;
1332     return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1333                       TRUE, SVt_PVGV);
1334 }
1335
1336 /* hopefully this is only called on local symbol table entries */
1337
1338 GP*
1339 Perl_gp_ref(pTHX_ GP *gp)
1340 {
1341     dVAR;
1342     if (!gp)
1343         return (GP*)NULL;
1344     gp->gp_refcnt++;
1345     if (gp->gp_cv) {
1346         if (gp->gp_cvgen) {
1347             /* multi-named GPs cannot be used for method cache */
1348             SvREFCNT_dec(gp->gp_cv);
1349             gp->gp_cv = Nullcv;
1350             gp->gp_cvgen = 0;
1351         }
1352         else {
1353             /* Adding a new name to a subroutine invalidates method cache */
1354             PL_sub_generation++;
1355         }
1356     }
1357     return gp;
1358 }
1359
1360 void
1361 Perl_gp_free(pTHX_ GV *gv)
1362 {
1363     dVAR;
1364     GP* gp;
1365
1366     if (!gv || !(gp = GvGP(gv)))
1367         return;
1368     if (gp->gp_refcnt == 0) {
1369         if (ckWARN_d(WARN_INTERNAL))
1370             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1371                         "Attempt to free unreferenced glob pointers"
1372                         pTHX__FORMAT pTHX__VALUE);
1373         return;
1374     }
1375     if (gp->gp_cv) {
1376         /* Deleting the name of a subroutine invalidates method cache */
1377         PL_sub_generation++;
1378     }
1379     if (--gp->gp_refcnt > 0) {
1380         if (gp->gp_egv == gv)
1381             gp->gp_egv = 0;
1382         return;
1383     }
1384
1385     if (gp->gp_sv) SvREFCNT_dec(gp->gp_sv);
1386     if (gp->gp_av) SvREFCNT_dec(gp->gp_av);
1387     /* FIXME - another reference loop GV -> symtab -> GV ?
1388        Somehow gp->gp_hv can end up pointing at freed garbage.  */
1389     if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
1390         const char *hvname = HvNAME_get(gp->gp_hv);
1391         if (PL_stashcache && hvname)
1392             hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
1393                       G_DISCARD);
1394         SvREFCNT_dec(gp->gp_hv);
1395     }
1396     if (gp->gp_io)   SvREFCNT_dec(gp->gp_io);
1397     if (gp->gp_cv)   SvREFCNT_dec(gp->gp_cv);
1398     if (gp->gp_form) SvREFCNT_dec(gp->gp_form);
1399
1400     Safefree(gp);
1401     GvGP(gv) = 0;
1402 }
1403
1404 int
1405 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1406 {
1407     AMT * const amtp = (AMT*)mg->mg_ptr;
1408     PERL_UNUSED_ARG(sv);
1409
1410     if (amtp && AMT_AMAGIC(amtp)) {
1411         int i;
1412         for (i = 1; i < NofAMmeth; i++) {
1413             CV * const cv = amtp->table[i];
1414             if (cv != Nullcv) {
1415                 SvREFCNT_dec((SV *) cv);
1416                 amtp->table[i] = Nullcv;
1417             }
1418         }
1419     }
1420  return 0;
1421 }
1422
1423 /* Updates and caches the CV's */
1424
1425 bool
1426 Perl_Gv_AMupdate(pTHX_ HV *stash)
1427 {
1428   dVAR;
1429   MAGIC* const mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1430   AMT * const amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1431   AMT amt;
1432
1433   if (mg && amtp->was_ok_am == PL_amagic_generation
1434       && amtp->was_ok_sub == PL_sub_generation)
1435       return (bool)AMT_OVERLOADED(amtp);
1436   sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1437
1438   DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
1439
1440   Zero(&amt,1,AMT);
1441   amt.was_ok_am = PL_amagic_generation;
1442   amt.was_ok_sub = PL_sub_generation;
1443   amt.fallback = AMGfallNO;
1444   amt.flags = 0;
1445
1446   {
1447     int filled = 0, have_ovl = 0;
1448     int i, lim = 1;
1449
1450     /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1451
1452     /* Try to find via inheritance. */
1453     GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1454     SV * const sv = gv ? GvSV(gv) : NULL;
1455     CV* cv;
1456
1457     if (!gv)
1458         lim = DESTROY_amg;              /* Skip overloading entries. */
1459 #ifdef PERL_DONT_CREATE_GVSV
1460     else if (!sv) {
1461         /* Equivalent to !SvTRUE and !SvOK  */
1462     }
1463 #endif
1464     else if (SvTRUE(sv))
1465         amt.fallback=AMGfallYES;
1466     else if (SvOK(sv))
1467         amt.fallback=AMGfallNEVER;
1468
1469     for (i = 1; i < lim; i++)
1470         amt.table[i] = Nullcv;
1471     for (; i < NofAMmeth; i++) {
1472         const char * const cooky = PL_AMG_names[i];
1473         /* Human-readable form, for debugging: */
1474         const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1475         const STRLEN l = strlen(cooky);
1476
1477         DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
1478                      cp, HvNAME_get(stash)) );
1479         /* don't fill the cache while looking up!
1480            Creation of inheritance stubs in intermediate packages may
1481            conflict with the logic of runtime method substitution.
1482            Indeed, for inheritance A -> B -> C, if C overloads "+0",
1483            then we could have created stubs for "(+0" in A and C too.
1484            But if B overloads "bool", we may want to use it for
1485            numifying instead of C's "+0". */
1486         if (i >= DESTROY_amg)
1487             gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1488         else                            /* Autoload taken care of below */
1489             gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1490         cv = 0;
1491         if (gv && (cv = GvCV(gv))) {
1492             const char *hvname;
1493             if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1494                 && strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
1495                 /* This is a hack to support autoloading..., while
1496                    knowing *which* methods were declared as overloaded. */
1497                 /* GvSV contains the name of the method. */
1498                 GV *ngv = NULL;
1499                 SV *gvsv = GvSV(gv);
1500
1501                 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1502                         "\" for overloaded \"%s\" in package \"%.256s\"\n",
1503                              GvSV(gv), cp, hvname) );
1504                 if (!gvsv || !SvPOK(gvsv)
1505                     || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
1506                                                        FALSE)))
1507                 {
1508                     /* Can be an import stub (created by "can"). */
1509                     const char * const name = (gvsv && SvPOK(gvsv)) ?  SvPVX_const(gvsv) : "???";
1510                     Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1511                                 "in package \"%.256s\"",
1512                                (GvCVGEN(gv) ? "Stub found while resolving"
1513                                 : "Can't resolve"),
1514                                name, cp, hvname);
1515                 }
1516                 cv = GvCV(gv = ngv);
1517             }
1518             DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
1519                          cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
1520                          GvNAME(CvGV(cv))) );
1521             filled = 1;
1522             if (i < DESTROY_amg)
1523                 have_ovl = 1;
1524         } else if (gv) {                /* Autoloaded... */
1525             cv = (CV*)gv;
1526             filled = 1;
1527         }
1528         amt.table[i]=(CV*)SvREFCNT_inc(cv);
1529     }
1530     if (filled) {
1531       AMT_AMAGIC_on(&amt);
1532       if (have_ovl)
1533           AMT_OVERLOADED_on(&amt);
1534       sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1535                                                 (char*)&amt, sizeof(AMT));
1536       return have_ovl;
1537     }
1538   }
1539   /* Here we have no table: */
1540   /* no_table: */
1541   AMT_AMAGIC_off(&amt);
1542   sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1543                                                 (char*)&amt, sizeof(AMTS));
1544   return FALSE;
1545 }
1546
1547
1548 CV*
1549 Perl_gv_handler(pTHX_ HV *stash, I32 id)
1550 {
1551     dVAR;
1552     MAGIC *mg;
1553     AMT *amtp;
1554
1555     if (!stash || !HvNAME_get(stash))
1556         return Nullcv;
1557     mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1558     if (!mg) {
1559       do_update:
1560         Gv_AMupdate(stash);
1561         mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1562     }
1563     amtp = (AMT*)mg->mg_ptr;
1564     if ( amtp->was_ok_am != PL_amagic_generation
1565          || amtp->was_ok_sub != PL_sub_generation )
1566         goto do_update;
1567     if (AMT_AMAGIC(amtp)) {
1568         CV * const ret = amtp->table[id];
1569         if (ret && isGV(ret)) {         /* Autoloading stab */
1570             /* Passing it through may have resulted in a warning
1571                "Inherited AUTOLOAD for a non-method deprecated", since
1572                our caller is going through a function call, not a method call.
1573                So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1574             GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
1575
1576             if (gv && GvCV(gv))
1577                 return GvCV(gv);
1578         }
1579         return ret;
1580     }
1581
1582     return Nullcv;
1583 }
1584
1585
1586 SV*
1587 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1588 {
1589   dVAR;
1590   MAGIC *mg;
1591   CV *cv=NULL;
1592   CV **cvp=NULL, **ocvp=NULL;
1593   AMT *amtp=NULL, *oamtp=NULL;
1594   int off = 0, off1, lr = 0, notfound = 0;
1595   int postpr = 0, force_cpy = 0;
1596   int assign = AMGf_assign & flags;
1597   const int assignshift = assign ? 1 : 0;
1598 #ifdef DEBUGGING
1599   int fl=0;
1600 #endif
1601   HV* stash=NULL;
1602   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1603       && (stash = SvSTASH(SvRV(left)))
1604       && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1605       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1606                         ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1607                         : (CV **) NULL))
1608       && ((cv = cvp[off=method+assignshift])
1609           || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1610                                                           * usual method */
1611                   (
1612 #ifdef DEBUGGING
1613                    fl = 1,
1614 #endif
1615                    cv = cvp[off=method])))) {
1616     lr = -1;                    /* Call method for left argument */
1617   } else {
1618     if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1619       int logic;
1620
1621       /* look for substituted methods */
1622       /* In all the covered cases we should be called with assign==0. */
1623          switch (method) {
1624          case inc_amg:
1625            force_cpy = 1;
1626            if ((cv = cvp[off=add_ass_amg])
1627                || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1628              right = &PL_sv_yes; lr = -1; assign = 1;
1629            }
1630            break;
1631          case dec_amg:
1632            force_cpy = 1;
1633            if ((cv = cvp[off = subtr_ass_amg])
1634                || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1635              right = &PL_sv_yes; lr = -1; assign = 1;
1636            }
1637            break;
1638          case bool__amg:
1639            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1640            break;
1641          case numer_amg:
1642            (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1643            break;
1644          case string_amg:
1645            (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1646            break;
1647          case not_amg:
1648            (void)((cv = cvp[off=bool__amg])
1649                   || (cv = cvp[off=numer_amg])
1650                   || (cv = cvp[off=string_amg]));
1651            postpr = 1;
1652            break;
1653          case copy_amg:
1654            {
1655              /*
1656                   * SV* ref causes confusion with the interpreter variable of
1657                   * the same name
1658                   */
1659              SV* const tmpRef=SvRV(left);
1660              if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1661                 /*
1662                  * Just to be extra cautious.  Maybe in some
1663                  * additional cases sv_setsv is safe, too.
1664                  */
1665                 SV* const newref = newSVsv(tmpRef);
1666                 SvOBJECT_on(newref);
1667                 SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
1668                 return newref;
1669              }
1670            }
1671            break;
1672          case abs_amg:
1673            if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1674                && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1675              SV* const nullsv=sv_2mortal(newSViv(0));
1676              if (off1==lt_amg) {
1677                SV* const lessp = amagic_call(left,nullsv,
1678                                        lt_amg,AMGf_noright);
1679                logic = SvTRUE(lessp);
1680              } else {
1681                SV* const lessp = amagic_call(left,nullsv,
1682                                        ncmp_amg,AMGf_noright);
1683                logic = (SvNV(lessp) < 0);
1684              }
1685              if (logic) {
1686                if (off==subtr_amg) {
1687                  right = left;
1688                  left = nullsv;
1689                  lr = 1;
1690                }
1691              } else {
1692                return left;
1693              }
1694            }
1695            break;
1696          case neg_amg:
1697            if ((cv = cvp[off=subtr_amg])) {
1698              right = left;
1699              left = sv_2mortal(newSViv(0));
1700              lr = 1;
1701            }
1702            break;
1703          case int_amg:
1704          case iter_amg:                 /* XXXX Eventually should do to_gv. */
1705              /* FAIL safe */
1706              return NULL;       /* Delegate operation to standard mechanisms. */
1707              break;
1708          case to_sv_amg:
1709          case to_av_amg:
1710          case to_hv_amg:
1711          case to_gv_amg:
1712          case to_cv_amg:
1713              /* FAIL safe */
1714              return left;       /* Delegate operation to standard mechanisms. */
1715              break;
1716          default:
1717            goto not_found;
1718          }
1719          if (!cv) goto not_found;
1720     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1721                && (stash = SvSTASH(SvRV(right)))
1722                && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1723                && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1724                           ? (amtp = (AMT*)mg->mg_ptr)->table
1725                           : (CV **) NULL))
1726                && (cv = cvp[off=method])) { /* Method for right
1727                                              * argument found */
1728       lr=1;
1729     } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1730                  && (cvp=ocvp) && (lr = -1))
1731                 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1732                && !(flags & AMGf_unary)) {
1733                                 /* We look for substitution for
1734                                  * comparison operations and
1735                                  * concatenation */
1736       if (method==concat_amg || method==concat_ass_amg
1737           || method==repeat_amg || method==repeat_ass_amg) {
1738         return NULL;            /* Delegate operation to string conversion */
1739       }
1740       off = -1;
1741       switch (method) {
1742          case lt_amg:
1743          case le_amg:
1744          case gt_amg:
1745          case ge_amg:
1746          case eq_amg:
1747          case ne_amg:
1748            postpr = 1; off=ncmp_amg; break;
1749          case slt_amg:
1750          case sle_amg:
1751          case sgt_amg:
1752          case sge_amg:
1753          case seq_amg:
1754          case sne_amg:
1755            postpr = 1; off=scmp_amg; break;
1756          }
1757       if (off != -1) cv = cvp[off];
1758       if (!cv) {
1759         goto not_found;
1760       }
1761     } else {
1762     not_found:                  /* No method found, either report or croak */
1763       switch (method) {
1764          case to_sv_amg:
1765          case to_av_amg:
1766          case to_hv_amg:
1767          case to_gv_amg:
1768          case to_cv_amg:
1769              /* FAIL safe */
1770              return left;       /* Delegate operation to standard mechanisms. */
1771              break;
1772       }
1773       if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1774         notfound = 1; lr = -1;
1775       } else if (cvp && (cv=cvp[nomethod_amg])) {
1776         notfound = 1; lr = 1;
1777       } else {
1778         SV *msg;
1779         if (off==-1) off=method;
1780         msg = sv_2mortal(Perl_newSVpvf(aTHX_
1781                       "Operation \"%s\": no method found,%sargument %s%s%s%s",
1782                       AMG_id2name(method + assignshift),
1783                       (flags & AMGf_unary ? " " : "\n\tleft "),
1784                       SvAMAGIC(left)?
1785                         "in overloaded package ":
1786                         "has no overloaded magic",
1787                       SvAMAGIC(left)?
1788                         HvNAME_get(SvSTASH(SvRV(left))):
1789                         "",
1790                       SvAMAGIC(right)?
1791                         ",\n\tright argument in overloaded package ":
1792                         (flags & AMGf_unary
1793                          ? ""
1794                          : ",\n\tright argument has no overloaded magic"),
1795                       SvAMAGIC(right)?
1796                         HvNAME_get(SvSTASH(SvRV(right))):
1797                         ""));
1798         if (amtp && amtp->fallback >= AMGfallYES) {
1799           DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
1800         } else {
1801           Perl_croak(aTHX_ "%"SVf, msg);
1802         }
1803         return NULL;
1804       }
1805       force_cpy = force_cpy || assign;
1806     }
1807   }
1808 #ifdef DEBUGGING
1809   if (!notfound) {
1810     DEBUG_o(Perl_deb(aTHX_
1811                      "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1812                      AMG_id2name(off),
1813                      method+assignshift==off? "" :
1814                      " (initially \"",
1815                      method+assignshift==off? "" :
1816                      AMG_id2name(method+assignshift),
1817                      method+assignshift==off? "" : "\")",
1818                      flags & AMGf_unary? "" :
1819                      lr==1 ? " for right argument": " for left argument",
1820                      flags & AMGf_unary? " for argument" : "",
1821                      stash ? HvNAME_get(stash) : "null",
1822                      fl? ",\n\tassignment variant used": "") );
1823   }
1824 #endif
1825     /* Since we use shallow copy during assignment, we need
1826      * to dublicate the contents, probably calling user-supplied
1827      * version of copy operator
1828      */
1829     /* We need to copy in following cases:
1830      * a) Assignment form was called.
1831      *          assignshift==1,  assign==T, method + 1 == off
1832      * b) Increment or decrement, called directly.
1833      *          assignshift==0,  assign==0, method + 0 == off
1834      * c) Increment or decrement, translated to assignment add/subtr.
1835      *          assignshift==0,  assign==T,
1836      *          force_cpy == T
1837      * d) Increment or decrement, translated to nomethod.
1838      *          assignshift==0,  assign==0,
1839      *          force_cpy == T
1840      * e) Assignment form translated to nomethod.
1841      *          assignshift==1,  assign==T, method + 1 != off
1842      *          force_cpy == T
1843      */
1844     /*  off is method, method+assignshift, or a result of opcode substitution.
1845      *  In the latter case assignshift==0, so only notfound case is important.
1846      */
1847   if (( (method + assignshift == off)
1848         && (assign || (method == inc_amg) || (method == dec_amg)))
1849       || force_cpy)
1850     RvDEEPCP(left);
1851   {
1852     dSP;
1853     BINOP myop;
1854     SV* res;
1855     const bool oldcatch = CATCH_GET;
1856
1857     CATCH_SET(TRUE);
1858     Zero(&myop, 1, BINOP);
1859     myop.op_last = (OP *) &myop;
1860     myop.op_next = Nullop;
1861     myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1862
1863     PUSHSTACKi(PERLSI_OVERLOAD);
1864     ENTER;
1865     SAVEOP();
1866     PL_op = (OP *) &myop;
1867     if (PERLDB_SUB && PL_curstash != PL_debstash)
1868         PL_op->op_private |= OPpENTERSUB_DB;
1869     PUTBACK;
1870     pp_pushmark();
1871
1872     EXTEND(SP, notfound + 5);
1873     PUSHs(lr>0? right: left);
1874     PUSHs(lr>0? left: right);
1875     PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1876     if (notfound) {
1877       PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1878     }
1879     PUSHs((SV*)cv);
1880     PUTBACK;
1881
1882     if ((PL_op = Perl_pp_entersub(aTHX)))
1883       CALLRUNOPS(aTHX);
1884     LEAVE;
1885     SPAGAIN;
1886
1887     res=POPs;
1888     PUTBACK;
1889     POPSTACK;
1890     CATCH_SET(oldcatch);
1891
1892     if (postpr) {
1893       int ans;
1894       switch (method) {
1895       case le_amg:
1896       case sle_amg:
1897         ans=SvIV(res)<=0; break;
1898       case lt_amg:
1899       case slt_amg:
1900         ans=SvIV(res)<0; break;
1901       case ge_amg:
1902       case sge_amg:
1903         ans=SvIV(res)>=0; break;
1904       case gt_amg:
1905       case sgt_amg:
1906         ans=SvIV(res)>0; break;
1907       case eq_amg:
1908       case seq_amg:
1909         ans=SvIV(res)==0; break;
1910       case ne_amg:
1911       case sne_amg:
1912         ans=SvIV(res)!=0; break;
1913       case inc_amg:
1914       case dec_amg:
1915         SvSetSV(left,res); return left;
1916       case not_amg:
1917         ans=!SvTRUE(res); break;
1918       default:
1919         ans=0; break;
1920       }
1921       return boolSV(ans);
1922     } else if (method==copy_amg) {
1923       if (!SvROK(res)) {
1924         Perl_croak(aTHX_ "Copy method did not return a reference");
1925       }
1926       return SvREFCNT_inc(SvRV(res));
1927     } else {
1928       return res;
1929     }
1930   }
1931 }
1932
1933 /*
1934 =for apidoc is_gv_magical_sv
1935
1936 Returns C<TRUE> if given the name of a magical GV. Calls is_gv_magical.
1937
1938 =cut
1939 */
1940
1941 bool
1942 Perl_is_gv_magical_sv(pTHX_ SV *name, U32 flags)
1943 {
1944     STRLEN len;
1945     const char * const temp = SvPV_const(name, len);
1946     return is_gv_magical(temp, len, flags);
1947 }
1948
1949 /*
1950 =for apidoc is_gv_magical
1951
1952 Returns C<TRUE> if given the name of a magical GV.
1953
1954 Currently only useful internally when determining if a GV should be
1955 created even in rvalue contexts.
1956
1957 C<flags> is not used at present but available for future extension to
1958 allow selecting particular classes of magical variable.
1959
1960 Currently assumes that C<name> is NUL terminated (as well as len being valid).
1961 This assumption is met by all callers within the perl core, which all pass
1962 pointers returned by SvPV.
1963
1964 =cut
1965 */
1966 bool
1967 Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags)
1968 {
1969     PERL_UNUSED_ARG(flags);
1970
1971     if (len > 1) {
1972         const char * const name1 = name + 1;
1973         switch (*name) {
1974         case 'I':
1975             if (len == 3 && name1[1] == 'S' && name[2] == 'A')
1976                 goto yes;
1977             break;
1978         case 'O':
1979             if (len == 8 && strEQ(name1, "VERLOAD"))
1980                 goto yes;
1981             break;
1982         case 'S':
1983             if (len == 3 && name[1] == 'I' && name[2] == 'G')
1984                 goto yes;
1985             break;
1986             /* Using ${^...} variables is likely to be sufficiently rare that
1987                it seems sensible to avoid the space hit of also checking the
1988                length.  */
1989         case '\017':   /* ${^OPEN} */
1990             if (strEQ(name1, "PEN"))
1991                 goto yes;
1992             break;
1993         case '\024':   /* ${^TAINT} */
1994             if (strEQ(name1, "AINT"))
1995                 goto yes;
1996             break;
1997         case '\025':    /* ${^UNICODE} */
1998             if (strEQ(name1, "NICODE"))
1999                 goto yes;
2000             if (strEQ(name1, "TF8LOCALE"))
2001                 goto yes;
2002             break;
2003         case '\027':   /* ${^WARNING_BITS} */
2004             if (strEQ(name1, "ARNING_BITS"))
2005                 goto yes;
2006             break;
2007         case '1':
2008         case '2':
2009         case '3':
2010         case '4':
2011         case '5':
2012         case '6':
2013         case '7':
2014         case '8':
2015         case '9':
2016         {
2017             const char *end = name + len;
2018             while (--end > name) {
2019                 if (!isDIGIT(*end))
2020                     return FALSE;
2021             }
2022             goto yes;
2023         }
2024         }
2025     } else {
2026         /* Because we're already assuming that name is NUL terminated
2027            below, we can treat an empty name as "\0"  */
2028         switch (*name) {
2029         case '&':
2030         case '`':
2031         case '\'':
2032         case ':':
2033         case '?':
2034         case '!':
2035         case '-':
2036         case '#':
2037         case '[':
2038         case '^':
2039         case '~':
2040         case '=':
2041         case '%':
2042         case '.':
2043         case '(':
2044         case ')':
2045         case '<':
2046         case '>':
2047         case ',':
2048         case '\\':
2049         case '/':
2050         case '|':
2051         case '+':
2052         case ';':
2053         case ']':
2054         case '\001':   /* $^A */
2055         case '\003':   /* $^C */
2056         case '\004':   /* $^D */
2057         case '\005':   /* $^E */
2058         case '\006':   /* $^F */
2059         case '\010':   /* $^H */
2060         case '\011':   /* $^I, NOT \t in EBCDIC */
2061         case '\014':   /* $^L */
2062         case '\016':   /* $^N */
2063         case '\017':   /* $^O */
2064         case '\020':   /* $^P */
2065         case '\023':   /* $^S */
2066         case '\024':   /* $^T */
2067         case '\026':   /* $^V */
2068         case '\027':   /* $^W */
2069         case '1':
2070         case '2':
2071         case '3':
2072         case '4':
2073         case '5':
2074         case '6':
2075         case '7':
2076         case '8':
2077         case '9':
2078         yes:
2079             return TRUE;
2080         default:
2081             break;
2082         }
2083     }
2084     return FALSE;
2085 }
2086
2087 /*
2088  * Local variables:
2089  * c-indentation-style: bsd
2090  * c-basic-offset: 4
2091  * indent-tabs-mode: t
2092  * End:
2093  *
2094  * ex: set ts=8 sts=4 sw=4 noet:
2095  */