This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix up MANIFEST and update Maintainers.pl for ExtUtils::CBuilder
[perl5.git] / gv.c
CommitLineData
a0d0e21e 1/* gv.c
79072805 2 *
1129b882 3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
67fbe0e1 4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall and others
79072805
LW
5 *
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8 *
a0d0e21e
LW
9 */
10
11/*
12 * 'Mercy!' cried Gandalf. 'If the giving of information is to be the cure
4ac71550 13 * of your inquisitiveness, I shall spend all the rest of my days in answering
a0d0e21e
LW
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.
4ac71550
TC
18 *
19 * [p.599 of _The Lord of the Rings_, III/xi: "The Palantír"]
79072805
LW
20 */
21
ccfc67b7
JH
22/*
23=head1 GV Functions
166f8a29
DM
24
25A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
26It is a structure that holds a pointer to a scalar, an array, a hash etc,
27corresponding to $foo, @foo, %foo.
28
29GVs are usually found as values in stashes (symbol table hashes) where
30Perl stores its global variables.
31
32=cut
ccfc67b7
JH
33*/
34
79072805 35#include "EXTERN.h"
864dbfa3 36#define PERL_IN_GV_C
79072805 37#include "perl.h"
8261f8eb 38#include "overload.c"
79072805 39
f54cb97a
AL
40static const char S_autoload[] = "AUTOLOAD";
41static const STRLEN S_autolen = sizeof(S_autoload)-1;
5c7983e5 42
c69033f2 43GV *
d5713896 44Perl_gv_add_by_type(pTHX_ GV *gv, svtype type)
c69033f2 45{
d5713896 46 SV **where;
7918f24d 47
13be902c
FC
48 if (
49 !gv
50 || (
51 SvTYPE((const SV *)gv) != SVt_PVGV
52 && SvTYPE((const SV *)gv) != SVt_PVLV
53 )
54 ) {
bb85b28a
NC
55 const char *what;
56 if (type == SVt_PVIO) {
57 /*
58 * if it walks like a dirhandle, then let's assume that
59 * this is a dirhandle.
60 */
61 what = PL_op->op_type == OP_READDIR ||
62 PL_op->op_type == OP_TELLDIR ||
63 PL_op->op_type == OP_SEEKDIR ||
64 PL_op->op_type == OP_REWINDDIR ||
65 PL_op->op_type == OP_CLOSEDIR ?
66 "dirhandle" : "filehandle";
67 /* diag_listed_as: Bad symbol for filehandle */
68 } else if (type == SVt_PVHV) {
69 what = "hash";
70 } else {
71 what = type == SVt_PVAV ? "array" : "scalar";
72 }
73 Perl_croak(aTHX_ "Bad symbol for %s", what);
74 }
d5713896
NC
75
76 if (type == SVt_PVHV) {
77 where = (SV **)&GvHV(gv);
78 } else if (type == SVt_PVAV) {
79 where = (SV **)&GvAV(gv);
bb85b28a
NC
80 } else if (type == SVt_PVIO) {
81 where = (SV **)&GvIOp(gv);
d5713896
NC
82 } else {
83 where = &GvSV(gv);
84 }
7918f24d 85
d5713896
NC
86 if (!*where)
87 *where = newSV_type(type);
79072805
LW
88 return gv;
89}
90
91GV *
864dbfa3 92Perl_gv_fetchfile(pTHX_ const char *name)
79072805 93{
7918f24d 94 PERL_ARGS_ASSERT_GV_FETCHFILE;
d9095cec
NC
95 return gv_fetchfile_flags(name, strlen(name), 0);
96}
97
98GV *
99Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
100 const U32 flags)
101{
97aff369 102 dVAR;
4116122e 103 char smallbuf[128];
53d95988 104 char *tmpbuf;
d9095cec 105 const STRLEN tmplen = namelen + 2;
79072805
LW
106 GV *gv;
107
7918f24d 108 PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS;
d9095cec
NC
109 PERL_UNUSED_ARG(flags);
110
1d7c1841 111 if (!PL_defstash)
a0714e2c 112 return NULL;
1d7c1841 113
d9095cec 114 if (tmplen <= sizeof smallbuf)
53d95988
CS
115 tmpbuf = smallbuf;
116 else
798b63bc 117 Newx(tmpbuf, tmplen, char);
0ac0412a 118 /* This is where the debugger's %{"::_<$filename"} hash is created */
53d95988
CS
119 tmpbuf[0] = '_';
120 tmpbuf[1] = '<';
d9095cec
NC
121 memcpy(tmpbuf + 2, name, namelen);
122 gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
1d7c1841 123 if (!isGV(gv)) {
d9095cec 124 gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
c69033f2 125#ifdef PERL_DONT_CREATE_GVSV
d9095cec 126 GvSV(gv) = newSVpvn(name, namelen);
c69033f2 127#else
d9095cec 128 sv_setpvn(GvSV(gv), name, namelen);
c69033f2 129#endif
1d7c1841 130 }
5a9a79a4
FC
131 if ((PERLDB_LINE || PERLDB_SAVESRC) && !GvAV(gv))
132 hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
53d95988
CS
133 if (tmpbuf != smallbuf)
134 Safefree(tmpbuf);
79072805
LW
135 return gv;
136}
137
62d55b22
NC
138/*
139=for apidoc gv_const_sv
140
141If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
142inlining, or C<gv> is a placeholder reference that would be promoted to such
143a typeglob, then returns the value returned by the sub. Otherwise, returns
144NULL.
145
146=cut
147*/
148
149SV *
150Perl_gv_const_sv(pTHX_ GV *gv)
151{
7918f24d
NC
152 PERL_ARGS_ASSERT_GV_CONST_SV;
153
62d55b22
NC
154 if (SvTYPE(gv) == SVt_PVGV)
155 return cv_const_sv(GvCVu(gv));
156 return SvROK(gv) ? SvRV(gv) : NULL;
157}
158
12816592
NC
159GP *
160Perl_newGP(pTHX_ GV *const gv)
161{
162 GP *gp;
19bad673
NC
163 U32 hash;
164#ifdef USE_ITHREADS
1df5f7c1
NC
165 const char *const file
166 = (PL_curcop && CopFILE(PL_curcop)) ? CopFILE(PL_curcop) : "";
19bad673
NC
167 const STRLEN len = strlen(file);
168#else
169 SV *const temp_sv = CopFILESV(PL_curcop);
170 const char *file;
171 STRLEN len;
172
7918f24d
NC
173 PERL_ARGS_ASSERT_NEWGP;
174
19bad673
NC
175 if (temp_sv) {
176 file = SvPVX(temp_sv);
177 len = SvCUR(temp_sv);
178 } else {
179 file = "";
180 len = 0;
181 }
182#endif
f4890806
NC
183
184 PERL_HASH(hash, file, len);
185
12816592
NC
186 Newxz(gp, 1, GP);
187
188#ifndef PERL_DONT_CREATE_GVSV
b5c2dcb8 189 gp->gp_sv = newSV(0);
12816592
NC
190#endif
191
1df5f7c1 192 gp->gp_line = PL_curcop ? CopLINE(PL_curcop) : 0;
12816592
NC
193 /* XXX Ideally this cast would be replaced with a change to const char*
194 in the struct. */
f4890806 195 gp->gp_file_hek = share_hek(file, len, hash);
12816592
NC
196 gp->gp_egv = gv;
197 gp->gp_refcnt = 1;
198
199 return gp;
200}
201
803f2748
DM
202/* Assign CvGV(cv) = gv, handling weak references.
203 * See also S_anonymise_cv_maybe */
204
205void
206Perl_cvgv_set(pTHX_ CV* cv, GV* gv)
207{
208 GV * const oldgv = CvGV(cv);
209 PERL_ARGS_ASSERT_CVGV_SET;
210
211 if (oldgv == gv)
212 return;
213
214 if (oldgv) {
cfc1e951 215 if (CvCVGV_RC(cv)) {
803f2748 216 SvREFCNT_dec(oldgv);
cfc1e951
DM
217 CvCVGV_RC_off(cv);
218 }
803f2748 219 else {
803f2748
DM
220 sv_del_backref(MUTABLE_SV(oldgv), MUTABLE_SV(cv));
221 }
222 }
223
b3f91e91 224 SvANY(cv)->xcv_gv = gv;
c794ca97 225 assert(!CvCVGV_RC(cv));
803f2748
DM
226
227 if (!gv)
228 return;
229
c794ca97
DM
230 if (isGV_with_GP(gv) && GvGP(gv) && (GvCV(gv) == cv || GvFORM(gv) == cv))
231 Perl_sv_add_backref(aTHX_ MUTABLE_SV(gv), MUTABLE_SV(cv));
232 else {
cfc1e951 233 CvCVGV_RC_on(cv);
803f2748
DM
234 SvREFCNT_inc_simple_void_NN(gv);
235 }
803f2748
DM
236}
237
c68d9564
Z
238/* Assign CvSTASH(cv) = st, handling weak references. */
239
240void
241Perl_cvstash_set(pTHX_ CV *cv, HV *st)
242{
243 HV *oldst = CvSTASH(cv);
244 PERL_ARGS_ASSERT_CVSTASH_SET;
245 if (oldst == st)
246 return;
247 if (oldst)
248 sv_del_backref(MUTABLE_SV(oldst), MUTABLE_SV(cv));
249 SvANY(cv)->xcv_stash = st;
250 if (st)
251 Perl_sv_add_backref(aTHX_ MUTABLE_SV(st), MUTABLE_SV(cv));
252}
803f2748 253
463ee0b2 254void
864dbfa3 255Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
463ee0b2 256{
27da23d5 257 dVAR;
3b6733bf
NC
258 const U32 old_type = SvTYPE(gv);
259 const bool doproto = old_type > SVt_NULL;
024963f8 260 char * const proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
49a54bbe 261 const STRLEN protolen = proto ? SvCUR(gv) : 0;
756cb477 262 SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
1ccdb730 263 const U32 exported_constant = has_constant ? SvPCS_IMPORTED(gv) : 0;
756cb477 264
7918f24d 265 PERL_ARGS_ASSERT_GV_INIT;
756cb477
NC
266 assert (!(proto && has_constant));
267
268 if (has_constant) {
5c1f4d79
NC
269 /* The constant has to be a simple scalar type. */
270 switch (SvTYPE(has_constant)) {
271 case SVt_PVAV:
272 case SVt_PVHV:
273 case SVt_PVCV:
274 case SVt_PVFM:
275 case SVt_PVIO:
276 Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
277 sv_reftype(has_constant, 0));
42d0e0b7 278 default: NOOP;
5c1f4d79 279 }
756cb477
NC
280 SvRV_set(gv, NULL);
281 SvROK_off(gv);
282 }
463ee0b2 283
3b6733bf
NC
284
285 if (old_type < SVt_PVGV) {
286 if (old_type >= SVt_PV)
287 SvCUR_set(gv, 0);
ad64d0ec 288 sv_upgrade(MUTABLE_SV(gv), SVt_PVGV);
3b6733bf 289 }
55d729e4
GS
290 if (SvLEN(gv)) {
291 if (proto) {
f880fe2f 292 SvPV_set(gv, NULL);
b162af07 293 SvLEN_set(gv, 0);
55d729e4
GS
294 SvPOK_off(gv);
295 } else
94010e71 296 Safefree(SvPVX_mutable(gv));
55d729e4 297 }
2e5b91de
NC
298 SvIOK_off(gv);
299 isGV_with_GP_on(gv);
12816592 300
c43ae56f 301 GvGP_set(gv, Perl_newGP(aTHX_ gv));
e15faf7d
NC
302 GvSTASH(gv) = stash;
303 if (stash)
ad64d0ec 304 Perl_sv_add_backref(aTHX_ MUTABLE_SV(stash), MUTABLE_SV(gv));
ae8cc45f 305 gv_name_set(gv, name, len, GV_ADD);
23ad5bf5 306 if (multi || doproto) /* doproto means it _was_ mentioned */
a5f75d66 307 GvMULTI_on(gv);
55d729e4 308 if (doproto) { /* Replicate part of newSUB here. */
e3d2b9e7 309 CV *cv;
55d729e4 310 ENTER;
756cb477 311 if (has_constant) {
e5c69c9b
DM
312 char *name0 = NULL;
313 if (name[len])
314 /* newCONSTSUB doesn't take a len arg, so make sure we
315 * give it a \0-terminated string */
316 name0 = savepvn(name,len);
317
756cb477 318 /* newCONSTSUB takes ownership of the reference from us. */
e5c69c9b 319 cv = newCONSTSUB(stash, (name0 ? name0 : name), has_constant);
75bd28cf
FC
320 /* In case op.c:S_process_special_blocks stole it: */
321 if (!GvCV(gv))
c43ae56f 322 GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv));
439cdf38 323 assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */
e5c69c9b
DM
324 if (name0)
325 Safefree(name0);
1ccdb730
NC
326 /* If this reference was a copy of another, then the subroutine
327 must have been "imported", by a Perl space assignment to a GV
328 from a reference to CV. */
329 if (exported_constant)
330 GvIMPORTED_CV_on(gv);
756cb477 331 } else {
756cb477 332 (void) start_subparse(0,0); /* Create empty CV in compcv. */
e3d2b9e7 333 cv = PL_compcv;
c43ae56f 334 GvCV_set(gv,cv);
756cb477 335 }
55d729e4
GS
336 LEAVE;
337
e1a479c5 338 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar($) { (shift) } sub ASDF::baz($); *ASDF::baz = \&Foo::bar */
b3f91e91 339 CvGV_set(cv, gv);
e3d2b9e7 340 CvFILE_set_from_cop(cv, PL_curcop);
c68d9564 341 CvSTASH_set(cv, PL_curstash);
55d729e4 342 if (proto) {
e3d2b9e7 343 sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen,
49a54bbe 344 SV_HAS_TRAILING_NUL);
55d729e4
GS
345 }
346 }
463ee0b2
LW
347}
348
76e3520e 349STATIC void
fe9845cc 350S_gv_init_sv(pTHX_ GV *gv, const svtype sv_type)
a0d0e21e 351{
7918f24d
NC
352 PERL_ARGS_ASSERT_GV_INIT_SV;
353
a0d0e21e
LW
354 switch (sv_type) {
355 case SVt_PVIO:
356 (void)GvIOn(gv);
357 break;
358 case SVt_PVAV:
359 (void)GvAVn(gv);
360 break;
361 case SVt_PVHV:
362 (void)GvHVn(gv);
363 break;
c69033f2
NC
364#ifdef PERL_DONT_CREATE_GVSV
365 case SVt_NULL:
366 case SVt_PVCV:
367 case SVt_PVFM:
e654831b 368 case SVt_PVGV:
c69033f2
NC
369 break;
370 default:
dbdce04c
NC
371 if(GvSVn(gv)) {
372 /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13
373 If we just cast GvSVn(gv) to void, it ignores evaluating it for
374 its side effect */
375 }
c69033f2 376#endif
a0d0e21e
LW
377 }
378}
379
954c1994
GS
380/*
381=for apidoc gv_fetchmeth
382
383Returns the glob with the given C<name> and a defined subroutine or
384C<NULL>. The glob lives in the given C<stash>, or in the stashes
07766739 385accessible via @ISA and UNIVERSAL::.
954c1994
GS
386
387The argument C<level> should be either 0 or -1. If C<level==0>, as a
388side-effect creates a glob with the given C<name> in the given C<stash>
389which in the case of success contains an alias for the subroutine, and sets
e1a479c5 390up caching info for this glob.
954c1994
GS
391
392This function grants C<"SUPER"> token as a postfix of the stash name. The
393GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
4929bf7b 394visible to Perl code. So when calling C<call_sv>, you should not use
954c1994 395the GV directly; instead, you should use the method's CV, which can be
b267980d 396obtained from the GV with the C<GvCV> macro.
954c1994
GS
397
398=cut
399*/
400
e1a479c5
BB
401/* NOTE: No support for tied ISA */
402
79072805 403GV *
864dbfa3 404Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
79072805 405{
97aff369 406 dVAR;
463ee0b2 407 GV** gvp;
e1a479c5
BB
408 AV* linear_av;
409 SV** linear_svp;
410 SV* linear_sv;
411 HV* cstash;
412 GV* candidate = NULL;
413 CV* cand_cv = NULL;
414 CV* old_cv;
415 GV* topgv = NULL;
bfcb3514 416 const char *hvname;
e1a479c5
BB
417 I32 create = (level >= 0) ? 1 : 0;
418 I32 items;
419 STRLEN packlen;
420 U32 topgen_cmp;
a0d0e21e 421
7918f24d
NC
422 PERL_ARGS_ASSERT_GV_FETCHMETH;
423
af09ea45
IK
424 /* UNIVERSAL methods should be callable without a stash */
425 if (!stash) {
e1a479c5 426 create = 0; /* probably appropriate */
da51bb9b 427 if(!(stash = gv_stashpvs("UNIVERSAL", 0)))
af09ea45
IK
428 return 0;
429 }
430
e1a479c5
BB
431 assert(stash);
432
bfcb3514
NC
433 hvname = HvNAME_get(stash);
434 if (!hvname)
e1a479c5 435 Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
e27ad1f2 436
e1a479c5
BB
437 assert(hvname);
438 assert(name);
463ee0b2 439
bfcb3514 440 DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,hvname) );
44a8e56a 441
dd69841b 442 topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation;
e1a479c5
BB
443
444 /* check locally for a real method or a cache entry */
445 gvp = (GV**)hv_fetch(stash, name, len, create);
446 if(gvp) {
447 topgv = *gvp;
448 assert(topgv);
449 if (SvTYPE(topgv) != SVt_PVGV)
450 gv_init(topgv, stash, name, len, TRUE);
451 if ((cand_cv = GvCV(topgv))) {
452 /* If genuine method or valid cache entry, use it */
453 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
454 return topgv;
455 }
456 else {
457 /* stale cache entry, junk it and move on */
458 SvREFCNT_dec(cand_cv);
c43ae56f
DM
459 GvCV_set(topgv, NULL);
460 cand_cv = NULL;
e1a479c5
BB
461 GvCVGEN(topgv) = 0;
462 }
463 }
464 else if (GvCVGEN(topgv) == topgen_cmp) {
465 /* cache indicates no such method definitively */
466 return 0;
467 }
463ee0b2 468 }
79072805 469
e1a479c5
BB
470 packlen = HvNAMELEN_get(stash);
471 if (packlen >= 7 && strEQ(hvname + packlen - 7, "::SUPER")) {
472 HV* basestash;
473 packlen -= 7;
474 basestash = gv_stashpvn(hvname, packlen, GV_ADD);
475 linear_av = mro_get_linear_isa(basestash);
9607fc9c 476 }
e1a479c5
BB
477 else {
478 linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
79072805 479 }
a0d0e21e 480
e1a479c5
BB
481 linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
482 items = AvFILLp(linear_av); /* no +1, to skip over self */
483 while (items--) {
484 linear_sv = *linear_svp++;
485 assert(linear_sv);
486 cstash = gv_stashsv(linear_sv, 0);
487
dd69841b 488 if (!cstash) {
a2a5de95
NC
489 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), "Can't locate package %"SVf" for @%s::ISA",
490 SVfARG(linear_sv), hvname);
e1a479c5
BB
491 continue;
492 }
9607fc9c 493
e1a479c5
BB
494 assert(cstash);
495
496 gvp = (GV**)hv_fetch(cstash, name, len, 0);
497 if (!gvp) continue;
498 candidate = *gvp;
499 assert(candidate);
500 if (SvTYPE(candidate) != SVt_PVGV) gv_init(candidate, cstash, name, len, TRUE);
501 if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
502 /*
503 * Found real method, cache method in topgv if:
504 * 1. topgv has no synonyms (else inheritance crosses wires)
505 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
506 */
507 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
508 if ((old_cv = GvCV(topgv))) SvREFCNT_dec(old_cv);
509 SvREFCNT_inc_simple_void_NN(cand_cv);
c43ae56f 510 GvCV_set(topgv, cand_cv);
e1a479c5
BB
511 GvCVGEN(topgv) = topgen_cmp;
512 }
513 return candidate;
514 }
515 }
9607fc9c 516
e1a479c5
BB
517 /* Check UNIVERSAL without caching */
518 if(level == 0 || level == -1) {
519 candidate = gv_fetchmeth(NULL, name, len, 1);
520 if(candidate) {
521 cand_cv = GvCV(candidate);
522 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
523 if ((old_cv = GvCV(topgv))) SvREFCNT_dec(old_cv);
524 SvREFCNT_inc_simple_void_NN(cand_cv);
c43ae56f 525 GvCV_set(topgv, cand_cv);
e1a479c5
BB
526 GvCVGEN(topgv) = topgen_cmp;
527 }
528 return candidate;
529 }
530 }
531
532 if (topgv && GvREFCNT(topgv) == 1) {
533 /* cache the fact that the method is not defined */
534 GvCVGEN(topgv) = topgen_cmp;
a0d0e21e
LW
535 }
536
79072805
LW
537 return 0;
538}
539
954c1994 540/*
611c1e95
IZ
541=for apidoc gv_fetchmeth_autoload
542
543Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
544Returns a glob for the subroutine.
545
546For an autoloaded subroutine without a GV, will create a GV even
547if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
548of the result may be zero.
549
550=cut
551*/
552
553GV *
554Perl_gv_fetchmeth_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
555{
556 GV *gv = gv_fetchmeth(stash, name, len, level);
557
7918f24d
NC
558 PERL_ARGS_ASSERT_GV_FETCHMETH_AUTOLOAD;
559
611c1e95 560 if (!gv) {
611c1e95
IZ
561 CV *cv;
562 GV **gvp;
563
564 if (!stash)
6136c704 565 return NULL; /* UNIVERSAL::AUTOLOAD could cause trouble */
7edbdc6b 566 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
6136c704 567 return NULL;
5c7983e5 568 if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
6136c704 569 return NULL;
611c1e95
IZ
570 cv = GvCV(gv);
571 if (!(CvROOT(cv) || CvXSUB(cv)))
6136c704 572 return NULL;
611c1e95
IZ
573 /* Have an autoload */
574 if (level < 0) /* Cannot do without a stub */
575 gv_fetchmeth(stash, name, len, 0);
576 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
577 if (!gvp)
6136c704 578 return NULL;
611c1e95
IZ
579 return *gvp;
580 }
581 return gv;
582}
583
584/*
954c1994
GS
585=for apidoc gv_fetchmethod_autoload
586
587Returns the glob which contains the subroutine to call to invoke the method
588on the C<stash>. In fact in the presence of autoloading this may be the
589glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
b267980d 590already setup.
954c1994
GS
591
592The third parameter of C<gv_fetchmethod_autoload> determines whether
593AUTOLOAD lookup is performed if the given method is not present: non-zero
b267980d 594means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
954c1994 595Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
b267980d 596with a non-zero C<autoload> parameter.
954c1994
GS
597
598These functions grant C<"SUPER"> token as a prefix of the method name. Note
599that if you want to keep the returned glob for a long time, you need to
600check for it being "AUTOLOAD", since at the later time the call may load a
601different subroutine due to $AUTOLOAD changing its value. Use the glob
b267980d 602created via a side effect to do this.
954c1994
GS
603
604These functions have the same side-effects and as C<gv_fetchmeth> with
605C<level==0>. C<name> should be writable if contains C<':'> or C<'
606''>. The warning against passing the GV returned by C<gv_fetchmeth> to
b267980d 607C<call_sv> apply equally to these functions.
954c1994
GS
608
609=cut
610*/
611
7d3b1f61
BB
612STATIC HV*
613S_gv_get_super_pkg(pTHX_ const char* name, I32 namelen)
614{
615 AV* superisa;
616 GV** gvp;
617 GV* gv;
618 HV* stash;
619
7918f24d
NC
620 PERL_ARGS_ASSERT_GV_GET_SUPER_PKG;
621
7d3b1f61
BB
622 stash = gv_stashpvn(name, namelen, 0);
623 if(stash) return stash;
624
625 /* If we must create it, give it an @ISA array containing
626 the real package this SUPER is for, so that it's tied
627 into the cache invalidation code correctly */
628 stash = gv_stashpvn(name, namelen, GV_ADD);
629 gvp = (GV**)hv_fetchs(stash, "ISA", TRUE);
630 gv = *gvp;
631 gv_init(gv, stash, "ISA", 3, TRUE);
632 superisa = GvAVn(gv);
633 GvMULTI_on(gv);
ad64d0ec 634 sv_magic(MUTABLE_SV(superisa), MUTABLE_SV(gv), PERL_MAGIC_isa, NULL, 0);
8e3a4a30 635#ifdef USE_ITHREADS
7d3b1f61 636 av_push(superisa, newSVpv(CopSTASHPV(PL_curcop), 0));
8e3a4a30
NC
637#else
638 av_push(superisa, newSVhek(CopSTASH(PL_curcop)
639 ? HvNAME_HEK(CopSTASH(PL_curcop)) : NULL));
640#endif
7d3b1f61
BB
641
642 return stash;
643}
644
dc848c6f 645GV *
864dbfa3 646Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
dc848c6f 647{
547bb267
NC
648 PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
649
256d1bb2
NC
650 return gv_fetchmethod_flags(stash, name, autoload ? GV_AUTOLOAD : 0);
651}
652
653/* Don't merge this yet, as it's likely to get a len parameter, and possibly
654 even a U32 hash */
655GV *
656Perl_gv_fetchmethod_flags(pTHX_ HV *stash, const char *name, U32 flags)
657{
97aff369 658 dVAR;
08105a92 659 register const char *nend;
c445ea15 660 const char *nsplit = NULL;
a0d0e21e 661 GV* gv;
0dae17bd 662 HV* ostash = stash;
c94593d0 663 const char * const origname = name;
ad64d0ec 664 SV *const error_report = MUTABLE_SV(stash);
256d1bb2
NC
665 const U32 autoload = flags & GV_AUTOLOAD;
666 const U32 do_croak = flags & GV_CROAK;
0dae17bd 667
547bb267 668 PERL_ARGS_ASSERT_GV_FETCHMETHOD_FLAGS;
7918f24d 669
eff494dd 670 if (SvTYPE(stash) < SVt_PVHV)
5c284bb0 671 stash = NULL;
c9bf4021
NC
672 else {
673 /* The only way stash can become NULL later on is if nsplit is set,
674 which in turn means that there is no need for a SVt_PVHV case
675 the error reporting code. */
676 }
b267980d 677
463ee0b2 678 for (nend = name; *nend; nend++) {
c94593d0 679 if (*nend == '\'') {
a0d0e21e 680 nsplit = nend;
c94593d0
NC
681 name = nend + 1;
682 }
683 else if (*nend == ':' && *(nend + 1) == ':') {
684 nsplit = nend++;
685 name = nend + 1;
686 }
a0d0e21e
LW
687 }
688 if (nsplit) {
7edbdc6b 689 if ((nsplit - origname) == 5 && memEQ(origname, "SUPER", 5)) {
9607fc9c 690 /* ->SUPER::method should really be looked up in original stash */
b37c2d43 691 SV * const tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
1d7c1841 692 CopSTASHPV(PL_curcop)));
af09ea45 693 /* __PACKAGE__::SUPER stash should be autovivified */
7d3b1f61 694 stash = gv_get_super_pkg(SvPVX_const(tmpstr), SvCUR(tmpstr));
cea2e8a9 695 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
bfcb3514 696 origname, HvNAME_get(stash), name) );
4633a7c4 697 }
e189a56d 698 else {
af09ea45 699 /* don't autovifify if ->NoSuchStash::method */
da51bb9b 700 stash = gv_stashpvn(origname, nsplit - origname, 0);
e189a56d
IK
701
702 /* however, explicit calls to Pkg::SUPER::method may
703 happen, and may require autovivification to work */
704 if (!stash && (nsplit - origname) >= 7 &&
705 strnEQ(nsplit - 7, "::SUPER", 7) &&
da51bb9b 706 gv_stashpvn(origname, nsplit - origname - 7, 0))
7d3b1f61 707 stash = gv_get_super_pkg(origname, nsplit - origname);
e189a56d 708 }
0dae17bd 709 ostash = stash;
4633a7c4
LW
710 }
711
9607fc9c 712 gv = gv_fetchmeth(stash, name, nend - name, 0);
a0d0e21e 713 if (!gv) {
2f6e0fe7 714 if (strEQ(name,"import") || strEQ(name,"unimport"))
159b6efe 715 gv = MUTABLE_GV(&PL_sv_yes);
dc848c6f 716 else if (autoload)
0dae17bd 717 gv = gv_autoload4(ostash, name, nend - name, TRUE);
256d1bb2
NC
718 if (!gv && do_croak) {
719 /* Right now this is exclusively for the benefit of S_method_common
720 in pp_hot.c */
721 if (stash) {
15e6cdd9
DG
722 /* If we can't find an IO::File method, it might be a call on
723 * a filehandle. If IO:File has not been loaded, try to
724 * require it first instead of croaking */
725 const char *stash_name = HvNAME_get(stash);
31b05a0f
FR
726 if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File")
727 && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL,
728 STR_WITH_LEN("IO/File.pm"), 0,
729 HV_FETCH_ISEXISTS, NULL, 0)
15e6cdd9 730 ) {
31b05a0f 731 require_pv("IO/File.pm");
15e6cdd9
DG
732 gv = gv_fetchmeth(stash, name, nend - name, 0);
733 if (gv)
734 return gv;
735 }
256d1bb2
NC
736 Perl_croak(aTHX_
737 "Can't locate object method \"%s\" via package \"%.*s\"",
c49b597d 738 name, (int)HvNAMELEN_get(stash), HvNAME_get(stash));
256d1bb2
NC
739 }
740 else {
741 STRLEN packlen;
742 const char *packname;
743
256d1bb2
NC
744 if (nsplit) {
745 packlen = nsplit - origname;
746 packname = origname;
256d1bb2
NC
747 } else {
748 packname = SvPV_const(error_report, packlen);
749 }
750
751 Perl_croak(aTHX_
752 "Can't locate object method \"%s\" via package \"%.*s\""
753 " (perhaps you forgot to load \"%.*s\"?)",
754 name, (int)packlen, packname, (int)packlen, packname);
755 }
756 }
463ee0b2 757 }
dc848c6f 758 else if (autoload) {
9d4ba2ae 759 CV* const cv = GvCV(gv);
09280a33
CS
760 if (!CvROOT(cv) && !CvXSUB(cv)) {
761 GV* stubgv;
762 GV* autogv;
763
764 if (CvANON(cv))
765 stubgv = gv;
766 else {
767 stubgv = CvGV(cv);
768 if (GvCV(stubgv) != cv) /* orphaned import */
769 stubgv = gv;
770 }
771 autogv = gv_autoload4(GvSTASH(stubgv),
772 GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
dc848c6f 773 if (autogv)
774 gv = autogv;
775 }
776 }
44a8e56a 777
778 return gv;
779}
780
781GV*
864dbfa3 782Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
44a8e56a 783{
27da23d5 784 dVAR;
44a8e56a 785 GV* gv;
786 CV* cv;
787 HV* varstash;
788 GV* vargv;
789 SV* varsv;
e1ec3a88 790 const char *packname = "";
eae70eaa 791 STRLEN packname_len = 0;
44a8e56a 792
7918f24d
NC
793 PERL_ARGS_ASSERT_GV_AUTOLOAD4;
794
7edbdc6b 795 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
a0714e2c 796 return NULL;
0dae17bd
GS
797 if (stash) {
798 if (SvTYPE(stash) < SVt_PVHV) {
ad64d0ec 799 packname = SvPV_const(MUTABLE_SV(stash), packname_len);
5c284bb0 800 stash = NULL;
0dae17bd
GS
801 }
802 else {
bfcb3514 803 packname = HvNAME_get(stash);
7423f6db 804 packname_len = HvNAMELEN_get(stash);
0dae17bd
GS
805 }
806 }
5c7983e5 807 if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
a0714e2c 808 return NULL;
dc848c6f 809 cv = GvCV(gv);
810
adb5a9ae 811 if (!(CvROOT(cv) || CvXSUB(cv)))
a0714e2c 812 return NULL;
ed850460 813
dc848c6f 814 /*
815 * Inheriting AUTOLOAD for non-methods works ... for now.
816 */
041457d9 817 if (!method && (GvCVGEN(gv) || GvSTASH(gv) != stash)
041457d9 818 )
d1d15184
NC
819 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
820 "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
821 packname, (int)len, name);
44a8e56a 822
aed2304a 823 if (CvISXSUB(cv)) {
adb5a9ae
DM
824 /* rather than lookup/init $AUTOLOAD here
825 * only to have the XSUB do another lookup for $AUTOLOAD
826 * and split that value on the last '::',
827 * pass along the same data via some unused fields in the CV
828 */
c68d9564 829 CvSTASH_set(cv, stash);
f880fe2f 830 SvPV_set(cv, (char *)name); /* cast to lose constness warning */
b162af07 831 SvCUR_set(cv, len);
adb5a9ae
DM
832 return gv;
833 }
adb5a9ae 834
44a8e56a 835 /*
836 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
837 * The subroutine's original name may not be "AUTOLOAD", so we don't
838 * use that, but for lack of anything better we will use the sub's
839 * original package to look up $AUTOLOAD.
840 */
841 varstash = GvSTASH(CvGV(cv));
5c7983e5 842 vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
3d35f11b
GS
843 ENTER;
844
c69033f2 845 if (!isGV(vargv)) {
5c7983e5 846 gv_init(vargv, varstash, S_autoload, S_autolen, FALSE);
c69033f2 847#ifdef PERL_DONT_CREATE_GVSV
561b68a9 848 GvSV(vargv) = newSV(0);
c69033f2
NC
849#endif
850 }
3d35f11b 851 LEAVE;
e203899d 852 varsv = GvSVn(vargv);
7423f6db 853 sv_setpvn(varsv, packname, packname_len);
396482e1 854 sv_catpvs(varsv, "::");
44a8e56a 855 sv_catpvn(varsv, name, len);
a0d0e21e
LW
856 return gv;
857}
858
44a2ac75
YO
859
860/* require_tie_mod() internal routine for requiring a module
486ec47a 861 * that implements the logic of automatic ties like %! and %-
44a2ac75
YO
862 *
863 * The "gv" parameter should be the glob.
45cbc99a
RGS
864 * "varpv" holds the name of the var, used for error messages.
865 * "namesv" holds the module name. Its refcount will be decremented.
44a2ac75 866 * "methpv" holds the method name to test for to check that things
45cbc99a
RGS
867 * are working reasonably close to as expected.
868 * "flags": if flag & 1 then save the scalar before loading.
44a2ac75
YO
869 * For the protection of $! to work (it is set by this routine)
870 * the sv slot must already be magicalized.
d2c93421 871 */
44a2ac75
YO
872STATIC HV*
873S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv,const U32 flags)
d2c93421 874{
27da23d5 875 dVAR;
da51bb9b 876 HV* stash = gv_stashsv(namesv, 0);
45cbc99a 877
7918f24d
NC
878 PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
879
44a2ac75 880 if (!stash || !(gv_fetchmethod(stash, methpv))) {
45cbc99a
RGS
881 SV *module = newSVsv(namesv);
882 char varname = *varpv; /* varpv might be clobbered by load_module,
883 so save it. For the moment it's always
884 a single char. */
d2c93421 885 dSP;
d2c93421 886 ENTER;
44a2ac75 887 if ( flags & 1 )
45cbc99a 888 save_scalar(gv);
cac54379 889 PUSHSTACKi(PERLSI_MAGIC);
45cbc99a 890 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
cac54379 891 POPSTACK;
d2c93421
RH
892 LEAVE;
893 SPAGAIN;
da51bb9b 894 stash = gv_stashsv(namesv, 0);
44a2ac75 895 if (!stash)
45cbc99a
RGS
896 Perl_croak(aTHX_ "panic: Can't use %%%c because %"SVf" is not available",
897 varname, SVfARG(namesv));
898 else if (!gv_fetchmethod(stash, methpv))
899 Perl_croak(aTHX_ "panic: Can't use %%%c because %"SVf" does not support method %s",
900 varname, SVfARG(namesv), methpv);
d2c93421 901 }
45cbc99a 902 SvREFCNT_dec(namesv);
44a2ac75 903 return stash;
d2c93421
RH
904}
905
954c1994
GS
906/*
907=for apidoc gv_stashpv
908
da51bb9b 909Returns a pointer to the stash for a specified package. Uses C<strlen> to
75c442e4 910determine the length of C<name>, then calls C<gv_stashpvn()>.
954c1994
GS
911
912=cut
913*/
914
a0d0e21e 915HV*
864dbfa3 916Perl_gv_stashpv(pTHX_ const char *name, I32 create)
a0d0e21e 917{
7918f24d 918 PERL_ARGS_ASSERT_GV_STASHPV;
dc437b57 919 return gv_stashpvn(name, strlen(name), create);
920}
921
bc96cb06
SH
922/*
923=for apidoc gv_stashpvn
924
da51bb9b
NC
925Returns a pointer to the stash for a specified package. The C<namelen>
926parameter indicates the length of the C<name>, in bytes. C<flags> is passed
927to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
928created if it does not already exist. If the package does not exist and
929C<flags> is 0 (or any other setting that does not create packages) then NULL
930is returned.
931
bc96cb06
SH
932
933=cut
934*/
935
dc437b57 936HV*
da51bb9b 937Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
dc437b57 938{
0cea0058 939 char smallbuf[128];
46fc3d4c 940 char *tmpbuf;
a0d0e21e
LW
941 HV *stash;
942 GV *tmpgv;
add0ecde 943 U32 tmplen = namelen + 2;
dc437b57 944
7918f24d
NC
945 PERL_ARGS_ASSERT_GV_STASHPVN;
946
add0ecde 947 if (tmplen <= sizeof smallbuf)
46fc3d4c 948 tmpbuf = smallbuf;
949 else
add0ecde
VP
950 Newx(tmpbuf, tmplen, char);
951 Copy(name, tmpbuf, namelen, char);
952 tmpbuf[namelen] = ':';
953 tmpbuf[namelen+1] = ':';
954 tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
46fc3d4c 955 if (tmpbuf != smallbuf)
956 Safefree(tmpbuf);
a0d0e21e 957 if (!tmpgv)
da51bb9b 958 return NULL;
a0d0e21e 959 stash = GvHV(tmpgv);
b4dd6623
NC
960 assert(stash);
961 assert(HvNAME_get(stash));
a0d0e21e 962 return stash;
463ee0b2
LW
963}
964
954c1994
GS
965/*
966=for apidoc gv_stashsv
967
da51bb9b 968Returns a pointer to the stash for a specified package. See C<gv_stashpvn>.
954c1994
GS
969
970=cut
971*/
972
a0d0e21e 973HV*
da51bb9b 974Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
a0d0e21e 975{
dc437b57 976 STRLEN len;
9d4ba2ae 977 const char * const ptr = SvPV_const(sv,len);
7918f24d
NC
978
979 PERL_ARGS_ASSERT_GV_STASHSV;
980
da51bb9b 981 return gv_stashpvn(ptr, len, flags);
a0d0e21e
LW
982}
983
984
463ee0b2 985GV *
fe9845cc 986Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
7918f24d 987 PERL_ARGS_ASSERT_GV_FETCHPV;
b7787f18 988 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
7a5fd60d
NC
989}
990
991GV *
fe9845cc 992Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
7a5fd60d 993 STRLEN len;
9d4ba2ae 994 const char * const nambeg = SvPV_const(name, len);
7918f24d 995 PERL_ARGS_ASSERT_GV_FETCHSV;
7a5fd60d
NC
996 return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
997}
998
ad7cce9f 999STATIC void
290a1700 1000S_gv_magicalize_isa(pTHX_ GV *gv)
ad7cce9f
FR
1001{
1002 AV* av;
1003
1004 PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
1005
1006 av = GvAVn(gv);
1007 GvMULTI_on(gv);
1008 sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1009 NULL, 0);
ad7cce9f
FR
1010}
1011
1012STATIC void
26469672 1013S_gv_magicalize_overload(pTHX_ GV *gv)
ad7cce9f
FR
1014{
1015 HV* hv;
1016
1017 PERL_ARGS_ASSERT_GV_MAGICALIZE_OVERLOAD;
1018
1019 hv = GvHVn(gv);
1020 GvMULTI_on(gv);
1021 hv_magic(hv, NULL, PERL_MAGIC_overload);
1022}
1023
7a5fd60d
NC
1024GV *
1025Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
fe9845cc 1026 const svtype sv_type)
79072805 1027{
97aff369 1028 dVAR;
08105a92 1029 register const char *name = nambeg;
c445ea15 1030 register GV *gv = NULL;
79072805 1031 GV**gvp;
79072805 1032 I32 len;
b3d904f3 1033 register const char *name_cursor;
c445ea15 1034 HV *stash = NULL;
add2581e 1035 const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
e26df76a 1036 const I32 no_expand = flags & GV_NOEXPAND;
780a5241 1037 const I32 add = flags & ~GV_NOADD_MASK;
b3d904f3
NC
1038 const char *const name_end = nambeg + full_len;
1039 const char *const name_em1 = name_end - 1;
5e0caaeb 1040 U32 faking_it;
79072805 1041
7918f24d
NC
1042 PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
1043
fafc274c
NC
1044 if (flags & GV_NOTQUAL) {
1045 /* Caller promised that there is no stash, so we can skip the check. */
1046 len = full_len;
1047 goto no_stash;
1048 }
1049
b208e10c
NC
1050 if (full_len > 2 && *name == '*' && isALPHA(name[1])) {
1051 /* accidental stringify on a GV? */
c07a80fd 1052 name++;
b208e10c 1053 }
c07a80fd 1054
b3d904f3
NC
1055 for (name_cursor = name; name_cursor < name_end; name_cursor++) {
1056 if ((*name_cursor == ':' && name_cursor < name_em1
1057 && name_cursor[1] == ':')
1058 || (*name_cursor == '\'' && name_cursor[1]))
463ee0b2 1059 {
463ee0b2 1060 if (!stash)
3280af22 1061 stash = PL_defstash;
dc437b57 1062 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
a0714e2c 1063 return NULL;
463ee0b2 1064
b3d904f3 1065 len = name_cursor - name;
85e6fe83 1066 if (len > 0) {
3a5b580c
NC
1067 const char *key;
1068 if (*name_cursor == ':') {
1069 key = name;
e771aaa9
NC
1070 len += 2;
1071 } else {
3a5b580c 1072 char *tmpbuf;
2ae0db35 1073 Newx(tmpbuf, len+2, char);
e771aaa9
NC
1074 Copy(name, tmpbuf, len, char);
1075 tmpbuf[len++] = ':';
1076 tmpbuf[len++] = ':';
3a5b580c 1077 key = tmpbuf;
e771aaa9 1078 }
3a5b580c 1079 gvp = (GV**)hv_fetch(stash, key, len, add);
a0714e2c 1080 gv = gvp ? *gvp : NULL;
159b6efe 1081 if (gv && gv != (const GV *)&PL_sv_undef) {
6fa846a0 1082 if (SvTYPE(gv) != SVt_PVGV)
3a5b580c 1083 gv_init(gv, stash, key, len, (add & GV_ADDMULTI));
6fa846a0
GS
1084 else
1085 GvMULTI_on(gv);
1086 }
3a5b580c
NC
1087 if (key != name)
1088 Safefree((char *)key);
159b6efe 1089 if (!gv || gv == (const GV *)&PL_sv_undef)
a0714e2c 1090 return NULL;
85e6fe83 1091
463ee0b2 1092 if (!(stash = GvHV(gv)))
298d6511 1093 {
99ee9762
FC
1094 stash = GvHV(gv) = newHV();
1095 if (!HvNAME_get(stash)) {
1096 hv_name_set(stash, nambeg, name_cursor-nambeg, 0);
1097 /* If the containing stash has multiple effective
1098 names, see that this one gets them, too. */
1099 if (HvAUX(GvSTASH(gv))->xhv_name_count)
1100 mro_package_moved(stash, NULL, gv, 1);
1101 }
298d6511 1102 }
99ee9762
FC
1103 else if (!HvNAME_get(stash))
1104 hv_name_set(stash, nambeg, name_cursor - nambeg, 0);
463ee0b2
LW
1105 }
1106
b3d904f3
NC
1107 if (*name_cursor == ':')
1108 name_cursor++;
1109 name_cursor++;
1110 name = name_cursor;
ad6bfa9d 1111 if (name == name_end)
159b6efe
NC
1112 return gv
1113 ? gv : MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
79072805 1114 }
79072805 1115 }
b3d904f3 1116 len = name_cursor - name;
463ee0b2
LW
1117
1118 /* No stash in name, so see how we can default */
1119
1120 if (!stash) {
fafc274c 1121 no_stash:
8ccce9ae 1122 if (len && isIDFIRST_lazy(name)) {
9607fc9c 1123 bool global = FALSE;
1124
8ccce9ae
NC
1125 switch (len) {
1126 case 1:
18ea00d7 1127 if (*name == '_')
9d116dd7 1128 global = TRUE;
18ea00d7 1129 break;
8ccce9ae
NC
1130 case 3:
1131 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1132 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1133 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
9d116dd7 1134 global = TRUE;
18ea00d7 1135 break;
8ccce9ae
NC
1136 case 4:
1137 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1138 && name[3] == 'V')
9d116dd7 1139 global = TRUE;
18ea00d7 1140 break;
8ccce9ae
NC
1141 case 5:
1142 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1143 && name[3] == 'I' && name[4] == 'N')
463ee0b2 1144 global = TRUE;
18ea00d7 1145 break;
8ccce9ae
NC
1146 case 6:
1147 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1148 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1149 ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
1150 global = TRUE;
1151 break;
1152 case 7:
1153 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1154 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1155 && name[6] == 'T')
18ea00d7
NC
1156 global = TRUE;
1157 break;
463ee0b2 1158 }
9607fc9c 1159
463ee0b2 1160 if (global)
3280af22 1161 stash = PL_defstash;
923e4eb5 1162 else if (IN_PERL_COMPILETIME) {
3280af22
NIS
1163 stash = PL_curstash;
1164 if (add && (PL_hints & HINT_STRICT_VARS) &&
748a9306
LW
1165 sv_type != SVt_PVCV &&
1166 sv_type != SVt_PVGV &&
4633a7c4 1167 sv_type != SVt_PVFM &&
c07a80fd 1168 sv_type != SVt_PVIO &&
70ec6265
NC
1169 !(len == 1 && sv_type == SVt_PV &&
1170 (*name == 'a' || *name == 'b')) )
748a9306 1171 {
4633a7c4
LW
1172 gvp = (GV**)hv_fetch(stash,name,len,0);
1173 if (!gvp ||
159b6efe 1174 *gvp == (const GV *)&PL_sv_undef ||
a5f75d66
AD
1175 SvTYPE(*gvp) != SVt_PVGV)
1176 {
d4c19fe8 1177 stash = NULL;
a5f75d66 1178 }
155aba94
GS
1179 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
1180 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1181 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
4633a7c4 1182 {
fe13d51d 1183 /* diag_listed_as: Variable "%s" is not imported%s */
413ff9f6
FC
1184 Perl_ck_warner_d(
1185 aTHX_ packWARN(WARN_MISC),
1186 "Variable \"%c%s\" is not imported",
4633a7c4
LW
1187 sv_type == SVt_PVAV ? '@' :
1188 sv_type == SVt_PVHV ? '%' : '$',
1189 name);
8ebc5c01 1190 if (GvCVu(*gvp))
413ff9f6
FC
1191 Perl_ck_warner_d(
1192 aTHX_ packWARN(WARN_MISC),
1193 "\t(Did you mean &%s instead?)\n", name
1194 );
d4c19fe8 1195 stash = NULL;
4633a7c4 1196 }
a0d0e21e 1197 }
85e6fe83 1198 }
463ee0b2 1199 else
1d7c1841 1200 stash = CopSTASH(PL_curcop);
463ee0b2
LW
1201 }
1202 else
3280af22 1203 stash = PL_defstash;
463ee0b2
LW
1204 }
1205
1206 /* By this point we should have a stash and a name */
1207
a0d0e21e 1208 if (!stash) {
5a844595 1209 if (add) {
9d4ba2ae 1210 SV * const err = Perl_mess(aTHX_
5a844595
GS
1211 "Global symbol \"%s%s\" requires explicit package name",
1212 (sv_type == SVt_PV ? "$"
1213 : sv_type == SVt_PVAV ? "@"
1214 : sv_type == SVt_PVHV ? "%"
608b3986 1215 : ""), name);
e7f343b6 1216 GV *gv;
608b3986
AE
1217 if (USE_UTF8_IN_NAMES)
1218 SvUTF8_on(err);
1219 qerror(err);
76f68e9b 1220 gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
e7f343b6
NC
1221 if(!gv) {
1222 /* symbol table under destruction */
1223 return NULL;
1224 }
1225 stash = GvHV(gv);
a0d0e21e 1226 }
d7aacf4e 1227 else
a0714e2c 1228 return NULL;
a0d0e21e
LW
1229 }
1230
1231 if (!SvREFCNT(stash)) /* symbol table under destruction */
a0714e2c 1232 return NULL;
a0d0e21e 1233
79072805 1234 gvp = (GV**)hv_fetch(stash,name,len,add);
159b6efe 1235 if (!gvp || *gvp == (const GV *)&PL_sv_undef)
a0714e2c 1236 return NULL;
79072805
LW
1237 gv = *gvp;
1238 if (SvTYPE(gv) == SVt_PVGV) {
a0d0e21e 1239 if (add) {
a5f75d66 1240 GvMULTI_on(gv);
a0d0e21e 1241 gv_init_sv(gv, sv_type);
45cbc99a 1242 if (len == 1 && (sv_type == SVt_PVHV || sv_type == SVt_PVGV)) {
44a2ac75
YO
1243 if (*name == '!')
1244 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
45cbc99a 1245 else if (*name == '-' || *name == '+')
192b9cd1 1246 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
45cbc99a 1247 }
af16de9f
FC
1248 else if (len == 3 && sv_type == SVt_PVAV
1249 && strnEQ(name, "ISA", 3)
1250 && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
1251 gv_magicalize_isa(gv);
a0d0e21e 1252 }
79072805 1253 return gv;
add2581e 1254 } else if (no_init) {
55d729e4 1255 return gv;
e26df76a
NC
1256 } else if (no_expand && SvROK(gv)) {
1257 return gv;
79072805 1258 }
93a17b20 1259
5e0caaeb
NC
1260 /* Adding a new symbol.
1261 Unless of course there was already something non-GV here, in which case
1262 we want to behave as if there was always a GV here, containing some sort
1263 of subroutine.
1264 Otherwise we run the risk of creating things like GvIO, which can cause
1265 subtle bugs. eg the one that tripped up SQL::Translator */
1266
1267 faking_it = SvOK(gv);
93a17b20 1268
9b387841
NC
1269 if (add & GV_ADDWARN)
1270 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
55d729e4 1271 gv_init(gv, stash, name, len, add & GV_ADDMULTI);
5e0caaeb 1272 gv_init_sv(gv, faking_it ? SVt_PVCV : sv_type);
93a17b20 1273
a0288114 1274 if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
7272584d 1275 : (PL_dowarn & G_WARN_ON ) ) )
0453d815
PM
1276 GvMULTI_on(gv) ;
1277
93a17b20 1278 /* set up magic where warranted */
44428a46
FC
1279 if (stash != PL_defstash) { /* not the main stash */
1280 /* We only have to check for four names here: EXPORT, ISA, OVERLOAD
1281 and VERSION. All the others apply only to the main stash. */
1282 if (len > 1) {
b464bac0 1283 const char * const name2 = name + 1;
cc4c2da6 1284 switch (*name) {
cc4c2da6
NC
1285 case 'E':
1286 if (strnEQ(name2, "XPORT", 5))
1287 GvMULTI_on(gv);
1288 break;
1289 case 'I':
44428a46 1290 if (strEQ(name2, "SA"))
290a1700 1291 gv_magicalize_isa(gv);
cc4c2da6
NC
1292 break;
1293 case 'O':
44428a46 1294 if (strEQ(name2, "VERLOAD"))
ad7cce9f 1295 gv_magicalize_overload(gv);
cc4c2da6 1296 break;
44428a46
FC
1297 case 'V':
1298 if (strEQ(name2, "ERSION"))
1299 GvMULTI_on(gv);
1300 break;
1301 }
1302 }
1303 }
1304 else if (len > 1) {
1305#ifndef EBCDIC
1306 if (*name > 'V' ) {
1307 NOOP;
1308 /* Nothing else to do.
1309 The compiler will probably turn the switch statement into a
1310 branch table. Make sure we avoid even that small overhead for
1311 the common case of lower case variable names. */
1312 } else
1313#endif
1314 {
1315 const char * const name2 = name + 1;
1316 switch (*name) {
1317 case 'A':
1318 if (strEQ(name2, "RGV")) {
1319 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1320 }
1321 else if (strEQ(name2, "RGVOUT")) {
1322 GvMULTI_on(gv);
1323 }
1324 break;
1325 case 'E':
1326 if (strnEQ(name2, "XPORT", 5))
1327 GvMULTI_on(gv);
1328 break;
1329 case 'I':
1330 if (strEQ(name2, "SA")) {
290a1700 1331 gv_magicalize_isa(gv);
44428a46
FC
1332 }
1333 break;
1334 case 'O':
1335 if (strEQ(name2, "VERLOAD")) {
ad7cce9f 1336 gv_magicalize_overload(gv);
44428a46
FC
1337 }
1338 break;
cc4c2da6
NC
1339 case 'S':
1340 if (strEQ(name2, "IG")) {
1341 HV *hv;
1342 I32 i;
d525a7b2
NC
1343 if (!PL_psig_name) {
1344 Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
a02a5408 1345 Newxz(PL_psig_pend, SIG_SIZE, int);
d525a7b2 1346 PL_psig_ptr = PL_psig_name + SIG_SIZE;
0bdedcb3
NC
1347 } else {
1348 /* I think that the only way to get here is to re-use an
1349 embedded perl interpreter, where the previous
1350 use didn't clean up fully because
1351 PL_perl_destruct_level was 0. I'm not sure that we
1352 "support" that, in that I suspect in that scenario
1353 there are sufficient other garbage values left in the
1354 interpreter structure that something else will crash
1355 before we get here. I suspect that this is one of
1356 those "doctor, it hurts when I do this" bugs. */
d525a7b2 1357 Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
0bdedcb3 1358 Zero(PL_psig_pend, SIG_SIZE, int);
cc4c2da6
NC
1359 }
1360 GvMULTI_on(gv);
1361 hv = GvHVn(gv);
a0714e2c 1362 hv_magic(hv, NULL, PERL_MAGIC_sig);
cc4c2da6 1363 for (i = 1; i < SIG_SIZE; i++) {
551405c4 1364 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
cc4c2da6
NC
1365 if (init)
1366 sv_setsv(*init, &PL_sv_undef);
cc4c2da6
NC
1367 }
1368 }
1369 break;
1370 case 'V':
1371 if (strEQ(name2, "ERSION"))
1372 GvMULTI_on(gv);
1373 break;
e5218da5
GA
1374 case '\003': /* $^CHILD_ERROR_NATIVE */
1375 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1376 goto magicalize;
1377 break;
cc4c2da6
NC
1378 case '\005': /* $^ENCODING */
1379 if (strEQ(name2, "NCODING"))
1380 goto magicalize;
1381 break;
9ebf26ad
FR
1382 case '\007': /* $^GLOBAL_PHASE */
1383 if (strEQ(name2, "LOBAL_PHASE"))
1384 goto ro_magicalize;
1385 break;
cde0cee5
YO
1386 case '\015': /* $^MATCH */
1387 if (strEQ(name2, "ATCH"))
2fdbfb4d 1388 goto magicalize;
cc4c2da6
NC
1389 case '\017': /* $^OPEN */
1390 if (strEQ(name2, "PEN"))
1391 goto magicalize;
1392 break;
cde0cee5
YO
1393 case '\020': /* $^PREMATCH $^POSTMATCH */
1394 if (strEQ(name2, "REMATCH") || strEQ(name2, "OSTMATCH"))
9ebf26ad
FR
1395 goto magicalize;
1396 break;
cc4c2da6
NC
1397 case '\024': /* ${^TAINT} */
1398 if (strEQ(name2, "AINT"))
1399 goto ro_magicalize;
1400 break;
7cebcbc0 1401 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
a0288114 1402 if (strEQ(name2, "NICODE"))
cc4c2da6 1403 goto ro_magicalize;
a0288114 1404 if (strEQ(name2, "TF8LOCALE"))
7cebcbc0 1405 goto ro_magicalize;
e07ea26a
NC
1406 if (strEQ(name2, "TF8CACHE"))
1407 goto magicalize;
cc4c2da6
NC
1408 break;
1409 case '\027': /* $^WARNING_BITS */
1410 if (strEQ(name2, "ARNING_BITS"))
1411 goto magicalize;
1412 break;
1413 case '1':
1414 case '2':
1415 case '3':
1416 case '4':
1417 case '5':
1418 case '6':
1419 case '7':
1420 case '8':
1421 case '9':
85e6fe83 1422 {
2fdbfb4d
AB
1423 /* Ensures that we have an all-digit variable, ${"1foo"} fails
1424 this test */
1425 /* This snippet is taken from is_gv_magical */
cc4c2da6
NC
1426 const char *end = name + len;
1427 while (--end > name) {
2fdbfb4d 1428 if (!isDIGIT(*end)) return gv;
cc4c2da6 1429 }
2fdbfb4d 1430 goto magicalize;
1d7c1841 1431 }
dc437b57 1432 }
93a17b20 1433 }
392db708
NC
1434 } else {
1435 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1436 be case '\0' in this switch statement (ie a default case) */
cc4c2da6 1437 switch (*name) {
6361f656
AB
1438 case '&': /* $& */
1439 case '`': /* $` */
1440 case '\'': /* $' */
cc4c2da6
NC
1441 if (
1442 sv_type == SVt_PVAV ||
1443 sv_type == SVt_PVHV ||
1444 sv_type == SVt_PVCV ||
1445 sv_type == SVt_PVFM ||
1446 sv_type == SVt_PVIO
1447 ) { break; }
1448 PL_sawampersand = TRUE;
2fdbfb4d 1449 goto magicalize;
cc4c2da6 1450
6361f656 1451 case ':': /* $: */
c69033f2 1452 sv_setpv(GvSVn(gv),PL_chopset);
cc4c2da6
NC
1453 goto magicalize;
1454
6361f656 1455 case '?': /* $? */
ff0cee69 1456#ifdef COMPLEX_STATUS
c69033f2 1457 SvUPGRADE(GvSVn(gv), SVt_PVLV);
ff0cee69 1458#endif
cc4c2da6 1459 goto magicalize;
ff0cee69 1460
6361f656 1461 case '!': /* $! */
67261566 1462 GvMULTI_on(gv);
44a2ac75 1463 /* If %! has been used, automatically load Errno.pm. */
d2c93421 1464
ad64d0ec 1465 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
d2c93421 1466
44a2ac75 1467 /* magicalization must be done before require_tie_mod is called */
67261566 1468 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
44a2ac75 1469 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
d2c93421 1470
6cef1e77 1471 break;
6361f656
AB
1472 case '-': /* $- */
1473 case '+': /* $+ */
44a2ac75
YO
1474 GvMULTI_on(gv); /* no used once warnings here */
1475 {
44a2ac75 1476 AV* const av = GvAVn(gv);
ad64d0ec 1477 SV* const avc = (*name == '+') ? MUTABLE_SV(av) : NULL;
44a2ac75 1478
ad64d0ec
NC
1479 sv_magic(MUTABLE_SV(av), avc, PERL_MAGIC_regdata, NULL, 0);
1480 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
67261566 1481 if (avc)
44a2ac75 1482 SvREADONLY_on(GvSVn(gv));
44a2ac75 1483 SvREADONLY_on(av);
67261566
YO
1484
1485 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
192b9cd1 1486 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
67261566 1487
80305961 1488 break;
cc4c2da6 1489 }
6361f656
AB
1490 case '*': /* $* */
1491 case '#': /* $# */
9b387841
NC
1492 if (sv_type == SVt_PV)
1493 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1494 "$%c is no longer supported", *name);
8ae1fe26 1495 break;
6361f656 1496 case '|': /* $| */
c69033f2 1497 sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
cc4c2da6
NC
1498 goto magicalize;
1499
b3ca2e83
NC
1500 case '\010': /* $^H */
1501 {
1502 HV *const hv = GvHVn(gv);
1503 hv_magic(hv, NULL, PERL_MAGIC_hints);
1504 }
1505 goto magicalize;
cc4c2da6 1506 case '\023': /* $^S */
2fdbfb4d
AB
1507 ro_magicalize:
1508 SvREADONLY_on(GvSVn(gv));
1509 /* FALL THROUGH */
6361f656
AB
1510 case '0': /* $0 */
1511 case '1': /* $1 */
1512 case '2': /* $2 */
1513 case '3': /* $3 */
1514 case '4': /* $4 */
1515 case '5': /* $5 */
1516 case '6': /* $6 */
1517 case '7': /* $7 */
1518 case '8': /* $8 */
1519 case '9': /* $9 */
1520 case '[': /* $[ */
1521 case '^': /* $^ */
1522 case '~': /* $~ */
1523 case '=': /* $= */
1524 case '%': /* $% */
1525 case '.': /* $. */
1526 case '(': /* $( */
1527 case ')': /* $) */
1528 case '<': /* $< */
1529 case '>': /* $> */
1530 case '\\': /* $\ */
1531 case '/': /* $/ */
cc4c2da6
NC
1532 case '\001': /* $^A */
1533 case '\003': /* $^C */
1534 case '\004': /* $^D */
1535 case '\005': /* $^E */
1536 case '\006': /* $^F */
cc4c2da6
NC
1537 case '\011': /* $^I, NOT \t in EBCDIC */
1538 case '\016': /* $^N */
1539 case '\017': /* $^O */
1540 case '\020': /* $^P */
1541 case '\024': /* $^T */
1542 case '\027': /* $^W */
1543 magicalize:
ad64d0ec 1544 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
cc4c2da6 1545 break;
e521374c 1546
cc4c2da6 1547 case '\014': /* $^L */
76f68e9b 1548 sv_setpvs(GvSVn(gv),"\f");
c69033f2 1549 PL_formfeed = GvSVn(gv);
463ee0b2 1550 break;
6361f656 1551 case ';': /* $; */
76f68e9b 1552 sv_setpvs(GvSVn(gv),"\034");
463ee0b2 1553 break;
6361f656 1554 case ']': /* $] */
cc4c2da6 1555 {
c69033f2 1556 SV * const sv = GvSVn(gv);
d7aa5382 1557 if (!sv_derived_from(PL_patchlevel, "version"))
ac0e6a2f 1558 upg_version(PL_patchlevel, TRUE);
7d54d38e
SH
1559 GvSV(gv) = vnumify(PL_patchlevel);
1560 SvREADONLY_on(GvSV(gv));
1561 SvREFCNT_dec(sv);
93a17b20
LW
1562 }
1563 break;
cc4c2da6
NC
1564 case '\026': /* $^V */
1565 {
c69033f2 1566 SV * const sv = GvSVn(gv);
f9be5ac8
DM
1567 GvSV(gv) = new_version(PL_patchlevel);
1568 SvREADONLY_on(GvSV(gv));
1569 SvREFCNT_dec(sv);
16070b82
GS
1570 }
1571 break;
cc4c2da6 1572 }
79072805 1573 }
93a17b20 1574 return gv;
79072805
LW
1575}
1576
1577void
35a4481c 1578Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 1579{
35a4481c 1580 const char *name;
7423f6db 1581 STRLEN namelen;
35a4481c 1582 const HV * const hv = GvSTASH(gv);
7918f24d
NC
1583
1584 PERL_ARGS_ASSERT_GV_FULLNAME4;
1585
43693395 1586 if (!hv) {
0c34ef67 1587 SvOK_off(sv);
43693395
GS
1588 return;
1589 }
666ea192 1590 sv_setpv(sv, prefix ? prefix : "");
a0288114 1591
bfcb3514 1592 name = HvNAME_get(hv);
7423f6db
NC
1593 if (name) {
1594 namelen = HvNAMELEN_get(hv);
1595 } else {
e27ad1f2 1596 name = "__ANON__";
7423f6db
NC
1597 namelen = 8;
1598 }
a0288114 1599
e27ad1f2 1600 if (keepmain || strNE(name, "main")) {
7423f6db 1601 sv_catpvn(sv,name,namelen);
396482e1 1602 sv_catpvs(sv,"::");
43693395 1603 }
257984c0 1604 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
43693395
GS
1605}
1606
1607void
35a4481c 1608Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 1609{
099be4f1 1610 const GV * const egv = GvEGVx(gv);
7918f24d
NC
1611
1612 PERL_ARGS_ASSERT_GV_EFULLNAME4;
1613
46c461b5 1614 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
43693395
GS
1615}
1616
79072805 1617void
1146e912 1618Perl_gv_check(pTHX_ const HV *stash)
79072805 1619{
97aff369 1620 dVAR;
79072805 1621 register I32 i;
463ee0b2 1622
7918f24d
NC
1623 PERL_ARGS_ASSERT_GV_CHECK;
1624
8990e307
LW
1625 if (!HvARRAY(stash))
1626 return;
a0d0e21e 1627 for (i = 0; i <= (I32) HvMAX(stash); i++) {
e1ec3a88 1628 const HE *entry;
dc437b57 1629 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
b7787f18
AL
1630 register GV *gv;
1631 HV *hv;
dc437b57 1632 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
159b6efe 1633 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
a0d0e21e 1634 {
19b6c847 1635 if (hv != PL_defstash && hv != stash)
a0d0e21e
LW
1636 gv_check(hv); /* nested package */
1637 }
dc437b57 1638 else if (isALPHA(*HeKEY(entry))) {
e1ec3a88 1639 const char *file;
159b6efe 1640 gv = MUTABLE_GV(HeVAL(entry));
55d729e4 1641 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
463ee0b2 1642 continue;
1d7c1841 1643 file = GvFILE(gv);
1d7c1841
GS
1644 CopLINE_set(PL_curcop, GvLINE(gv));
1645#ifdef USE_ITHREADS
dd374669 1646 CopFILE(PL_curcop) = (char *)file; /* set for warning */
1d7c1841 1647#else
9bde8eb0
NC
1648 CopFILEGV(PL_curcop)
1649 = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
1d7c1841 1650#endif
9014280d 1651 Perl_warner(aTHX_ packWARN(WARN_ONCE),
599cee73 1652 "Name \"%s::%s\" used only once: possible typo",
bfcb3514 1653 HvNAME_get(stash), GvNAME(gv));
463ee0b2 1654 }
79072805
LW
1655 }
1656 }
1657}
1658
1659GV *
e1ec3a88 1660Perl_newGVgen(pTHX_ const char *pack)
79072805 1661{
97aff369 1662 dVAR;
7918f24d
NC
1663
1664 PERL_ARGS_ASSERT_NEWGVGEN;
1665
cea2e8a9 1666 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
6fd99bb3 1667 GV_ADD, SVt_PVGV);
79072805
LW
1668}
1669
1670/* hopefully this is only called on local symbol table entries */
1671
1672GP*
864dbfa3 1673Perl_gp_ref(pTHX_ GP *gp)
79072805 1674{
97aff369 1675 dVAR;
1d7c1841 1676 if (!gp)
d4c19fe8 1677 return NULL;
79072805 1678 gp->gp_refcnt++;
44a8e56a 1679 if (gp->gp_cv) {
1680 if (gp->gp_cvgen) {
e1a479c5
BB
1681 /* If the GP they asked for a reference to contains
1682 a method cache entry, clear it first, so that we
1683 don't infect them with our cached entry */
44a8e56a 1684 SvREFCNT_dec(gp->gp_cv);
601f1833 1685 gp->gp_cv = NULL;
44a8e56a 1686 gp->gp_cvgen = 0;
1687 }
44a8e56a 1688 }
79072805 1689 return gp;
79072805
LW
1690}
1691
1692void
864dbfa3 1693Perl_gp_free(pTHX_ GV *gv)
79072805 1694{
97aff369 1695 dVAR;
79072805
LW
1696 GP* gp;
1697
f7877b28 1698 if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
79072805 1699 return;
f248d071 1700 if (gp->gp_refcnt == 0) {
9b387841
NC
1701 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
1702 "Attempt to free unreferenced glob pointers"
1703 pTHX__FORMAT pTHX__VALUE);
79072805
LW
1704 return;
1705 }
748a9306
LW
1706 if (--gp->gp_refcnt > 0) {
1707 if (gp->gp_egv == gv)
1708 gp->gp_egv = 0;
c43ae56f 1709 GvGP_set(gv, NULL);
79072805 1710 return;
748a9306 1711 }
79072805 1712
c9ce39a9
RGS
1713 if (gp->gp_file_hek)
1714 unshare_hek(gp->gp_file_hek);
c9da69fb
AL
1715 SvREFCNT_dec(gp->gp_sv);
1716 SvREFCNT_dec(gp->gp_av);
bfcb3514
NC
1717 /* FIXME - another reference loop GV -> symtab -> GV ?
1718 Somehow gp->gp_hv can end up pointing at freed garbage. */
1719 if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
bfcb3514
NC
1720 const char *hvname = HvNAME_get(gp->gp_hv);
1721 if (PL_stashcache && hvname)
04fe65b0 1722 (void)hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
7423f6db 1723 G_DISCARD);
bfcb3514 1724 SvREFCNT_dec(gp->gp_hv);
13207a71 1725 }
c9da69fb
AL
1726 SvREFCNT_dec(gp->gp_io);
1727 SvREFCNT_dec(gp->gp_cv);
1728 SvREFCNT_dec(gp->gp_form);
748a9306 1729
79072805 1730 Safefree(gp);
c43ae56f 1731 GvGP_set(gv, NULL);
79072805
LW
1732}
1733
d460ef45
NIS
1734int
1735Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1736{
53c1dcc0
AL
1737 AMT * const amtp = (AMT*)mg->mg_ptr;
1738 PERL_UNUSED_ARG(sv);
dd374669 1739
7918f24d
NC
1740 PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
1741
d460ef45
NIS
1742 if (amtp && AMT_AMAGIC(amtp)) {
1743 int i;
1744 for (i = 1; i < NofAMmeth; i++) {
53c1dcc0 1745 CV * const cv = amtp->table[i];
b37c2d43 1746 if (cv) {
ad64d0ec 1747 SvREFCNT_dec(MUTABLE_SV(cv));
601f1833 1748 amtp->table[i] = NULL;
d460ef45
NIS
1749 }
1750 }
1751 }
1752 return 0;
1753}
1754
a0d0e21e 1755/* Updates and caches the CV's */
c3a9a790
RGS
1756/* Returns:
1757 * 1 on success and there is some overload
1758 * 0 if there is no overload
1759 * -1 if some error occurred and it couldn't croak
1760 */
a0d0e21e 1761
c3a9a790 1762int
242f8760 1763Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
a0d0e21e 1764{
97aff369 1765 dVAR;
ad64d0ec 1766 MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
a6006777 1767 AMT amt;
9b439311 1768 const struct mro_meta* stash_meta = HvMROMETA(stash);
e1a479c5 1769 U32 newgen;
a0d0e21e 1770
7918f24d
NC
1771 PERL_ARGS_ASSERT_GV_AMUPDATE;
1772
9b439311 1773 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
14899595
NC
1774 if (mg) {
1775 const AMT * const amtp = (AMT*)mg->mg_ptr;
1776 if (amtp->was_ok_am == PL_amagic_generation
e1a479c5 1777 && amtp->was_ok_sub == newgen) {
c3a9a790 1778 return AMT_OVERLOADED(amtp) ? 1 : 0;
14899595 1779 }
ad64d0ec 1780 sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
14899595 1781 }
a0d0e21e 1782
bfcb3514 1783 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
a0d0e21e 1784
d460ef45 1785 Zero(&amt,1,AMT);
3280af22 1786 amt.was_ok_am = PL_amagic_generation;
e1a479c5 1787 amt.was_ok_sub = newgen;
a6006777 1788 amt.fallback = AMGfallNO;
1789 amt.flags = 0;
1790
a6006777 1791 {
32251b26
IZ
1792 int filled = 0, have_ovl = 0;
1793 int i, lim = 1;
a6006777 1794
22c35a8c 1795 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
a6006777 1796
89ffc314 1797 /* Try to find via inheritance. */
53c1dcc0
AL
1798 GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1799 SV * const sv = gv ? GvSV(gv) : NULL;
1800 CV* cv;
89ffc314
IZ
1801
1802 if (!gv)
32251b26 1803 lim = DESTROY_amg; /* Skip overloading entries. */
c69033f2
NC
1804#ifdef PERL_DONT_CREATE_GVSV
1805 else if (!sv) {
6f207bd3 1806 NOOP; /* Equivalent to !SvTRUE and !SvOK */
c69033f2
NC
1807 }
1808#endif
89ffc314
IZ
1809 else if (SvTRUE(sv))
1810 amt.fallback=AMGfallYES;
1811 else if (SvOK(sv))
1812 amt.fallback=AMGfallNEVER;
a6006777 1813
32251b26 1814 for (i = 1; i < lim; i++)
601f1833 1815 amt.table[i] = NULL;
32251b26 1816 for (; i < NofAMmeth; i++) {
6136c704 1817 const char * const cooky = PL_AMG_names[i];
32251b26 1818 /* Human-readable form, for debugging: */
6136c704 1819 const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
d279ab82 1820 const STRLEN l = PL_AMG_namelens[i];
89ffc314 1821
a0288114 1822 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
bfcb3514 1823 cp, HvNAME_get(stash)) );
611c1e95
IZ
1824 /* don't fill the cache while looking up!
1825 Creation of inheritance stubs in intermediate packages may
1826 conflict with the logic of runtime method substitution.
1827 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1828 then we could have created stubs for "(+0" in A and C too.
1829 But if B overloads "bool", we may want to use it for
1830 numifying instead of C's "+0". */
1831 if (i >= DESTROY_amg)
1832 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1833 else /* Autoload taken care of below */
1834 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
46fc3d4c 1835 cv = 0;
89ffc314 1836 if (gv && (cv = GvCV(gv))) {
bfcb3514 1837 const char *hvname;
44a8e56a 1838 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
bfcb3514 1839 && strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
611c1e95
IZ
1840 /* This is a hack to support autoloading..., while
1841 knowing *which* methods were declared as overloaded. */
44a8e56a 1842 /* GvSV contains the name of the method. */
6136c704 1843 GV *ngv = NULL;
c69033f2 1844 SV *gvsv = GvSV(gv);
a0288114
AL
1845
1846 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1847 "\" for overloaded \"%s\" in package \"%.256s\"\n",
ca0270c4 1848 (void*)GvSV(gv), cp, hvname) );
c69033f2
NC
1849 if (!gvsv || !SvPOK(gvsv)
1850 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
dc848c6f 1851 FALSE)))
1852 {
a0288114 1853 /* Can be an import stub (created by "can"). */
242f8760 1854 if (destructing) {
c3a9a790 1855 return -1;
242f8760
RGS
1856 }
1857 else {
1858 const char * const name = (gvsv && SvPOK(gvsv)) ? SvPVX_const(gvsv) : "???";
1859 Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1860 "in package \"%.256s\"",
1861 (GvCVGEN(gv) ? "Stub found while resolving"
1862 : "Can't resolve"),
1863 name, cp, hvname);
1864 }
44a8e56a 1865 }
dc848c6f 1866 cv = GvCV(gv = ngv);
44a8e56a 1867 }
b464bac0 1868 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
bfcb3514 1869 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
44a8e56a 1870 GvNAME(CvGV(cv))) );
1871 filled = 1;
32251b26
IZ
1872 if (i < DESTROY_amg)
1873 have_ovl = 1;
611c1e95 1874 } else if (gv) { /* Autoloaded... */
ea726b52 1875 cv = MUTABLE_CV(gv);
611c1e95 1876 filled = 1;
44a8e56a 1877 }
ea726b52 1878 amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
a0d0e21e 1879 }
a0d0e21e 1880 if (filled) {
a6006777 1881 AMT_AMAGIC_on(&amt);
32251b26
IZ
1882 if (have_ovl)
1883 AMT_OVERLOADED_on(&amt);
ad64d0ec 1884 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
14befaf4 1885 (char*)&amt, sizeof(AMT));
32251b26 1886 return have_ovl;
a0d0e21e
LW
1887 }
1888 }
a6006777 1889 /* Here we have no table: */
9cbac4c7 1890 /* no_table: */
a6006777 1891 AMT_AMAGIC_off(&amt);
ad64d0ec 1892 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
14befaf4 1893 (char*)&amt, sizeof(AMTS));
c3a9a790 1894 return 0;
a0d0e21e
LW
1895}
1896
32251b26
IZ
1897
1898CV*
1899Perl_gv_handler(pTHX_ HV *stash, I32 id)
1900{
97aff369 1901 dVAR;
3f8f4626 1902 MAGIC *mg;
32251b26 1903 AMT *amtp;
e1a479c5 1904 U32 newgen;
9b439311 1905 struct mro_meta* stash_meta;
32251b26 1906
bfcb3514 1907 if (!stash || !HvNAME_get(stash))
601f1833 1908 return NULL;
e1a479c5 1909
9b439311
BB
1910 stash_meta = HvMROMETA(stash);
1911 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
e1a479c5 1912
ad64d0ec 1913 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
32251b26
IZ
1914 if (!mg) {
1915 do_update:
242f8760
RGS
1916 /* If we're looking up a destructor to invoke, we must avoid
1917 * that Gv_AMupdate croaks, because we might be dying already */
2dcac756 1918 if (Gv_AMupdate(stash, cBOOL(id == DESTROY_amg)) == -1) {
242f8760
RGS
1919 /* and if it didn't found a destructor, we fall back
1920 * to a simpler method that will only look for the
1921 * destructor instead of the whole magic */
1922 if (id == DESTROY_amg) {
1923 GV * const gv = gv_fetchmethod(stash, "DESTROY");
1924 if (gv)
1925 return GvCV(gv);
1926 }
1927 return NULL;
1928 }
ad64d0ec 1929 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
32251b26 1930 }
a9fd4e40 1931 assert(mg);
32251b26
IZ
1932 amtp = (AMT*)mg->mg_ptr;
1933 if ( amtp->was_ok_am != PL_amagic_generation
e1a479c5 1934 || amtp->was_ok_sub != newgen )
32251b26 1935 goto do_update;
3ad83ce7 1936 if (AMT_AMAGIC(amtp)) {
b7787f18 1937 CV * const ret = amtp->table[id];
3ad83ce7
AMS
1938 if (ret && isGV(ret)) { /* Autoloading stab */
1939 /* Passing it through may have resulted in a warning
1940 "Inherited AUTOLOAD for a non-method deprecated", since
1941 our caller is going through a function call, not a method call.
1942 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
890ce7af 1943 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
3ad83ce7
AMS
1944
1945 if (gv && GvCV(gv))
1946 return GvCV(gv);
1947 }
1948 return ret;
1949 }
a0288114 1950
601f1833 1951 return NULL;
32251b26
IZ
1952}
1953
1954
6f1401dc
DM
1955/* Implement tryAMAGICun_MG macro.
1956 Do get magic, then see if the stack arg is overloaded and if so call it.
1957 Flags:
1958 AMGf_set return the arg using SETs rather than assigning to
1959 the targ
1960 AMGf_numeric apply sv_2num to the stack arg.
1961*/
1962
1963bool
1964Perl_try_amagic_un(pTHX_ int method, int flags) {
1965 dVAR;
1966 dSP;
1967 SV* tmpsv;
1968 SV* const arg = TOPs;
1969
1970 SvGETMAGIC(arg);
1971
9f8bf298
NC
1972 if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
1973 AMGf_noright | AMGf_unary))) {
6f1401dc
DM
1974 if (flags & AMGf_set) {
1975 SETs(tmpsv);
1976 }
1977 else {
1978 dTARGET;
1979 if (SvPADMY(TARG)) {
1980 sv_setsv(TARG, tmpsv);
1981 SETTARG;
1982 }
1983 else
1984 SETs(tmpsv);
1985 }
1986 PUTBACK;
1987 return TRUE;
1988 }
1989
1990 if ((flags & AMGf_numeric) && SvROK(arg))
1991 *sp = sv_2num(arg);
1992 return FALSE;
1993}
1994
1995
1996/* Implement tryAMAGICbin_MG macro.
1997 Do get magic, then see if the two stack args are overloaded and if so
1998 call it.
1999 Flags:
2000 AMGf_set return the arg using SETs rather than assigning to
2001 the targ
2002 AMGf_assign op may be called as mutator (eg +=)
2003 AMGf_numeric apply sv_2num to the stack arg.
2004*/
2005
2006bool
2007Perl_try_amagic_bin(pTHX_ int method, int flags) {
2008 dVAR;
2009 dSP;
2010 SV* const left = TOPm1s;
2011 SV* const right = TOPs;
2012
2013 SvGETMAGIC(left);
2014 if (left != right)
2015 SvGETMAGIC(right);
2016
2017 if (SvAMAGIC(left) || SvAMAGIC(right)) {
2018 SV * const tmpsv = amagic_call(left, right, method,
2019 ((flags & AMGf_assign) && opASSIGN ? AMGf_assign: 0));
2020 if (tmpsv) {
2021 if (flags & AMGf_set) {
2022 (void)POPs;
2023 SETs(tmpsv);
2024 }
2025 else {
2026 dATARGET;
2027 (void)POPs;
2028 if (opASSIGN || SvPADMY(TARG)) {
2029 sv_setsv(TARG, tmpsv);
2030 SETTARG;
2031 }
2032 else
2033 SETs(tmpsv);
2034 }
2035 PUTBACK;
2036 return TRUE;
2037 }
2038 }
2039 if (flags & AMGf_numeric) {
2040 if (SvROK(left))
2041 *(sp-1) = sv_2num(left);
2042 if (SvROK(right))
2043 *sp = sv_2num(right);
2044 }
2045 return FALSE;
2046}
2047
25a9ffce
NC
2048SV *
2049Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
2050 SV *tmpsv = NULL;
2051
2052 PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
2053
2054 while (SvAMAGIC(ref) &&
2055 (tmpsv = amagic_call(ref, &PL_sv_undef, method,
2056 AMGf_noright | AMGf_unary))) {
2057 if (!SvROK(tmpsv))
2058 Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
2059 if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
2060 /* Bail out if it returns us the same reference. */
2061 return tmpsv;
2062 }
2063 ref = tmpsv;
2064 }
2065 return tmpsv ? tmpsv : ref;
2066}
6f1401dc 2067
a0d0e21e 2068SV*
864dbfa3 2069Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
a0d0e21e 2070{
27da23d5 2071 dVAR;
b267980d 2072 MAGIC *mg;
9c5ffd7c 2073 CV *cv=NULL;
a0d0e21e 2074 CV **cvp=NULL, **ocvp=NULL;
9c5ffd7c 2075 AMT *amtp=NULL, *oamtp=NULL;
b464bac0
AL
2076 int off = 0, off1, lr = 0, notfound = 0;
2077 int postpr = 0, force_cpy = 0;
2078 int assign = AMGf_assign & flags;
2079 const int assignshift = assign ? 1 : 0;
bf5522a1 2080 int use_default_op = 0;
497b47a8
JH
2081#ifdef DEBUGGING
2082 int fl=0;
497b47a8 2083#endif
25716404 2084 HV* stash=NULL;
7918f24d
NC
2085
2086 PERL_ARGS_ASSERT_AMAGIC_CALL;
2087
e46c382e 2088 if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
20439bc7 2089 SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
e46c382e
YK
2090
2091 if ( !lex_mask || !SvOK(lex_mask) )
2092 /* overloading lexically disabled */
2093 return NULL;
2094 else if ( lex_mask && SvPOK(lex_mask) ) {
2095 /* we have an entry in the hints hash, check if method has been
2096 * masked by overloading.pm */
d15cd831 2097 STRLEN len;
e46c382e 2098 const int offset = method / 8;
d87d3eed 2099 const int bit = method % 8;
e46c382e
YK
2100 char *pv = SvPV(lex_mask, len);
2101
d15cd831 2102 /* Bit set, so this overloading operator is disabled */
ed15e576 2103 if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
e46c382e
YK
2104 return NULL;
2105 }
2106 }
2107
a0d0e21e 2108 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
25716404 2109 && (stash = SvSTASH(SvRV(left)))
ad64d0ec 2110 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
b267980d 2111 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 2112 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
d4c19fe8 2113 : NULL))
b267980d 2114 && ((cv = cvp[off=method+assignshift])
748a9306
LW
2115 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2116 * usual method */
497b47a8
JH
2117 (
2118#ifdef DEBUGGING
2119 fl = 1,
a0288114 2120#endif
497b47a8 2121 cv = cvp[off=method])))) {
a0d0e21e
LW
2122 lr = -1; /* Call method for left argument */
2123 } else {
2124 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
2125 int logic;
2126
2127 /* look for substituted methods */
ee239bfe 2128 /* In all the covered cases we should be called with assign==0. */
a0d0e21e
LW
2129 switch (method) {
2130 case inc_amg:
ee239bfe
IZ
2131 force_cpy = 1;
2132 if ((cv = cvp[off=add_ass_amg])
2133 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
3280af22 2134 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e
LW
2135 }
2136 break;
2137 case dec_amg:
ee239bfe
IZ
2138 force_cpy = 1;
2139 if ((cv = cvp[off = subtr_ass_amg])
2140 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
3280af22 2141 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e
LW
2142 }
2143 break;
2144 case bool__amg:
2145 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
2146 break;
2147 case numer_amg:
2148 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
2149 break;
2150 case string_amg:
2151 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
2152 break;
b7787f18
AL
2153 case not_amg:
2154 (void)((cv = cvp[off=bool__amg])
2155 || (cv = cvp[off=numer_amg])
2156 || (cv = cvp[off=string_amg]));
2ab54efd
MB
2157 if (cv)
2158 postpr = 1;
b7787f18 2159 break;
748a9306
LW
2160 case copy_amg:
2161 {
76e3520e
GS
2162 /*
2163 * SV* ref causes confusion with the interpreter variable of
2164 * the same name
2165 */
890ce7af 2166 SV* const tmpRef=SvRV(left);
76e3520e 2167 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
fc36a67e 2168 /*
2169 * Just to be extra cautious. Maybe in some
2170 * additional cases sv_setsv is safe, too.
2171 */
890ce7af 2172 SV* const newref = newSVsv(tmpRef);
748a9306 2173 SvOBJECT_on(newref);
96d4b0ee
NC
2174 /* As a bit of a source compatibility hack, SvAMAGIC() and
2175 friends dereference an RV, to behave the same was as when
2176 overloading was stored on the reference, not the referant.
2177 Hence we can't use SvAMAGIC_on()
2178 */
2179 SvFLAGS(newref) |= SVf_AMAGIC;
85fbaab2 2180 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
748a9306
LW
2181 return newref;
2182 }
2183 }
2184 break;
a0d0e21e 2185 case abs_amg:
b267980d 2186 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
a0d0e21e 2187 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
890ce7af 2188 SV* const nullsv=sv_2mortal(newSViv(0));
a0d0e21e 2189 if (off1==lt_amg) {
890ce7af 2190 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e
LW
2191 lt_amg,AMGf_noright);
2192 logic = SvTRUE(lessp);
2193 } else {
890ce7af 2194 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e
LW
2195 ncmp_amg,AMGf_noright);
2196 logic = (SvNV(lessp) < 0);
2197 }
2198 if (logic) {
2199 if (off==subtr_amg) {
2200 right = left;
748a9306 2201 left = nullsv;
a0d0e21e
LW
2202 lr = 1;
2203 }
2204 } else {
2205 return left;
2206 }
2207 }
2208 break;
2209 case neg_amg:
155aba94 2210 if ((cv = cvp[off=subtr_amg])) {
a0d0e21e
LW
2211 right = left;
2212 left = sv_2mortal(newSViv(0));
2213 lr = 1;
2214 }
2215 break;
f216259d 2216 case int_amg:
f5284f61 2217 case iter_amg: /* XXXX Eventually should do to_gv. */
c4c7412c 2218 case ftest_amg: /* XXXX Eventually should do to_gv. */
d4b87e75 2219 case regexp_amg:
b267980d
NIS
2220 /* FAIL safe */
2221 return NULL; /* Delegate operation to standard mechanisms. */
2222 break;
f5284f61
IZ
2223 case to_sv_amg:
2224 case to_av_amg:
2225 case to_hv_amg:
2226 case to_gv_amg:
2227 case to_cv_amg:
2228 /* FAIL safe */
b267980d 2229 return left; /* Delegate operation to standard mechanisms. */
f5284f61 2230 break;
a0d0e21e
LW
2231 default:
2232 goto not_found;
2233 }
2234 if (!cv) goto not_found;
2235 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
25716404 2236 && (stash = SvSTASH(SvRV(right)))
ad64d0ec 2237 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
b267980d 2238 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 2239 ? (amtp = (AMT*)mg->mg_ptr)->table
d4c19fe8 2240 : NULL))
a0d0e21e
LW
2241 && (cv = cvp[off=method])) { /* Method for right
2242 * argument found */
2243 lr=1;
bf5522a1
MB
2244 } else if (((cvp && amtp->fallback > AMGfallNEVER)
2245 || (ocvp && oamtp->fallback > AMGfallNEVER))
a0d0e21e
LW
2246 && !(flags & AMGf_unary)) {
2247 /* We look for substitution for
2248 * comparison operations and
fc36a67e 2249 * concatenation */
a0d0e21e
LW
2250 if (method==concat_amg || method==concat_ass_amg
2251 || method==repeat_amg || method==repeat_ass_amg) {
2252 return NULL; /* Delegate operation to string conversion */
2253 }
2254 off = -1;
2255 switch (method) {
2256 case lt_amg:
2257 case le_amg:
2258 case gt_amg:
2259 case ge_amg:
2260 case eq_amg:
2261 case ne_amg:
2ab54efd
MB
2262 off = ncmp_amg;
2263 break;
a0d0e21e
LW
2264 case slt_amg:
2265 case sle_amg:
2266 case sgt_amg:
2267 case sge_amg:
2268 case seq_amg:
2269 case sne_amg:
2ab54efd
MB
2270 off = scmp_amg;
2271 break;
a0d0e21e 2272 }
bf5522a1
MB
2273 if (off != -1) {
2274 if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
2275 cv = ocvp[off];
2276 lr = -1;
2277 }
2278 if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
2279 cv = cvp[off];
2280 lr = 1;
2281 }
2282 }
2283 if (cv)
2ab54efd
MB
2284 postpr = 1;
2285 else
2286 goto not_found;
a0d0e21e 2287 } else {
a6006777 2288 not_found: /* No method found, either report or croak */
b267980d
NIS
2289 switch (method) {
2290 case to_sv_amg:
2291 case to_av_amg:
2292 case to_hv_amg:
2293 case to_gv_amg:
2294 case to_cv_amg:
2295 /* FAIL safe */
2296 return left; /* Delegate operation to standard mechanisms. */
2297 break;
2298 }
a0d0e21e
LW
2299 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
2300 notfound = 1; lr = -1;
2301 } else if (cvp && (cv=cvp[nomethod_amg])) {
2302 notfound = 1; lr = 1;
bf5522a1
MB
2303 } else if ((use_default_op =
2304 (!ocvp || oamtp->fallback >= AMGfallYES)
2305 && (!cvp || amtp->fallback >= AMGfallYES))
2306 && !DEBUG_o_TEST) {
4cc0ca18
NC
2307 /* Skip generating the "no method found" message. */
2308 return NULL;
a0d0e21e 2309 } else {
46fc3d4c 2310 SV *msg;
774d564b 2311 if (off==-1) off=method;
b267980d 2312 msg = sv_2mortal(Perl_newSVpvf(aTHX_
a0288114 2313 "Operation \"%s\": no method found,%sargument %s%s%s%s",
89ffc314 2314 AMG_id2name(method + assignshift),
e7ea3e70 2315 (flags & AMGf_unary ? " " : "\n\tleft "),
b267980d 2316 SvAMAGIC(left)?
a0d0e21e
LW
2317 "in overloaded package ":
2318 "has no overloaded magic",
b267980d 2319 SvAMAGIC(left)?
bfcb3514 2320 HvNAME_get(SvSTASH(SvRV(left))):
a0d0e21e 2321 "",
b267980d 2322 SvAMAGIC(right)?
e7ea3e70 2323 ",\n\tright argument in overloaded package ":
b267980d 2324 (flags & AMGf_unary
e7ea3e70
IZ
2325 ? ""
2326 : ",\n\tright argument has no overloaded magic"),
b267980d 2327 SvAMAGIC(right)?
bfcb3514 2328 HvNAME_get(SvSTASH(SvRV(right))):
46fc3d4c 2329 ""));
bf5522a1 2330 if (use_default_op) {
b15aece3 2331 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
a0d0e21e 2332 } else {
be2597df 2333 Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
a0d0e21e
LW
2334 }
2335 return NULL;
2336 }
ee239bfe 2337 force_cpy = force_cpy || assign;
a0d0e21e
LW
2338 }
2339 }
497b47a8 2340#ifdef DEBUGGING
a0d0e21e 2341 if (!notfound) {
497b47a8 2342 DEBUG_o(Perl_deb(aTHX_
a0288114 2343 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
497b47a8
JH
2344 AMG_id2name(off),
2345 method+assignshift==off? "" :
a0288114 2346 " (initially \"",
497b47a8
JH
2347 method+assignshift==off? "" :
2348 AMG_id2name(method+assignshift),
a0288114 2349 method+assignshift==off? "" : "\")",
497b47a8
JH
2350 flags & AMGf_unary? "" :
2351 lr==1 ? " for right argument": " for left argument",
2352 flags & AMGf_unary? " for argument" : "",
bfcb3514 2353 stash ? HvNAME_get(stash) : "null",
497b47a8 2354 fl? ",\n\tassignment variant used": "") );
ee239bfe 2355 }
497b47a8 2356#endif
748a9306
LW
2357 /* Since we use shallow copy during assignment, we need
2358 * to dublicate the contents, probably calling user-supplied
2359 * version of copy operator
2360 */
ee239bfe
IZ
2361 /* We need to copy in following cases:
2362 * a) Assignment form was called.
2363 * assignshift==1, assign==T, method + 1 == off
2364 * b) Increment or decrement, called directly.
2365 * assignshift==0, assign==0, method + 0 == off
2366 * c) Increment or decrement, translated to assignment add/subtr.
b267980d 2367 * assignshift==0, assign==T,
ee239bfe
IZ
2368 * force_cpy == T
2369 * d) Increment or decrement, translated to nomethod.
b267980d 2370 * assignshift==0, assign==0,
ee239bfe
IZ
2371 * force_cpy == T
2372 * e) Assignment form translated to nomethod.
2373 * assignshift==1, assign==T, method + 1 != off
2374 * force_cpy == T
2375 */
2376 /* off is method, method+assignshift, or a result of opcode substitution.
2377 * In the latter case assignshift==0, so only notfound case is important.
2378 */
2379 if (( (method + assignshift == off)
2380 && (assign || (method == inc_amg) || (method == dec_amg)))
2381 || force_cpy)
6f1401dc 2382 {
1b38c28e
NC
2383 /* newSVsv does not behave as advertised, so we copy missing
2384 * information by hand */
2385 SV *tmpRef = SvRV(left);
2386 SV *rv_copy;
31d632c3 2387 if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
1b38c28e
NC
2388 SvRV_set(left, rv_copy);
2389 SvSETMAGIC(left);
2390 SvREFCNT_dec(tmpRef);
2391 }
6f1401dc
DM
2392 }
2393
a0d0e21e
LW
2394 {
2395 dSP;
2396 BINOP myop;
2397 SV* res;
b7787f18 2398 const bool oldcatch = CATCH_GET;
a0d0e21e 2399
54310121 2400 CATCH_SET(TRUE);
a0d0e21e
LW
2401 Zero(&myop, 1, BINOP);
2402 myop.op_last = (OP *) &myop;
b37c2d43 2403 myop.op_next = NULL;
54310121 2404 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
a0d0e21e 2405
e788e7d3 2406 PUSHSTACKi(PERLSI_OVERLOAD);
a0d0e21e 2407 ENTER;
462e5cf6 2408 SAVEOP();
533c011a 2409 PL_op = (OP *) &myop;
3280af22 2410 if (PERLDB_SUB && PL_curstash != PL_debstash)
533c011a 2411 PL_op->op_private |= OPpENTERSUB_DB;
a0d0e21e 2412 PUTBACK;
897d3989 2413 Perl_pp_pushmark(aTHX);
a0d0e21e 2414
924508f0 2415 EXTEND(SP, notfound + 5);
a0d0e21e
LW
2416 PUSHs(lr>0? right: left);
2417 PUSHs(lr>0? left: right);
3280af22 2418 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
a0d0e21e 2419 if (notfound) {
59cd0e26
NC
2420 PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
2421 AMG_id2namelen(method + assignshift), SVs_TEMP));
a0d0e21e 2422 }
ad64d0ec 2423 PUSHs(MUTABLE_SV(cv));
a0d0e21e
LW
2424 PUTBACK;
2425
139d0ce6 2426 if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
cea2e8a9 2427 CALLRUNOPS(aTHX);
a0d0e21e
LW
2428 LEAVE;
2429 SPAGAIN;
2430
2431 res=POPs;
ebafeae7 2432 PUTBACK;
d3acc0f7 2433 POPSTACK;
54310121 2434 CATCH_SET(oldcatch);
a0d0e21e 2435
a0d0e21e 2436 if (postpr) {
b7787f18 2437 int ans;
a0d0e21e
LW
2438 switch (method) {
2439 case le_amg:
2440 case sle_amg:
2441 ans=SvIV(res)<=0; break;
2442 case lt_amg:
2443 case slt_amg:
2444 ans=SvIV(res)<0; break;
2445 case ge_amg:
2446 case sge_amg:
2447 ans=SvIV(res)>=0; break;
2448 case gt_amg:
2449 case sgt_amg:
2450 ans=SvIV(res)>0; break;
2451 case eq_amg:
2452 case seq_amg:
2453 ans=SvIV(res)==0; break;
2454 case ne_amg:
2455 case sne_amg:
2456 ans=SvIV(res)!=0; break;
2457 case inc_amg:
2458 case dec_amg:
bbce6d69 2459 SvSetSV(left,res); return left;
dc437b57 2460 case not_amg:
fe7ac86a 2461 ans=!SvTRUE(res); break;
b7787f18
AL
2462 default:
2463 ans=0; break;
a0d0e21e 2464 }
54310121 2465 return boolSV(ans);
748a9306
LW
2466 } else if (method==copy_amg) {
2467 if (!SvROK(res)) {
cea2e8a9 2468 Perl_croak(aTHX_ "Copy method did not return a reference");
748a9306
LW
2469 }
2470 return SvREFCNT_inc(SvRV(res));
a0d0e21e
LW
2471 } else {
2472 return res;
2473 }
2474 }
2475}
c9d5ac95
GS
2476
2477/*
7fc63493 2478=for apidoc is_gv_magical_sv
c9d5ac95
GS
2479
2480Returns C<TRUE> if given the name of a magical GV.
2481
2482Currently only useful internally when determining if a GV should be
2483created even in rvalue contexts.
2484
2485C<flags> is not used at present but available for future extension to
2486allow selecting particular classes of magical variable.
2487
b9b0e72c
NC
2488Currently assumes that C<name> is NUL terminated (as well as len being valid).
2489This assumption is met by all callers within the perl core, which all pass
2490pointers returned by SvPV.
2491
c9d5ac95
GS
2492=cut
2493*/
9d8f40c4 2494
c9d5ac95 2495bool
9d8f40c4 2496Perl_is_gv_magical_sv(pTHX_ SV *const name_sv, U32 flags)
c9d5ac95 2497{
9d8f40c4
NC
2498 STRLEN len;
2499 const char *const name = SvPV_const(name_sv, len);
9d4ba2ae 2500
9d8f40c4
NC
2501 PERL_UNUSED_ARG(flags);
2502 PERL_ARGS_ASSERT_IS_GV_MAGICAL_SV;
7918f24d 2503
b9b0e72c 2504 if (len > 1) {
b464bac0 2505 const char * const name1 = name + 1;
b9b0e72c
NC
2506 switch (*name) {
2507 case 'I':
f2df7081 2508 if (len == 3 && name[1] == 'S' && name[2] == 'A')
b9b0e72c
NC
2509 goto yes;
2510 break;
2511 case 'O':
9431620d 2512 if (len == 8 && strEQ(name1, "VERLOAD"))
b9b0e72c
NC
2513 goto yes;
2514 break;
2515 case 'S':
9431620d 2516 if (len == 3 && name[1] == 'I' && name[2] == 'G')
b9b0e72c
NC
2517 goto yes;
2518 break;
2519 /* Using ${^...} variables is likely to be sufficiently rare that
2520 it seems sensible to avoid the space hit of also checking the
2521 length. */
2522 case '\017': /* ${^OPEN} */
9431620d 2523 if (strEQ(name1, "PEN"))
b9b0e72c
NC
2524 goto yes;
2525 break;
2526 case '\024': /* ${^TAINT} */
9431620d 2527 if (strEQ(name1, "AINT"))
b9b0e72c
NC
2528 goto yes;
2529 break;
2530 case '\025': /* ${^UNICODE} */
9431620d 2531 if (strEQ(name1, "NICODE"))
b9b0e72c 2532 goto yes;
a0288114 2533 if (strEQ(name1, "TF8LOCALE"))
7cebcbc0 2534 goto yes;
b9b0e72c
NC
2535 break;
2536 case '\027': /* ${^WARNING_BITS} */
9431620d 2537 if (strEQ(name1, "ARNING_BITS"))
b9b0e72c
NC
2538 goto yes;
2539 break;
2540 case '1':
2541 case '2':
2542 case '3':
2543 case '4':
2544 case '5':
2545 case '6':
2546 case '7':
2547 case '8':
2548 case '9':
c9d5ac95 2549 {
7fc63493 2550 const char *end = name + len;
c9d5ac95
GS
2551 while (--end > name) {
2552 if (!isDIGIT(*end))
2553 return FALSE;
2554 }
b9b0e72c
NC
2555 goto yes;
2556 }
2557 }
2558 } else {
2559 /* Because we're already assuming that name is NUL terminated
2560 below, we can treat an empty name as "\0" */
2561 switch (*name) {
2562 case '&':
2563 case '`':
2564 case '\'':
2565 case ':':
2566 case '?':
2567 case '!':
2568 case '-':
2569 case '#':
2570 case '[':
2571 case '^':
2572 case '~':
2573 case '=':
2574 case '%':
2575 case '.':
2576 case '(':
2577 case ')':
2578 case '<':
2579 case '>':
b9b0e72c
NC
2580 case '\\':
2581 case '/':
2582 case '|':
2583 case '+':
2584 case ';':
2585 case ']':
2586 case '\001': /* $^A */
2587 case '\003': /* $^C */
2588 case '\004': /* $^D */
2589 case '\005': /* $^E */
2590 case '\006': /* $^F */
2591 case '\010': /* $^H */
2592 case '\011': /* $^I, NOT \t in EBCDIC */
2593 case '\014': /* $^L */
2594 case '\016': /* $^N */
2595 case '\017': /* $^O */
2596 case '\020': /* $^P */
2597 case '\023': /* $^S */
2598 case '\024': /* $^T */
2599 case '\026': /* $^V */
2600 case '\027': /* $^W */
2601 case '1':
2602 case '2':
2603 case '3':
2604 case '4':
2605 case '5':
2606 case '6':
2607 case '7':
2608 case '8':
2609 case '9':
2610 yes:
2611 return TRUE;
2612 default:
2613 break;
c9d5ac95 2614 }
c9d5ac95
GS
2615 }
2616 return FALSE;
2617}
66610fdd 2618
f5c1e807
NC
2619void
2620Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
2621{
2622 dVAR;
acda4c6a 2623 U32 hash;
f5c1e807 2624
7918f24d 2625 PERL_ARGS_ASSERT_GV_NAME_SET;
f5c1e807
NC
2626 PERL_UNUSED_ARG(flags);
2627
acda4c6a
NC
2628 if (len > I32_MAX)
2629 Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
2630
ae8cc45f
NC
2631 if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
2632 unshare_hek(GvNAME_HEK(gv));
2633 }
2634
acda4c6a 2635 PERL_HASH(hash, name, len);
9f616d01 2636 GvNAME_HEK(gv) = share_hek(name, len, hash);
f5c1e807
NC
2637}
2638
66610fdd 2639/*
f7461760
Z
2640=for apidoc gv_try_downgrade
2641
2867cdbc
Z
2642If the typeglob C<gv> can be expressed more succinctly, by having
2643something other than a real GV in its place in the stash, replace it
2644with the optimised form. Basic requirements for this are that C<gv>
2645is a real typeglob, is sufficiently ordinary, and is only referenced
2646from its package. This function is meant to be used when a GV has been
2647looked up in part to see what was there, causing upgrading, but based
2648on what was found it turns out that the real GV isn't required after all.
2649
2650If C<gv> is a completely empty typeglob, it is deleted from the stash.
2651
2652If C<gv> is a typeglob containing only a sufficiently-ordinary constant
2653sub, the typeglob is replaced with a scalar-reference placeholder that
2654more compactly represents the same thing.
f7461760
Z
2655
2656=cut
2657*/
2658
2659void
2660Perl_gv_try_downgrade(pTHX_ GV *gv)
2661{
2662 HV *stash;
2663 CV *cv;
2664 HEK *namehek;
2665 SV **gvp;
2666 PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
95f56751
FC
2667
2668 /* XXX Why and where does this leave dangling pointers during global
2669 destruction? */
627364f1 2670 if (PL_phase == PERL_PHASE_DESTRUCT) return;
95f56751 2671
2867cdbc 2672 if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
803f2748 2673 !SvOBJECT(gv) && !SvREADONLY(gv) &&
f7461760 2674 isGV_with_GP(gv) && GvGP(gv) &&
2867cdbc 2675 !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
f7461760 2676 !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
099be4f1 2677 GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
2867cdbc 2678 return;
803f2748
DM
2679 if (SvMAGICAL(gv)) {
2680 MAGIC *mg;
2681 /* only backref magic is allowed */
2682 if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
2683 return;
2684 for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
2685 if (mg->mg_type != PERL_MAGIC_backref)
2686 return;
2687 }
2688 }
2867cdbc
Z
2689 cv = GvCV(gv);
2690 if (!cv) {
2691 HEK *gvnhek = GvNAME_HEK(gv);
2692 (void)hv_delete(stash, HEK_KEY(gvnhek),
2693 HEK_UTF8(gvnhek) ? -HEK_LEN(gvnhek) : HEK_LEN(gvnhek), G_DISCARD);
2694 } else if (GvMULTI(gv) && cv &&
f7461760
Z
2695 !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
2696 CvSTASH(cv) == stash && CvGV(cv) == gv &&
2697 CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
2698 !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
2699 (namehek = GvNAME_HEK(gv)) &&
2700 (gvp = hv_fetch(stash, HEK_KEY(namehek),
2701 HEK_LEN(namehek)*(HEK_UTF8(namehek) ? -1 : 1), 0)) &&
2702 *gvp == (SV*)gv) {
2703 SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
2704 SvREFCNT(gv) = 0;
2705 sv_clear((SV*)gv);
2706 SvREFCNT(gv) = 1;
2707 SvFLAGS(gv) = SVt_IV|SVf_ROK;
2708 SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
2709 STRUCT_OFFSET(XPVIV, xiv_iv));
2710 SvRV_set(gv, value);
2711 }
2712}
2713
2714/*
66610fdd
RGS
2715 * Local variables:
2716 * c-indentation-style: bsd
2717 * c-basic-offset: 4
2718 * indent-tabs-mode: t
2719 * End:
2720 *
37442d52
RGS
2721 * ex: set ts=8 sts=4 sw=4 noet:
2722 */