This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
A terser implementation of S_varname, by using and post-processing
[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_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1187{
1188 const GV * const egv = GvEGV(gv);
1189 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
1190}
1191
1192IO *
1193Perl_newIO(pTHX)
1194{
1195 GV *iogv;
1196 IO * const io = (IO*)NEWSV(0,0);
1197
1198 sv_upgrade((SV *)io,SVt_PVIO);
1199 /* This used to read SvREFCNT(io) = 1;
1200 It's not clear why the reference count needed an explicit reset. NWC
1201 */
1202 assert (SvREFCNT(io) == 1);
1203 SvOBJECT_on(io);
1204 /* Clear the stashcache because a new IO could overrule a package name */
1205 hv_clear(PL_stashcache);
1206 iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
1207 /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1208 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1209 iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
1210 SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
1211 return io;
1212}
1213
1214void
1215Perl_gv_check(pTHX_ HV *stash)
1216{
1217 register I32 i;
1218
1219 if (!HvARRAY(stash))
1220 return;
1221 for (i = 0; i <= (I32) HvMAX(stash); i++) {
1222 const HE *entry;
1223 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1224 register GV *gv;
1225 HV *hv;
1226 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1227 (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
1228 {
1229 if (hv != PL_defstash && hv != stash)
1230 gv_check(hv); /* nested package */
1231 }
1232 else if (isALPHA(*HeKEY(entry))) {
1233 const char *file;
1234 gv = (GV*)HeVAL(entry);
1235 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1236 continue;
1237 file = GvFILE(gv);
1238 /* performance hack: if filename is absolute and it's a standard
1239 * module, don't bother warning */
1240#ifdef MACOS_TRADITIONAL
1241# define LIB_COMPONENT ":lib:"
1242#else
1243# define LIB_COMPONENT "/lib/"
1244#endif
1245 if (file
1246 && PERL_FILE_IS_ABSOLUTE(file)
1247 && (instr(file, LIB_COMPONENT) || instr(file, ".pm")))
1248 {
1249 continue;
1250 }
1251 CopLINE_set(PL_curcop, GvLINE(gv));
1252#ifdef USE_ITHREADS
1253 CopFILE(PL_curcop) = (char *)file; /* set for warning */
1254#else
1255 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1256#endif
1257 Perl_warner(aTHX_ packWARN(WARN_ONCE),
1258 "Name \"%s::%s\" used only once: possible typo",
1259 HvNAME_get(stash), GvNAME(gv));
1260 }
1261 }
1262 }
1263}
1264
1265GV *
1266Perl_newGVgen(pTHX_ const char *pack)
1267{
1268 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1269 TRUE, SVt_PVGV);
1270}
1271
1272/* hopefully this is only called on local symbol table entries */
1273
1274GP*
1275Perl_gp_ref(pTHX_ GP *gp)
1276{
1277 if (!gp)
1278 return (GP*)NULL;
1279 gp->gp_refcnt++;
1280 if (gp->gp_cv) {
1281 if (gp->gp_cvgen) {
1282 /* multi-named GPs cannot be used for method cache */
1283 SvREFCNT_dec(gp->gp_cv);
1284 gp->gp_cv = Nullcv;
1285 gp->gp_cvgen = 0;
1286 }
1287 else {
1288 /* Adding a new name to a subroutine invalidates method cache */
1289 PL_sub_generation++;
1290 }
1291 }
1292 return gp;
1293}
1294
1295void
1296Perl_gp_free(pTHX_ GV *gv)
1297{
1298 GP* gp;
1299
1300 if (!gv || !(gp = GvGP(gv)))
1301 return;
1302 if (gp->gp_refcnt == 0) {
1303 if (ckWARN_d(WARN_INTERNAL))
1304 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1305 "Attempt to free unreferenced glob pointers"
1306 pTHX__FORMAT pTHX__VALUE);
1307 return;
1308 }
1309 if (gp->gp_cv) {
1310 /* Deleting the name of a subroutine invalidates method cache */
1311 PL_sub_generation++;
1312 }
1313 if (--gp->gp_refcnt > 0) {
1314 if (gp->gp_egv == gv)
1315 gp->gp_egv = 0;
1316 return;
1317 }
1318
1319 if (gp->gp_sv) SvREFCNT_dec(gp->gp_sv);
1320 if (gp->gp_av) SvREFCNT_dec(gp->gp_av);
1321 /* FIXME - another reference loop GV -> symtab -> GV ?
1322 Somehow gp->gp_hv can end up pointing at freed garbage. */
1323 if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
1324 const char *hvname = HvNAME_get(gp->gp_hv);
1325 if (PL_stashcache && hvname)
1326 hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
1327 G_DISCARD);
1328 SvREFCNT_dec(gp->gp_hv);
1329 }
1330 if (gp->gp_io) SvREFCNT_dec(gp->gp_io);
1331 if (gp->gp_cv) SvREFCNT_dec(gp->gp_cv);
1332 if (gp->gp_form) SvREFCNT_dec(gp->gp_form);
1333
1334 Safefree(gp);
1335 GvGP(gv) = 0;
1336}
1337
1338int
1339Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1340{
1341 AMT * const amtp = (AMT*)mg->mg_ptr;
1342 PERL_UNUSED_ARG(sv);
1343
1344 if (amtp && AMT_AMAGIC(amtp)) {
1345 int i;
1346 for (i = 1; i < NofAMmeth; i++) {
1347 CV * const cv = amtp->table[i];
1348 if (cv != Nullcv) {
1349 SvREFCNT_dec((SV *) cv);
1350 amtp->table[i] = Nullcv;
1351 }
1352 }
1353 }
1354 return 0;
1355}
1356
1357/* Updates and caches the CV's */
1358
1359bool
1360Perl_Gv_AMupdate(pTHX_ HV *stash)
1361{
1362 MAGIC* const mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1363 AMT * const amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1364 AMT amt;
1365
1366 if (mg && amtp->was_ok_am == PL_amagic_generation
1367 && amtp->was_ok_sub == PL_sub_generation)
1368 return (bool)AMT_OVERLOADED(amtp);
1369 sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1370
1371 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
1372
1373 Zero(&amt,1,AMT);
1374 amt.was_ok_am = PL_amagic_generation;
1375 amt.was_ok_sub = PL_sub_generation;
1376 amt.fallback = AMGfallNO;
1377 amt.flags = 0;
1378
1379 {
1380 int filled = 0, have_ovl = 0;
1381 int i, lim = 1;
1382
1383 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1384
1385 /* Try to find via inheritance. */
1386 GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1387 SV * const sv = gv ? GvSV(gv) : NULL;
1388 CV* cv;
1389
1390 if (!gv)
1391 lim = DESTROY_amg; /* Skip overloading entries. */
1392#ifdef PERL_DONT_CREATE_GVSV
1393 else if (!sv) {
1394 /* Equivalent to !SvTRUE and !SvOK */
1395 }
1396#endif
1397 else if (SvTRUE(sv))
1398 amt.fallback=AMGfallYES;
1399 else if (SvOK(sv))
1400 amt.fallback=AMGfallNEVER;
1401
1402 for (i = 1; i < lim; i++)
1403 amt.table[i] = Nullcv;
1404 for (; i < NofAMmeth; i++) {
1405 const char *cooky = PL_AMG_names[i];
1406 /* Human-readable form, for debugging: */
1407 const char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1408 const STRLEN l = strlen(cooky);
1409
1410 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
1411 cp, HvNAME_get(stash)) );
1412 /* don't fill the cache while looking up!
1413 Creation of inheritance stubs in intermediate packages may
1414 conflict with the logic of runtime method substitution.
1415 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1416 then we could have created stubs for "(+0" in A and C too.
1417 But if B overloads "bool", we may want to use it for
1418 numifying instead of C's "+0". */
1419 if (i >= DESTROY_amg)
1420 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1421 else /* Autoload taken care of below */
1422 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1423 cv = 0;
1424 if (gv && (cv = GvCV(gv))) {
1425 const char *hvname;
1426 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1427 && strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
1428 /* This is a hack to support autoloading..., while
1429 knowing *which* methods were declared as overloaded. */
1430 /* GvSV contains the name of the method. */
1431 GV *ngv = Nullgv;
1432 SV *gvsv = GvSV(gv);
1433
1434 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1435 "\" for overloaded \"%s\" in package \"%.256s\"\n",
1436 GvSV(gv), cp, hvname) );
1437 if (!gvsv || !SvPOK(gvsv)
1438 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
1439 FALSE)))
1440 {
1441 /* Can be an import stub (created by "can"). */
1442 const char * const name = (gvsv && SvPOK(gvsv)) ? SvPVX_const(gvsv) : "???";
1443 Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1444 "in package \"%.256s\"",
1445 (GvCVGEN(gv) ? "Stub found while resolving"
1446 : "Can't resolve"),
1447 name, cp, hvname);
1448 }
1449 cv = GvCV(gv = ngv);
1450 }
1451 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
1452 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
1453 GvNAME(CvGV(cv))) );
1454 filled = 1;
1455 if (i < DESTROY_amg)
1456 have_ovl = 1;
1457 } else if (gv) { /* Autoloaded... */
1458 cv = (CV*)gv;
1459 filled = 1;
1460 }
1461 amt.table[i]=(CV*)SvREFCNT_inc(cv);
1462 }
1463 if (filled) {
1464 AMT_AMAGIC_on(&amt);
1465 if (have_ovl)
1466 AMT_OVERLOADED_on(&amt);
1467 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1468 (char*)&amt, sizeof(AMT));
1469 return have_ovl;
1470 }
1471 }
1472 /* Here we have no table: */
1473 /* no_table: */
1474 AMT_AMAGIC_off(&amt);
1475 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1476 (char*)&amt, sizeof(AMTS));
1477 return FALSE;
1478}
1479
1480
1481CV*
1482Perl_gv_handler(pTHX_ HV *stash, I32 id)
1483{
1484 MAGIC *mg;
1485 AMT *amtp;
1486
1487 if (!stash || !HvNAME_get(stash))
1488 return Nullcv;
1489 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1490 if (!mg) {
1491 do_update:
1492 Gv_AMupdate(stash);
1493 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1494 }
1495 amtp = (AMT*)mg->mg_ptr;
1496 if ( amtp->was_ok_am != PL_amagic_generation
1497 || amtp->was_ok_sub != PL_sub_generation )
1498 goto do_update;
1499 if (AMT_AMAGIC(amtp)) {
1500 CV * const ret = amtp->table[id];
1501 if (ret && isGV(ret)) { /* Autoloading stab */
1502 /* Passing it through may have resulted in a warning
1503 "Inherited AUTOLOAD for a non-method deprecated", since
1504 our caller is going through a function call, not a method call.
1505 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1506 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
1507
1508 if (gv && GvCV(gv))
1509 return GvCV(gv);
1510 }
1511 return ret;
1512 }
1513
1514 return Nullcv;
1515}
1516
1517
1518SV*
1519Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1520{
1521 dVAR;
1522 MAGIC *mg;
1523 CV *cv=NULL;
1524 CV **cvp=NULL, **ocvp=NULL;
1525 AMT *amtp=NULL, *oamtp=NULL;
1526 int off = 0, off1, lr = 0, notfound = 0;
1527 int postpr = 0, force_cpy = 0;
1528 int assign = AMGf_assign & flags;
1529 const int assignshift = assign ? 1 : 0;
1530#ifdef DEBUGGING
1531 int fl=0;
1532#endif
1533 HV* stash=NULL;
1534 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1535 && (stash = SvSTASH(SvRV(left)))
1536 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1537 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1538 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1539 : (CV **) NULL))
1540 && ((cv = cvp[off=method+assignshift])
1541 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1542 * usual method */
1543 (
1544#ifdef DEBUGGING
1545 fl = 1,
1546#endif
1547 cv = cvp[off=method])))) {
1548 lr = -1; /* Call method for left argument */
1549 } else {
1550 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1551 int logic;
1552
1553 /* look for substituted methods */
1554 /* In all the covered cases we should be called with assign==0. */
1555 switch (method) {
1556 case inc_amg:
1557 force_cpy = 1;
1558 if ((cv = cvp[off=add_ass_amg])
1559 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1560 right = &PL_sv_yes; lr = -1; assign = 1;
1561 }
1562 break;
1563 case dec_amg:
1564 force_cpy = 1;
1565 if ((cv = cvp[off = subtr_ass_amg])
1566 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1567 right = &PL_sv_yes; lr = -1; assign = 1;
1568 }
1569 break;
1570 case bool__amg:
1571 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1572 break;
1573 case numer_amg:
1574 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1575 break;
1576 case string_amg:
1577 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1578 break;
1579 case not_amg:
1580 (void)((cv = cvp[off=bool__amg])
1581 || (cv = cvp[off=numer_amg])
1582 || (cv = cvp[off=string_amg]));
1583 postpr = 1;
1584 break;
1585 case copy_amg:
1586 {
1587 /*
1588 * SV* ref causes confusion with the interpreter variable of
1589 * the same name
1590 */
1591 SV* const tmpRef=SvRV(left);
1592 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1593 /*
1594 * Just to be extra cautious. Maybe in some
1595 * additional cases sv_setsv is safe, too.
1596 */
1597 SV* const newref = newSVsv(tmpRef);
1598 SvOBJECT_on(newref);
1599 SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
1600 return newref;
1601 }
1602 }
1603 break;
1604 case abs_amg:
1605 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1606 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1607 SV* const nullsv=sv_2mortal(newSViv(0));
1608 if (off1==lt_amg) {
1609 SV* const lessp = amagic_call(left,nullsv,
1610 lt_amg,AMGf_noright);
1611 logic = SvTRUE(lessp);
1612 } else {
1613 SV* const lessp = amagic_call(left,nullsv,
1614 ncmp_amg,AMGf_noright);
1615 logic = (SvNV(lessp) < 0);
1616 }
1617 if (logic) {
1618 if (off==subtr_amg) {
1619 right = left;
1620 left = nullsv;
1621 lr = 1;
1622 }
1623 } else {
1624 return left;
1625 }
1626 }
1627 break;
1628 case neg_amg:
1629 if ((cv = cvp[off=subtr_amg])) {
1630 right = left;
1631 left = sv_2mortal(newSViv(0));
1632 lr = 1;
1633 }
1634 break;
1635 case int_amg:
1636 case iter_amg: /* XXXX Eventually should do to_gv. */
1637 /* FAIL safe */
1638 return NULL; /* Delegate operation to standard mechanisms. */
1639 break;
1640 case to_sv_amg:
1641 case to_av_amg:
1642 case to_hv_amg:
1643 case to_gv_amg:
1644 case to_cv_amg:
1645 /* FAIL safe */
1646 return left; /* Delegate operation to standard mechanisms. */
1647 break;
1648 default:
1649 goto not_found;
1650 }
1651 if (!cv) goto not_found;
1652 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1653 && (stash = SvSTASH(SvRV(right)))
1654 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1655 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1656 ? (amtp = (AMT*)mg->mg_ptr)->table
1657 : (CV **) NULL))
1658 && (cv = cvp[off=method])) { /* Method for right
1659 * argument found */
1660 lr=1;
1661 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1662 && (cvp=ocvp) && (lr = -1))
1663 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1664 && !(flags & AMGf_unary)) {
1665 /* We look for substitution for
1666 * comparison operations and
1667 * concatenation */
1668 if (method==concat_amg || method==concat_ass_amg
1669 || method==repeat_amg || method==repeat_ass_amg) {
1670 return NULL; /* Delegate operation to string conversion */
1671 }
1672 off = -1;
1673 switch (method) {
1674 case lt_amg:
1675 case le_amg:
1676 case gt_amg:
1677 case ge_amg:
1678 case eq_amg:
1679 case ne_amg:
1680 postpr = 1; off=ncmp_amg; break;
1681 case slt_amg:
1682 case sle_amg:
1683 case sgt_amg:
1684 case sge_amg:
1685 case seq_amg:
1686 case sne_amg:
1687 postpr = 1; off=scmp_amg; break;
1688 }
1689 if (off != -1) cv = cvp[off];
1690 if (!cv) {
1691 goto not_found;
1692 }
1693 } else {
1694 not_found: /* No method found, either report or croak */
1695 switch (method) {
1696 case to_sv_amg:
1697 case to_av_amg:
1698 case to_hv_amg:
1699 case to_gv_amg:
1700 case to_cv_amg:
1701 /* FAIL safe */
1702 return left; /* Delegate operation to standard mechanisms. */
1703 break;
1704 }
1705 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1706 notfound = 1; lr = -1;
1707 } else if (cvp && (cv=cvp[nomethod_amg])) {
1708 notfound = 1; lr = 1;
1709 } else {
1710 SV *msg;
1711 if (off==-1) off=method;
1712 msg = sv_2mortal(Perl_newSVpvf(aTHX_
1713 "Operation \"%s\": no method found,%sargument %s%s%s%s",
1714 AMG_id2name(method + assignshift),
1715 (flags & AMGf_unary ? " " : "\n\tleft "),
1716 SvAMAGIC(left)?
1717 "in overloaded package ":
1718 "has no overloaded magic",
1719 SvAMAGIC(left)?
1720 HvNAME_get(SvSTASH(SvRV(left))):
1721 "",
1722 SvAMAGIC(right)?
1723 ",\n\tright argument in overloaded package ":
1724 (flags & AMGf_unary
1725 ? ""
1726 : ",\n\tright argument has no overloaded magic"),
1727 SvAMAGIC(right)?
1728 HvNAME_get(SvSTASH(SvRV(right))):
1729 ""));
1730 if (amtp && amtp->fallback >= AMGfallYES) {
1731 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
1732 } else {
1733 Perl_croak(aTHX_ "%"SVf, msg);
1734 }
1735 return NULL;
1736 }
1737 force_cpy = force_cpy || assign;
1738 }
1739 }
1740#ifdef DEBUGGING
1741 if (!notfound) {
1742 DEBUG_o(Perl_deb(aTHX_
1743 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1744 AMG_id2name(off),
1745 method+assignshift==off? "" :
1746 " (initially \"",
1747 method+assignshift==off? "" :
1748 AMG_id2name(method+assignshift),
1749 method+assignshift==off? "" : "\")",
1750 flags & AMGf_unary? "" :
1751 lr==1 ? " for right argument": " for left argument",
1752 flags & AMGf_unary? " for argument" : "",
1753 stash ? HvNAME_get(stash) : "null",
1754 fl? ",\n\tassignment variant used": "") );
1755 }
1756#endif
1757 /* Since we use shallow copy during assignment, we need
1758 * to dublicate the contents, probably calling user-supplied
1759 * version of copy operator
1760 */
1761 /* We need to copy in following cases:
1762 * a) Assignment form was called.
1763 * assignshift==1, assign==T, method + 1 == off
1764 * b) Increment or decrement, called directly.
1765 * assignshift==0, assign==0, method + 0 == off
1766 * c) Increment or decrement, translated to assignment add/subtr.
1767 * assignshift==0, assign==T,
1768 * force_cpy == T
1769 * d) Increment or decrement, translated to nomethod.
1770 * assignshift==0, assign==0,
1771 * force_cpy == T
1772 * e) Assignment form translated to nomethod.
1773 * assignshift==1, assign==T, method + 1 != off
1774 * force_cpy == T
1775 */
1776 /* off is method, method+assignshift, or a result of opcode substitution.
1777 * In the latter case assignshift==0, so only notfound case is important.
1778 */
1779 if (( (method + assignshift == off)
1780 && (assign || (method == inc_amg) || (method == dec_amg)))
1781 || force_cpy)
1782 RvDEEPCP(left);
1783 {
1784 dSP;
1785 BINOP myop;
1786 SV* res;
1787 const bool oldcatch = CATCH_GET;
1788
1789 CATCH_SET(TRUE);
1790 Zero(&myop, 1, BINOP);
1791 myop.op_last = (OP *) &myop;
1792 myop.op_next = Nullop;
1793 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1794
1795 PUSHSTACKi(PERLSI_OVERLOAD);
1796 ENTER;
1797 SAVEOP();
1798 PL_op = (OP *) &myop;
1799 if (PERLDB_SUB && PL_curstash != PL_debstash)
1800 PL_op->op_private |= OPpENTERSUB_DB;
1801 PUTBACK;
1802 pp_pushmark();
1803
1804 EXTEND(SP, notfound + 5);
1805 PUSHs(lr>0? right: left);
1806 PUSHs(lr>0? left: right);
1807 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1808 if (notfound) {
1809 PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1810 }
1811 PUSHs((SV*)cv);
1812 PUTBACK;
1813
1814 if ((PL_op = Perl_pp_entersub(aTHX)))
1815 CALLRUNOPS(aTHX);
1816 LEAVE;
1817 SPAGAIN;
1818
1819 res=POPs;
1820 PUTBACK;
1821 POPSTACK;
1822 CATCH_SET(oldcatch);
1823
1824 if (postpr) {
1825 int ans;
1826 switch (method) {
1827 case le_amg:
1828 case sle_amg:
1829 ans=SvIV(res)<=0; break;
1830 case lt_amg:
1831 case slt_amg:
1832 ans=SvIV(res)<0; break;
1833 case ge_amg:
1834 case sge_amg:
1835 ans=SvIV(res)>=0; break;
1836 case gt_amg:
1837 case sgt_amg:
1838 ans=SvIV(res)>0; break;
1839 case eq_amg:
1840 case seq_amg:
1841 ans=SvIV(res)==0; break;
1842 case ne_amg:
1843 case sne_amg:
1844 ans=SvIV(res)!=0; break;
1845 case inc_amg:
1846 case dec_amg:
1847 SvSetSV(left,res); return left;
1848 case not_amg:
1849 ans=!SvTRUE(res); break;
1850 default:
1851 ans=0; break;
1852 }
1853 return boolSV(ans);
1854 } else if (method==copy_amg) {
1855 if (!SvROK(res)) {
1856 Perl_croak(aTHX_ "Copy method did not return a reference");
1857 }
1858 return SvREFCNT_inc(SvRV(res));
1859 } else {
1860 return res;
1861 }
1862 }
1863}
1864
1865/*
1866=for apidoc is_gv_magical_sv
1867
1868Returns C<TRUE> if given the name of a magical GV. Calls is_gv_magical.
1869
1870=cut
1871*/
1872
1873bool
1874Perl_is_gv_magical_sv(pTHX_ SV *name, U32 flags)
1875{
1876 STRLEN len;
1877 const char * const temp = SvPV_const(name, len);
1878 return is_gv_magical(temp, len, flags);
1879}
1880
1881/*
1882=for apidoc is_gv_magical
1883
1884Returns C<TRUE> if given the name of a magical GV.
1885
1886Currently only useful internally when determining if a GV should be
1887created even in rvalue contexts.
1888
1889C<flags> is not used at present but available for future extension to
1890allow selecting particular classes of magical variable.
1891
1892Currently assumes that C<name> is NUL terminated (as well as len being valid).
1893This assumption is met by all callers within the perl core, which all pass
1894pointers returned by SvPV.
1895
1896=cut
1897*/
1898bool
1899Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags)
1900{
1901 PERL_UNUSED_ARG(flags);
1902
1903 if (len > 1) {
1904 const char * const name1 = name + 1;
1905 switch (*name) {
1906 case 'I':
1907 if (len == 3 && name1[1] == 'S' && name[2] == 'A')
1908 goto yes;
1909 break;
1910 case 'O':
1911 if (len == 8 && strEQ(name1, "VERLOAD"))
1912 goto yes;
1913 break;
1914 case 'S':
1915 if (len == 3 && name[1] == 'I' && name[2] == 'G')
1916 goto yes;
1917 break;
1918 /* Using ${^...} variables is likely to be sufficiently rare that
1919 it seems sensible to avoid the space hit of also checking the
1920 length. */
1921 case '\017': /* ${^OPEN} */
1922 if (strEQ(name1, "PEN"))
1923 goto yes;
1924 break;
1925 case '\024': /* ${^TAINT} */
1926 if (strEQ(name1, "AINT"))
1927 goto yes;
1928 break;
1929 case '\025': /* ${^UNICODE} */
1930 if (strEQ(name1, "NICODE"))
1931 goto yes;
1932 if (strEQ(name1, "TF8LOCALE"))
1933 goto yes;
1934 break;
1935 case '\027': /* ${^WARNING_BITS} */
1936 if (strEQ(name1, "ARNING_BITS"))
1937 goto yes;
1938 break;
1939 case '1':
1940 case '2':
1941 case '3':
1942 case '4':
1943 case '5':
1944 case '6':
1945 case '7':
1946 case '8':
1947 case '9':
1948 {
1949 const char *end = name + len;
1950 while (--end > name) {
1951 if (!isDIGIT(*end))
1952 return FALSE;
1953 }
1954 goto yes;
1955 }
1956 }
1957 } else {
1958 /* Because we're already assuming that name is NUL terminated
1959 below, we can treat an empty name as "\0" */
1960 switch (*name) {
1961 case '&':
1962 case '`':
1963 case '\'':
1964 case ':':
1965 case '?':
1966 case '!':
1967 case '-':
1968 case '#':
1969 case '[':
1970 case '^':
1971 case '~':
1972 case '=':
1973 case '%':
1974 case '.':
1975 case '(':
1976 case ')':
1977 case '<':
1978 case '>':
1979 case ',':
1980 case '\\':
1981 case '/':
1982 case '|':
1983 case '+':
1984 case ';':
1985 case ']':
1986 case '\001': /* $^A */
1987 case '\003': /* $^C */
1988 case '\004': /* $^D */
1989 case '\005': /* $^E */
1990 case '\006': /* $^F */
1991 case '\010': /* $^H */
1992 case '\011': /* $^I, NOT \t in EBCDIC */
1993 case '\014': /* $^L */
1994 case '\016': /* $^N */
1995 case '\017': /* $^O */
1996 case '\020': /* $^P */
1997 case '\023': /* $^S */
1998 case '\024': /* $^T */
1999 case '\026': /* $^V */
2000 case '\027': /* $^W */
2001 case '1':
2002 case '2':
2003 case '3':
2004 case '4':
2005 case '5':
2006 case '6':
2007 case '7':
2008 case '8':
2009 case '9':
2010 yes:
2011 return TRUE;
2012 default:
2013 break;
2014 }
2015 }
2016 return FALSE;
2017}
2018
2019/*
2020 * Local variables:
2021 * c-indentation-style: bsd
2022 * c-basic-offset: 4
2023 * indent-tabs-mode: t
2024 * End:
2025 *
2026 * ex: set ts=8 sts=4 sw=4 noet:
2027 */