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