This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Intel C Compiler 9.0 hatefully defines __GNUC__. Unfortunately,
[perl5.git] / gv.c
... / ...
CommitLineData
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
23A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
24It is a structure that holds a pointer to a scalar, an array, a hash etc,
25corresponding to $foo, @foo, %foo.
26
27GVs are usually found as values in stashes (symbol table hashes) where
28Perl stores its global variables.
29
30=cut
31*/
32
33#include "EXTERN.h"
34#define PERL_IN_GV_C
35#include "perl.h"
36
37static const char S_autoload[] = "AUTOLOAD";
38static const STRLEN S_autolen = sizeof(S_autoload)-1;
39
40
41#ifdef PERL_DONT_CREATE_GVSV
42GV *
43Perl_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
53GV *
54Perl_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
63GV *
64Perl_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
73GV *
74Perl_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
103GV *
104Perl_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
143If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
144inlining, or C<gv> is a placeholder reference that would be promoted to such
145a typeglob, then returns the value returned by the sub. Otherwise, returns
146NULL.
147
148=cut
149*/
150
151SV *
152Perl_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
159void
160Perl_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
239STATIC void
240S_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
267Returns the glob with the given C<name> and a defined subroutine or
268C<NULL>. The glob lives in the given C<stash>, or in the stashes
269accessible via @ISA and UNIVERSAL::.
270
271The argument C<level> should be either 0 or -1. If C<level==0>, as a
272side-effect creates a glob with the given C<name> in the given C<stash>
273which in the case of success contains an alias for the subroutine, and sets
274up caching info for this glob. Similarly for all the searched stashes.
275
276This function grants C<"SUPER"> token as a postfix of the stash name. The
277GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
278visible to Perl code. So when calling C<call_sv>, you should not use
279the GV directly; instead, you should use the method's CV, which can be
280obtained from the GV with the C<GvCV> macro.
281
282=cut
283*/
284
285GV *
286Perl_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
419Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
420Returns a glob for the subroutine.
421
422For an autoloaded subroutine without a GV, will create a GV even
423if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
424of the result may be zero.
425
426=cut
427*/
428
429GV *
430Perl_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
461Returns the glob which contains the subroutine to call to invoke the method
462on the C<stash>. In fact in the presence of autoloading this may be the
463glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
464already setup.
465
466The third parameter of C<gv_fetchmethod_autoload> determines whether
467AUTOLOAD lookup is performed if the given method is not present: non-zero
468means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
469Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
470with a non-zero C<autoload> parameter.
471
472These functions grant C<"SUPER"> token as a prefix of the method name. Note
473that if you want to keep the returned glob for a long time, you need to
474check for it being "AUTOLOAD", since at the later time the call may load a
475different subroutine due to $AUTOLOAD changing its value. Use the glob
476created via a side effect to do this.
477
478These functions have the same side-effects and as C<gv_fetchmeth> with
479C<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
481C<call_sv> apply equally to these functions.
482
483=cut
484*/
485
486GV *
487Perl_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
562GV*
563Perl_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 */
643STATIC void
644S_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
667Returns a pointer to the stash for a specified package. C<name> should
668be a valid UTF-8 string and must be null-terminated. If C<create> is set
669then the package will be created if it does not already exist. If C<create>
670is not set and the package does not exist then NULL is returned.
671
672=cut
673*/
674
675HV*
676Perl_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
684Returns a pointer to the stash for a specified package. C<name> should
685be a valid UTF-8 string. The C<namelen> parameter indicates the length of
686the C<name>, in bytes. If C<create> is set then the package will be
687created if it does not already exist. If C<create> is not set and the
688package does not exist then NULL is returned.
689
690=cut
691*/
692
693HV*
694Perl_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
725Returns a pointer to the stash for a specified package, which must be a
726valid UTF-8 string. See C<gv_stashpv>.
727
728=cut
729*/
730
731HV*
732Perl_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
740GV *
741Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) {
742 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
743}
744
745GV *
746Perl_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
752GV *
753Perl_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 *namend;
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
767 PERL_UNUSED_ARG(full_len);
768
769 if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
770 name++;
771
772 for (namend = name; *namend; namend++) {
773 if ((*namend == ':' && namend[1] == ':')
774 || (*namend == '\'' && namend[1]))
775 {
776 if (!stash)
777 stash = PL_defstash;
778 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
779 return Nullgv;
780
781 len = namend - name;
782 if (len > 0) {
783 char smallbuf[128];
784 char *tmpbuf;
785
786 if (len + 3 < sizeof (smallbuf))
787 tmpbuf = smallbuf;
788 else
789 Newx(tmpbuf, len+3, char);
790 Copy(name, tmpbuf, len, char);
791 tmpbuf[len++] = ':';
792 tmpbuf[len++] = ':';
793 tmpbuf[len] = '\0';
794 gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
795 gv = gvp ? *gvp : Nullgv;
796 if (gv && gv != (GV*)&PL_sv_undef) {
797 if (SvTYPE(gv) != SVt_PVGV)
798 gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
799 else
800 GvMULTI_on(gv);
801 }
802 if (tmpbuf != smallbuf)
803 Safefree(tmpbuf);
804 if (!gv || gv == (GV*)&PL_sv_undef)
805 return Nullgv;
806
807 if (!(stash = GvHV(gv)))
808 stash = GvHV(gv) = newHV();
809
810 if (!HvNAME_get(stash))
811 hv_name_set(stash, nambeg, namend - nambeg, 0);
812 }
813
814 if (*namend == ':')
815 namend++;
816 namend++;
817 name = namend;
818 if (!*name)
819 return gv ? gv : (GV*)*hv_fetchs(PL_defstash, "main::", TRUE);
820 }
821 }
822 len = namend - name;
823
824 /* No stash in name, so see how we can default */
825
826 if (!stash) {
827 if (isIDFIRST_lazy(name)) {
828 bool global = FALSE;
829
830 /* name is always \0 terminated, and initial \0 wouldn't return
831 true from isIDFIRST_lazy, so we know that name[1] is defined */
832 switch (name[1]) {
833 case '\0':
834 if (*name == '_')
835 global = TRUE;
836 break;
837 case 'N':
838 if (strEQ(name, "INC") || strEQ(name, "ENV"))
839 global = TRUE;
840 break;
841 case 'I':
842 if (strEQ(name, "SIG"))
843 global = TRUE;
844 break;
845 case 'T':
846 if (strEQ(name, "STDIN") || strEQ(name, "STDOUT") ||
847 strEQ(name, "STDERR"))
848 global = TRUE;
849 break;
850 case 'R':
851 if (strEQ(name, "ARGV") || strEQ(name, "ARGVOUT"))
852 global = TRUE;
853 break;
854 }
855
856 if (global)
857 stash = PL_defstash;
858 else if (IN_PERL_COMPILETIME) {
859 stash = PL_curstash;
860 if (add && (PL_hints & HINT_STRICT_VARS) &&
861 sv_type != SVt_PVCV &&
862 sv_type != SVt_PVGV &&
863 sv_type != SVt_PVFM &&
864 sv_type != SVt_PVIO &&
865 !(len == 1 && sv_type == SVt_PV &&
866 (*name == 'a' || *name == 'b')) )
867 {
868 gvp = (GV**)hv_fetch(stash,name,len,0);
869 if (!gvp ||
870 *gvp == (GV*)&PL_sv_undef ||
871 SvTYPE(*gvp) != SVt_PVGV)
872 {
873 stash = 0;
874 }
875 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
876 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
877 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
878 {
879 Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
880 sv_type == SVt_PVAV ? '@' :
881 sv_type == SVt_PVHV ? '%' : '$',
882 name);
883 if (GvCVu(*gvp))
884 Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
885 stash = 0;
886 }
887 }
888 }
889 else
890 stash = CopSTASH(PL_curcop);
891 }
892 else
893 stash = PL_defstash;
894 }
895
896 /* By this point we should have a stash and a name */
897
898 if (!stash) {
899 if (add) {
900 SV * const err = Perl_mess(aTHX_
901 "Global symbol \"%s%s\" requires explicit package name",
902 (sv_type == SVt_PV ? "$"
903 : sv_type == SVt_PVAV ? "@"
904 : sv_type == SVt_PVHV ? "%"
905 : ""), name);
906 if (USE_UTF8_IN_NAMES)
907 SvUTF8_on(err);
908 qerror(err);
909 stash = GvHV(gv_fetchpvn_flags("<none>::", 8, GV_ADDMULTI, SVt_PVHV));
910 }
911 else
912 return Nullgv;
913 }
914
915 if (!SvREFCNT(stash)) /* symbol table under destruction */
916 return Nullgv;
917
918 gvp = (GV**)hv_fetch(stash,name,len,add);
919 if (!gvp || *gvp == (GV*)&PL_sv_undef)
920 return Nullgv;
921 gv = *gvp;
922 if (SvTYPE(gv) == SVt_PVGV) {
923 if (add) {
924 GvMULTI_on(gv);
925 gv_init_sv(gv, sv_type);
926 if (*name=='!' && sv_type == SVt_PVHV && len==1)
927 require_errno(gv);
928 }
929 return gv;
930 } else if (no_init) {
931 return gv;
932 } else if (no_expand && SvROK(gv)) {
933 return gv;
934 }
935
936 /* Adding a new symbol */
937
938 if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
939 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
940 gv_init(gv, stash, name, len, add & GV_ADDMULTI);
941 gv_init_sv(gv, sv_type);
942
943 if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
944 : (PL_dowarn & G_WARN_ON ) ) )
945 GvMULTI_on(gv) ;
946
947 /* set up magic where warranted */
948 if (len > 1) {
949#ifndef EBCDIC
950 if (*name > 'V' ) {
951 /* Nothing else to do.
952 The compiler will probably turn the switch statement into a
953 branch table. Make sure we avoid even that small overhead for
954 the common case of lower case variable names. */
955 } else
956#endif
957 {
958 const char * const name2 = name + 1;
959 switch (*name) {
960 case 'A':
961 if (strEQ(name2, "RGV")) {
962 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
963 }
964 break;
965 case 'E':
966 if (strnEQ(name2, "XPORT", 5))
967 GvMULTI_on(gv);
968 break;
969 case 'I':
970 if (strEQ(name2, "SA")) {
971 AV* const av = GvAVn(gv);
972 GvMULTI_on(gv);
973 sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
974 /* NOTE: No support for tied ISA */
975 if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
976 && AvFILLp(av) == -1)
977 {
978 const char *pname;
979 av_push(av, newSVpvn(pname = "NDBM_File",9));
980 gv_stashpvn(pname, 9, TRUE);
981 av_push(av, newSVpvn(pname = "DB_File",7));
982 gv_stashpvn(pname, 7, TRUE);
983 av_push(av, newSVpvn(pname = "GDBM_File",9));
984 gv_stashpvn(pname, 9, TRUE);
985 av_push(av, newSVpvn(pname = "SDBM_File",9));
986 gv_stashpvn(pname, 9, TRUE);
987 av_push(av, newSVpvn(pname = "ODBM_File",9));
988 gv_stashpvn(pname, 9, TRUE);
989 }
990 }
991 break;
992 case 'O':
993 if (strEQ(name2, "VERLOAD")) {
994 HV* const hv = GvHVn(gv);
995 GvMULTI_on(gv);
996 hv_magic(hv, Nullgv, PERL_MAGIC_overload);
997 }
998 break;
999 case 'S':
1000 if (strEQ(name2, "IG")) {
1001 HV *hv;
1002 I32 i;
1003 if (!PL_psig_ptr) {
1004 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
1005 Newxz(PL_psig_name, SIG_SIZE, SV*);
1006 Newxz(PL_psig_pend, SIG_SIZE, int);
1007 }
1008 GvMULTI_on(gv);
1009 hv = GvHVn(gv);
1010 hv_magic(hv, Nullgv, PERL_MAGIC_sig);
1011 for (i = 1; i < SIG_SIZE; i++) {
1012 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1013 if (init)
1014 sv_setsv(*init, &PL_sv_undef);
1015 PL_psig_ptr[i] = 0;
1016 PL_psig_name[i] = 0;
1017 PL_psig_pend[i] = 0;
1018 }
1019 }
1020 break;
1021 case 'V':
1022 if (strEQ(name2, "ERSION"))
1023 GvMULTI_on(gv);
1024 break;
1025 case '\003': /* $^CHILD_ERROR_NATIVE */
1026 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1027 goto magicalize;
1028 break;
1029 case '\005': /* $^ENCODING */
1030 if (strEQ(name2, "NCODING"))
1031 goto magicalize;
1032 break;
1033 case '\017': /* $^OPEN */
1034 if (strEQ(name2, "PEN"))
1035 goto magicalize;
1036 break;
1037 case '\024': /* ${^TAINT} */
1038 if (strEQ(name2, "AINT"))
1039 goto ro_magicalize;
1040 break;
1041 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
1042 if (strEQ(name2, "NICODE"))
1043 goto ro_magicalize;
1044 if (strEQ(name2, "TF8LOCALE"))
1045 goto ro_magicalize;
1046 break;
1047 case '\027': /* $^WARNING_BITS */
1048 if (strEQ(name2, "ARNING_BITS"))
1049 goto magicalize;
1050 break;
1051 case '1':
1052 case '2':
1053 case '3':
1054 case '4':
1055 case '5':
1056 case '6':
1057 case '7':
1058 case '8':
1059 case '9':
1060 {
1061 /* ensures variable is only digits */
1062 /* ${"1foo"} fails this test (and is thus writeable) */
1063 /* added by japhy, but borrowed from is_gv_magical */
1064 const char *end = name + len;
1065 while (--end > name) {
1066 if (!isDIGIT(*end)) return gv;
1067 }
1068 goto ro_magicalize;
1069 }
1070 }
1071 }
1072 } else {
1073 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1074 be case '\0' in this switch statement (ie a default case) */
1075 switch (*name) {
1076 case '&':
1077 case '`':
1078 case '\'':
1079 if (
1080 sv_type == SVt_PVAV ||
1081 sv_type == SVt_PVHV ||
1082 sv_type == SVt_PVCV ||
1083 sv_type == SVt_PVFM ||
1084 sv_type == SVt_PVIO
1085 ) { break; }
1086 PL_sawampersand = TRUE;
1087 goto ro_magicalize;
1088
1089 case ':':
1090 sv_setpv(GvSVn(gv),PL_chopset);
1091 goto magicalize;
1092
1093 case '?':
1094#ifdef COMPLEX_STATUS
1095 SvUPGRADE(GvSVn(gv), SVt_PVLV);
1096#endif
1097 goto magicalize;
1098
1099 case '!':
1100
1101 /* If %! has been used, automatically load Errno.pm.
1102 The require will itself set errno, so in order to
1103 preserve its value we have to set up the magic
1104 now (rather than going to magicalize)
1105 */
1106
1107 sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1108
1109 if (sv_type == SVt_PVHV)
1110 require_errno(gv);
1111
1112 break;
1113 case '-':
1114 {
1115 AV* const av = GvAVn(gv);
1116 sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
1117 SvREADONLY_on(av);
1118 goto magicalize;
1119 }
1120 case '*':
1121 case '#':
1122 if (sv_type == SVt_PV && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
1123 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1124 "$%c is no longer supported", *name);
1125 break;
1126 case '|':
1127 sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
1128 goto magicalize;
1129
1130 case '+':
1131 {
1132 AV* const av = GvAVn(gv);
1133 sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
1134 SvREADONLY_on(av);
1135 /* FALL THROUGH */
1136 }
1137 case '\023': /* $^S */
1138 case '1':
1139 case '2':
1140 case '3':
1141 case '4':
1142 case '5':
1143 case '6':
1144 case '7':
1145 case '8':
1146 case '9':
1147 ro_magicalize:
1148 SvREADONLY_on(GvSVn(gv));
1149 /* FALL THROUGH */
1150 case '[':
1151 case '^':
1152 case '~':
1153 case '=':
1154 case '%':
1155 case '.':
1156 case '(':
1157 case ')':
1158 case '<':
1159 case '>':
1160 case ',':
1161 case '\\':
1162 case '/':
1163 case '\001': /* $^A */
1164 case '\003': /* $^C */
1165 case '\004': /* $^D */
1166 case '\005': /* $^E */
1167 case '\006': /* $^F */
1168 case '\010': /* $^H */
1169 case '\011': /* $^I, NOT \t in EBCDIC */
1170 case '\016': /* $^N */
1171 case '\017': /* $^O */
1172 case '\020': /* $^P */
1173 case '\024': /* $^T */
1174 case '\027': /* $^W */
1175 magicalize:
1176 sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1177 break;
1178
1179 case '\014': /* $^L */
1180 sv_setpvn(GvSVn(gv),"\f",1);
1181 PL_formfeed = GvSVn(gv);
1182 break;
1183 case ';':
1184 sv_setpvn(GvSVn(gv),"\034",1);
1185 break;
1186 case ']':
1187 {
1188 SV * const sv = GvSVn(gv);
1189 if (!sv_derived_from(PL_patchlevel, "version"))
1190 upg_version(PL_patchlevel);
1191 GvSV(gv) = vnumify(PL_patchlevel);
1192 SvREADONLY_on(GvSV(gv));
1193 SvREFCNT_dec(sv);
1194 }
1195 break;
1196 case '\026': /* $^V */
1197 {
1198 SV * const sv = GvSVn(gv);
1199 GvSV(gv) = new_version(PL_patchlevel);
1200 SvREADONLY_on(GvSV(gv));
1201 SvREFCNT_dec(sv);
1202 }
1203 break;
1204 }
1205 }
1206 return gv;
1207}
1208
1209void
1210Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1211{
1212 const char *name;
1213 STRLEN namelen;
1214 const HV * const hv = GvSTASH(gv);
1215 if (!hv) {
1216 SvOK_off(sv);
1217 return;
1218 }
1219 sv_setpv(sv, prefix ? prefix : "");
1220
1221 name = HvNAME_get(hv);
1222 if (name) {
1223 namelen = HvNAMELEN_get(hv);
1224 } else {
1225 name = "__ANON__";
1226 namelen = 8;
1227 }
1228
1229 if (keepmain || strNE(name, "main")) {
1230 sv_catpvn(sv,name,namelen);
1231 sv_catpvs(sv,"::");
1232 }
1233 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1234}
1235
1236void
1237Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1238{
1239 const GV * const egv = GvEGV(gv);
1240 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
1241}
1242
1243IO *
1244Perl_newIO(pTHX)
1245{
1246 dVAR;
1247 GV *iogv;
1248 IO * const io = (IO*)newSV(0);
1249
1250 sv_upgrade((SV *)io,SVt_PVIO);
1251 /* This used to read SvREFCNT(io) = 1;
1252 It's not clear why the reference count needed an explicit reset. NWC
1253 */
1254 assert (SvREFCNT(io) == 1);
1255 SvOBJECT_on(io);
1256 /* Clear the stashcache because a new IO could overrule a package name */
1257 hv_clear(PL_stashcache);
1258 iogv = gv_fetchpvn_flags("FileHandle::", 12, 0, SVt_PVHV);
1259 /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1260 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1261 iogv = gv_fetchpvn_flags("IO::Handle::", 12, TRUE, SVt_PVHV);
1262 SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
1263 return io;
1264}
1265
1266void
1267Perl_gv_check(pTHX_ HV *stash)
1268{
1269 dVAR;
1270 register I32 i;
1271
1272 if (!HvARRAY(stash))
1273 return;
1274 for (i = 0; i <= (I32) HvMAX(stash); i++) {
1275 const HE *entry;
1276 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1277 register GV *gv;
1278 HV *hv;
1279 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1280 (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
1281 {
1282 if (hv != PL_defstash && hv != stash)
1283 gv_check(hv); /* nested package */
1284 }
1285 else if (isALPHA(*HeKEY(entry))) {
1286 const char *file;
1287 gv = (GV*)HeVAL(entry);
1288 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1289 continue;
1290 file = GvFILE(gv);
1291 /* performance hack: if filename is absolute and it's a standard
1292 * module, don't bother warning */
1293#ifdef MACOS_TRADITIONAL
1294# define LIB_COMPONENT ":lib:"
1295#else
1296# define LIB_COMPONENT "/lib/"
1297#endif
1298 if (file
1299 && PERL_FILE_IS_ABSOLUTE(file)
1300 && (instr(file, LIB_COMPONENT) || instr(file, ".pm")))
1301 {
1302 continue;
1303 }
1304 CopLINE_set(PL_curcop, GvLINE(gv));
1305#ifdef USE_ITHREADS
1306 CopFILE(PL_curcop) = (char *)file; /* set for warning */
1307#else
1308 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1309#endif
1310 Perl_warner(aTHX_ packWARN(WARN_ONCE),
1311 "Name \"%s::%s\" used only once: possible typo",
1312 HvNAME_get(stash), GvNAME(gv));
1313 }
1314 }
1315 }
1316}
1317
1318GV *
1319Perl_newGVgen(pTHX_ const char *pack)
1320{
1321 dVAR;
1322 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1323 TRUE, SVt_PVGV);
1324}
1325
1326/* hopefully this is only called on local symbol table entries */
1327
1328GP*
1329Perl_gp_ref(pTHX_ GP *gp)
1330{
1331 dVAR;
1332 if (!gp)
1333 return (GP*)NULL;
1334 gp->gp_refcnt++;
1335 if (gp->gp_cv) {
1336 if (gp->gp_cvgen) {
1337 /* multi-named GPs cannot be used for method cache */
1338 SvREFCNT_dec(gp->gp_cv);
1339 gp->gp_cv = Nullcv;
1340 gp->gp_cvgen = 0;
1341 }
1342 else {
1343 /* Adding a new name to a subroutine invalidates method cache */
1344 PL_sub_generation++;
1345 }
1346 }
1347 return gp;
1348}
1349
1350void
1351Perl_gp_free(pTHX_ GV *gv)
1352{
1353 dVAR;
1354 GP* gp;
1355
1356 if (!gv || !(gp = GvGP(gv)))
1357 return;
1358 if (gp->gp_refcnt == 0) {
1359 if (ckWARN_d(WARN_INTERNAL))
1360 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1361 "Attempt to free unreferenced glob pointers"
1362 pTHX__FORMAT pTHX__VALUE);
1363 return;
1364 }
1365 if (gp->gp_cv) {
1366 /* Deleting the name of a subroutine invalidates method cache */
1367 PL_sub_generation++;
1368 }
1369 if (--gp->gp_refcnt > 0) {
1370 if (gp->gp_egv == gv)
1371 gp->gp_egv = 0;
1372 return;
1373 }
1374
1375 if (gp->gp_sv) SvREFCNT_dec(gp->gp_sv);
1376 if (gp->gp_av) SvREFCNT_dec(gp->gp_av);
1377 /* FIXME - another reference loop GV -> symtab -> GV ?
1378 Somehow gp->gp_hv can end up pointing at freed garbage. */
1379 if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
1380 const char *hvname = HvNAME_get(gp->gp_hv);
1381 if (PL_stashcache && hvname)
1382 hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
1383 G_DISCARD);
1384 SvREFCNT_dec(gp->gp_hv);
1385 }
1386 if (gp->gp_io) SvREFCNT_dec(gp->gp_io);
1387 if (gp->gp_cv) SvREFCNT_dec(gp->gp_cv);
1388 if (gp->gp_form) SvREFCNT_dec(gp->gp_form);
1389
1390 Safefree(gp);
1391 GvGP(gv) = 0;
1392}
1393
1394int
1395Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1396{
1397 AMT * const amtp = (AMT*)mg->mg_ptr;
1398 PERL_UNUSED_ARG(sv);
1399
1400 if (amtp && AMT_AMAGIC(amtp)) {
1401 int i;
1402 for (i = 1; i < NofAMmeth; i++) {
1403 CV * const cv = amtp->table[i];
1404 if (cv != Nullcv) {
1405 SvREFCNT_dec((SV *) cv);
1406 amtp->table[i] = Nullcv;
1407 }
1408 }
1409 }
1410 return 0;
1411}
1412
1413/* Updates and caches the CV's */
1414
1415bool
1416Perl_Gv_AMupdate(pTHX_ HV *stash)
1417{
1418 dVAR;
1419 MAGIC* const mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1420 AMT * const amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1421 AMT amt;
1422
1423 if (mg && amtp->was_ok_am == PL_amagic_generation
1424 && amtp->was_ok_sub == PL_sub_generation)
1425 return (bool)AMT_OVERLOADED(amtp);
1426 sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1427
1428 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
1429
1430 Zero(&amt,1,AMT);
1431 amt.was_ok_am = PL_amagic_generation;
1432 amt.was_ok_sub = PL_sub_generation;
1433 amt.fallback = AMGfallNO;
1434 amt.flags = 0;
1435
1436 {
1437 int filled = 0, have_ovl = 0;
1438 int i, lim = 1;
1439
1440 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1441
1442 /* Try to find via inheritance. */
1443 GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1444 SV * const sv = gv ? GvSV(gv) : NULL;
1445 CV* cv;
1446
1447 if (!gv)
1448 lim = DESTROY_amg; /* Skip overloading entries. */
1449#ifdef PERL_DONT_CREATE_GVSV
1450 else if (!sv) {
1451 /* Equivalent to !SvTRUE and !SvOK */
1452 }
1453#endif
1454 else if (SvTRUE(sv))
1455 amt.fallback=AMGfallYES;
1456 else if (SvOK(sv))
1457 amt.fallback=AMGfallNEVER;
1458
1459 for (i = 1; i < lim; i++)
1460 amt.table[i] = Nullcv;
1461 for (; i < NofAMmeth; i++) {
1462 const char * const cooky = PL_AMG_names[i];
1463 /* Human-readable form, for debugging: */
1464 const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1465 const STRLEN l = strlen(cooky);
1466
1467 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
1468 cp, HvNAME_get(stash)) );
1469 /* don't fill the cache while looking up!
1470 Creation of inheritance stubs in intermediate packages may
1471 conflict with the logic of runtime method substitution.
1472 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1473 then we could have created stubs for "(+0" in A and C too.
1474 But if B overloads "bool", we may want to use it for
1475 numifying instead of C's "+0". */
1476 if (i >= DESTROY_amg)
1477 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1478 else /* Autoload taken care of below */
1479 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1480 cv = 0;
1481 if (gv && (cv = GvCV(gv))) {
1482 const char *hvname;
1483 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1484 && strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
1485 /* This is a hack to support autoloading..., while
1486 knowing *which* methods were declared as overloaded. */
1487 /* GvSV contains the name of the method. */
1488 GV *ngv = NULL;
1489 SV *gvsv = GvSV(gv);
1490
1491 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1492 "\" for overloaded \"%s\" in package \"%.256s\"\n",
1493 GvSV(gv), cp, hvname) );
1494 if (!gvsv || !SvPOK(gvsv)
1495 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
1496 FALSE)))
1497 {
1498 /* Can be an import stub (created by "can"). */
1499 const char * const name = (gvsv && SvPOK(gvsv)) ? SvPVX_const(gvsv) : "???";
1500 Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1501 "in package \"%.256s\"",
1502 (GvCVGEN(gv) ? "Stub found while resolving"
1503 : "Can't resolve"),
1504 name, cp, hvname);
1505 }
1506 cv = GvCV(gv = ngv);
1507 }
1508 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
1509 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
1510 GvNAME(CvGV(cv))) );
1511 filled = 1;
1512 if (i < DESTROY_amg)
1513 have_ovl = 1;
1514 } else if (gv) { /* Autoloaded... */
1515 cv = (CV*)gv;
1516 filled = 1;
1517 }
1518 amt.table[i]=(CV*)SvREFCNT_inc(cv);
1519 }
1520 if (filled) {
1521 AMT_AMAGIC_on(&amt);
1522 if (have_ovl)
1523 AMT_OVERLOADED_on(&amt);
1524 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1525 (char*)&amt, sizeof(AMT));
1526 return have_ovl;
1527 }
1528 }
1529 /* Here we have no table: */
1530 /* no_table: */
1531 AMT_AMAGIC_off(&amt);
1532 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1533 (char*)&amt, sizeof(AMTS));
1534 return FALSE;
1535}
1536
1537
1538CV*
1539Perl_gv_handler(pTHX_ HV *stash, I32 id)
1540{
1541 dVAR;
1542 MAGIC *mg;
1543 AMT *amtp;
1544
1545 if (!stash || !HvNAME_get(stash))
1546 return Nullcv;
1547 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1548 if (!mg) {
1549 do_update:
1550 Gv_AMupdate(stash);
1551 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1552 }
1553 amtp = (AMT*)mg->mg_ptr;
1554 if ( amtp->was_ok_am != PL_amagic_generation
1555 || amtp->was_ok_sub != PL_sub_generation )
1556 goto do_update;
1557 if (AMT_AMAGIC(amtp)) {
1558 CV * const ret = amtp->table[id];
1559 if (ret && isGV(ret)) { /* Autoloading stab */
1560 /* Passing it through may have resulted in a warning
1561 "Inherited AUTOLOAD for a non-method deprecated", since
1562 our caller is going through a function call, not a method call.
1563 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1564 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
1565
1566 if (gv && GvCV(gv))
1567 return GvCV(gv);
1568 }
1569 return ret;
1570 }
1571
1572 return Nullcv;
1573}
1574
1575
1576SV*
1577Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1578{
1579 dVAR;
1580 MAGIC *mg;
1581 CV *cv=NULL;
1582 CV **cvp=NULL, **ocvp=NULL;
1583 AMT *amtp=NULL, *oamtp=NULL;
1584 int off = 0, off1, lr = 0, notfound = 0;
1585 int postpr = 0, force_cpy = 0;
1586 int assign = AMGf_assign & flags;
1587 const int assignshift = assign ? 1 : 0;
1588#ifdef DEBUGGING
1589 int fl=0;
1590#endif
1591 HV* stash=NULL;
1592 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1593 && (stash = SvSTASH(SvRV(left)))
1594 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1595 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1596 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1597 : (CV **) NULL))
1598 && ((cv = cvp[off=method+assignshift])
1599 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1600 * usual method */
1601 (
1602#ifdef DEBUGGING
1603 fl = 1,
1604#endif
1605 cv = cvp[off=method])))) {
1606 lr = -1; /* Call method for left argument */
1607 } else {
1608 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1609 int logic;
1610
1611 /* look for substituted methods */
1612 /* In all the covered cases we should be called with assign==0. */
1613 switch (method) {
1614 case inc_amg:
1615 force_cpy = 1;
1616 if ((cv = cvp[off=add_ass_amg])
1617 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1618 right = &PL_sv_yes; lr = -1; assign = 1;
1619 }
1620 break;
1621 case dec_amg:
1622 force_cpy = 1;
1623 if ((cv = cvp[off = subtr_ass_amg])
1624 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1625 right = &PL_sv_yes; lr = -1; assign = 1;
1626 }
1627 break;
1628 case bool__amg:
1629 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1630 break;
1631 case numer_amg:
1632 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1633 break;
1634 case string_amg:
1635 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1636 break;
1637 case not_amg:
1638 (void)((cv = cvp[off=bool__amg])
1639 || (cv = cvp[off=numer_amg])
1640 || (cv = cvp[off=string_amg]));
1641 postpr = 1;
1642 break;
1643 case copy_amg:
1644 {
1645 /*
1646 * SV* ref causes confusion with the interpreter variable of
1647 * the same name
1648 */
1649 SV* const tmpRef=SvRV(left);
1650 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1651 /*
1652 * Just to be extra cautious. Maybe in some
1653 * additional cases sv_setsv is safe, too.
1654 */
1655 SV* const newref = newSVsv(tmpRef);
1656 SvOBJECT_on(newref);
1657 SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
1658 return newref;
1659 }
1660 }
1661 break;
1662 case abs_amg:
1663 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1664 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1665 SV* const nullsv=sv_2mortal(newSViv(0));
1666 if (off1==lt_amg) {
1667 SV* const lessp = amagic_call(left,nullsv,
1668 lt_amg,AMGf_noright);
1669 logic = SvTRUE(lessp);
1670 } else {
1671 SV* const lessp = amagic_call(left,nullsv,
1672 ncmp_amg,AMGf_noright);
1673 logic = (SvNV(lessp) < 0);
1674 }
1675 if (logic) {
1676 if (off==subtr_amg) {
1677 right = left;
1678 left = nullsv;
1679 lr = 1;
1680 }
1681 } else {
1682 return left;
1683 }
1684 }
1685 break;
1686 case neg_amg:
1687 if ((cv = cvp[off=subtr_amg])) {
1688 right = left;
1689 left = sv_2mortal(newSViv(0));
1690 lr = 1;
1691 }
1692 break;
1693 case int_amg:
1694 case iter_amg: /* XXXX Eventually should do to_gv. */
1695 /* FAIL safe */
1696 return NULL; /* Delegate operation to standard mechanisms. */
1697 break;
1698 case to_sv_amg:
1699 case to_av_amg:
1700 case to_hv_amg:
1701 case to_gv_amg:
1702 case to_cv_amg:
1703 /* FAIL safe */
1704 return left; /* Delegate operation to standard mechanisms. */
1705 break;
1706 default:
1707 goto not_found;
1708 }
1709 if (!cv) goto not_found;
1710 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1711 && (stash = SvSTASH(SvRV(right)))
1712 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1713 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1714 ? (amtp = (AMT*)mg->mg_ptr)->table
1715 : (CV **) NULL))
1716 && (cv = cvp[off=method])) { /* Method for right
1717 * argument found */
1718 lr=1;
1719 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1720 && (cvp=ocvp) && (lr = -1))
1721 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1722 && !(flags & AMGf_unary)) {
1723 /* We look for substitution for
1724 * comparison operations and
1725 * concatenation */
1726 if (method==concat_amg || method==concat_ass_amg
1727 || method==repeat_amg || method==repeat_ass_amg) {
1728 return NULL; /* Delegate operation to string conversion */
1729 }
1730 off = -1;
1731 switch (method) {
1732 case lt_amg:
1733 case le_amg:
1734 case gt_amg:
1735 case ge_amg:
1736 case eq_amg:
1737 case ne_amg:
1738 postpr = 1; off=ncmp_amg; break;
1739 case slt_amg:
1740 case sle_amg:
1741 case sgt_amg:
1742 case sge_amg:
1743 case seq_amg:
1744 case sne_amg:
1745 postpr = 1; off=scmp_amg; break;
1746 }
1747 if (off != -1) cv = cvp[off];
1748 if (!cv) {
1749 goto not_found;
1750 }
1751 } else {
1752 not_found: /* No method found, either report or croak */
1753 switch (method) {
1754 case to_sv_amg:
1755 case to_av_amg:
1756 case to_hv_amg:
1757 case to_gv_amg:
1758 case to_cv_amg:
1759 /* FAIL safe */
1760 return left; /* Delegate operation to standard mechanisms. */
1761 break;
1762 }
1763 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1764 notfound = 1; lr = -1;
1765 } else if (cvp && (cv=cvp[nomethod_amg])) {
1766 notfound = 1; lr = 1;
1767 } else {
1768 SV *msg;
1769 if (off==-1) off=method;
1770 msg = sv_2mortal(Perl_newSVpvf(aTHX_
1771 "Operation \"%s\": no method found,%sargument %s%s%s%s",
1772 AMG_id2name(method + assignshift),
1773 (flags & AMGf_unary ? " " : "\n\tleft "),
1774 SvAMAGIC(left)?
1775 "in overloaded package ":
1776 "has no overloaded magic",
1777 SvAMAGIC(left)?
1778 HvNAME_get(SvSTASH(SvRV(left))):
1779 "",
1780 SvAMAGIC(right)?
1781 ",\n\tright argument in overloaded package ":
1782 (flags & AMGf_unary
1783 ? ""
1784 : ",\n\tright argument has no overloaded magic"),
1785 SvAMAGIC(right)?
1786 HvNAME_get(SvSTASH(SvRV(right))):
1787 ""));
1788 if (amtp && amtp->fallback >= AMGfallYES) {
1789 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
1790 } else {
1791 Perl_croak(aTHX_ "%"SVf, msg);
1792 }
1793 return NULL;
1794 }
1795 force_cpy = force_cpy || assign;
1796 }
1797 }
1798#ifdef DEBUGGING
1799 if (!notfound) {
1800 DEBUG_o(Perl_deb(aTHX_
1801 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1802 AMG_id2name(off),
1803 method+assignshift==off? "" :
1804 " (initially \"",
1805 method+assignshift==off? "" :
1806 AMG_id2name(method+assignshift),
1807 method+assignshift==off? "" : "\")",
1808 flags & AMGf_unary? "" :
1809 lr==1 ? " for right argument": " for left argument",
1810 flags & AMGf_unary? " for argument" : "",
1811 stash ? HvNAME_get(stash) : "null",
1812 fl? ",\n\tassignment variant used": "") );
1813 }
1814#endif
1815 /* Since we use shallow copy during assignment, we need
1816 * to dublicate the contents, probably calling user-supplied
1817 * version of copy operator
1818 */
1819 /* We need to copy in following cases:
1820 * a) Assignment form was called.
1821 * assignshift==1, assign==T, method + 1 == off
1822 * b) Increment or decrement, called directly.
1823 * assignshift==0, assign==0, method + 0 == off
1824 * c) Increment or decrement, translated to assignment add/subtr.
1825 * assignshift==0, assign==T,
1826 * force_cpy == T
1827 * d) Increment or decrement, translated to nomethod.
1828 * assignshift==0, assign==0,
1829 * force_cpy == T
1830 * e) Assignment form translated to nomethod.
1831 * assignshift==1, assign==T, method + 1 != off
1832 * force_cpy == T
1833 */
1834 /* off is method, method+assignshift, or a result of opcode substitution.
1835 * In the latter case assignshift==0, so only notfound case is important.
1836 */
1837 if (( (method + assignshift == off)
1838 && (assign || (method == inc_amg) || (method == dec_amg)))
1839 || force_cpy)
1840 RvDEEPCP(left);
1841 {
1842 dSP;
1843 BINOP myop;
1844 SV* res;
1845 const bool oldcatch = CATCH_GET;
1846
1847 CATCH_SET(TRUE);
1848 Zero(&myop, 1, BINOP);
1849 myop.op_last = (OP *) &myop;
1850 myop.op_next = Nullop;
1851 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1852
1853 PUSHSTACKi(PERLSI_OVERLOAD);
1854 ENTER;
1855 SAVEOP();
1856 PL_op = (OP *) &myop;
1857 if (PERLDB_SUB && PL_curstash != PL_debstash)
1858 PL_op->op_private |= OPpENTERSUB_DB;
1859 PUTBACK;
1860 pp_pushmark();
1861
1862 EXTEND(SP, notfound + 5);
1863 PUSHs(lr>0? right: left);
1864 PUSHs(lr>0? left: right);
1865 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1866 if (notfound) {
1867 PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1868 }
1869 PUSHs((SV*)cv);
1870 PUTBACK;
1871
1872 if ((PL_op = Perl_pp_entersub(aTHX)))
1873 CALLRUNOPS(aTHX);
1874 LEAVE;
1875 SPAGAIN;
1876
1877 res=POPs;
1878 PUTBACK;
1879 POPSTACK;
1880 CATCH_SET(oldcatch);
1881
1882 if (postpr) {
1883 int ans;
1884 switch (method) {
1885 case le_amg:
1886 case sle_amg:
1887 ans=SvIV(res)<=0; break;
1888 case lt_amg:
1889 case slt_amg:
1890 ans=SvIV(res)<0; break;
1891 case ge_amg:
1892 case sge_amg:
1893 ans=SvIV(res)>=0; break;
1894 case gt_amg:
1895 case sgt_amg:
1896 ans=SvIV(res)>0; break;
1897 case eq_amg:
1898 case seq_amg:
1899 ans=SvIV(res)==0; break;
1900 case ne_amg:
1901 case sne_amg:
1902 ans=SvIV(res)!=0; break;
1903 case inc_amg:
1904 case dec_amg:
1905 SvSetSV(left,res); return left;
1906 case not_amg:
1907 ans=!SvTRUE(res); break;
1908 default:
1909 ans=0; break;
1910 }
1911 return boolSV(ans);
1912 } else if (method==copy_amg) {
1913 if (!SvROK(res)) {
1914 Perl_croak(aTHX_ "Copy method did not return a reference");
1915 }
1916 return SvREFCNT_inc(SvRV(res));
1917 } else {
1918 return res;
1919 }
1920 }
1921}
1922
1923/*
1924=for apidoc is_gv_magical_sv
1925
1926Returns C<TRUE> if given the name of a magical GV. Calls is_gv_magical.
1927
1928=cut
1929*/
1930
1931bool
1932Perl_is_gv_magical_sv(pTHX_ SV *name, U32 flags)
1933{
1934 STRLEN len;
1935 const char * const temp = SvPV_const(name, len);
1936 return is_gv_magical(temp, len, flags);
1937}
1938
1939/*
1940=for apidoc is_gv_magical
1941
1942Returns C<TRUE> if given the name of a magical GV.
1943
1944Currently only useful internally when determining if a GV should be
1945created even in rvalue contexts.
1946
1947C<flags> is not used at present but available for future extension to
1948allow selecting particular classes of magical variable.
1949
1950Currently assumes that C<name> is NUL terminated (as well as len being valid).
1951This assumption is met by all callers within the perl core, which all pass
1952pointers returned by SvPV.
1953
1954=cut
1955*/
1956bool
1957Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags)
1958{
1959 PERL_UNUSED_ARG(flags);
1960
1961 if (len > 1) {
1962 const char * const name1 = name + 1;
1963 switch (*name) {
1964 case 'I':
1965 if (len == 3 && name1[1] == 'S' && name[2] == 'A')
1966 goto yes;
1967 break;
1968 case 'O':
1969 if (len == 8 && strEQ(name1, "VERLOAD"))
1970 goto yes;
1971 break;
1972 case 'S':
1973 if (len == 3 && name[1] == 'I' && name[2] == 'G')
1974 goto yes;
1975 break;
1976 /* Using ${^...} variables is likely to be sufficiently rare that
1977 it seems sensible to avoid the space hit of also checking the
1978 length. */
1979 case '\017': /* ${^OPEN} */
1980 if (strEQ(name1, "PEN"))
1981 goto yes;
1982 break;
1983 case '\024': /* ${^TAINT} */
1984 if (strEQ(name1, "AINT"))
1985 goto yes;
1986 break;
1987 case '\025': /* ${^UNICODE} */
1988 if (strEQ(name1, "NICODE"))
1989 goto yes;
1990 if (strEQ(name1, "TF8LOCALE"))
1991 goto yes;
1992 break;
1993 case '\027': /* ${^WARNING_BITS} */
1994 if (strEQ(name1, "ARNING_BITS"))
1995 goto yes;
1996 break;
1997 case '1':
1998 case '2':
1999 case '3':
2000 case '4':
2001 case '5':
2002 case '6':
2003 case '7':
2004 case '8':
2005 case '9':
2006 {
2007 const char *end = name + len;
2008 while (--end > name) {
2009 if (!isDIGIT(*end))
2010 return FALSE;
2011 }
2012 goto yes;
2013 }
2014 }
2015 } else {
2016 /* Because we're already assuming that name is NUL terminated
2017 below, we can treat an empty name as "\0" */
2018 switch (*name) {
2019 case '&':
2020 case '`':
2021 case '\'':
2022 case ':':
2023 case '?':
2024 case '!':
2025 case '-':
2026 case '#':
2027 case '[':
2028 case '^':
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 '\001': /* $^A */
2045 case '\003': /* $^C */
2046 case '\004': /* $^D */
2047 case '\005': /* $^E */
2048 case '\006': /* $^F */
2049 case '\010': /* $^H */
2050 case '\011': /* $^I, NOT \t in EBCDIC */
2051 case '\014': /* $^L */
2052 case '\016': /* $^N */
2053 case '\017': /* $^O */
2054 case '\020': /* $^P */
2055 case '\023': /* $^S */
2056 case '\024': /* $^T */
2057 case '\026': /* $^V */
2058 case '\027': /* $^W */
2059 case '1':
2060 case '2':
2061 case '3':
2062 case '4':
2063 case '5':
2064 case '6':
2065 case '7':
2066 case '8':
2067 case '9':
2068 yes:
2069 return TRUE;
2070 default:
2071 break;
2072 }
2073 }
2074 return FALSE;
2075}
2076
2077/*
2078 * Local variables:
2079 * c-indentation-style: bsd
2080 * c-basic-offset: 4
2081 * indent-tabs-mode: t
2082 * End:
2083 *
2084 * ex: set ts=8 sts=4 sw=4 noet:
2085 */