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