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