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