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