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