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