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