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