This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
svleak.t: Add test for #123198
[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 18 *
cdad3b53 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
24A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
25It is a structure that holds a pointer to a scalar, an array, a hash etc,
26corresponding to $foo, @foo, %foo.
27
28GVs are usually found as values in stashes (symbol table hashes) where
29Perl stores its global variables.
30
31=cut
ccfc67b7
JH
32*/
33
79072805 34#include "EXTERN.h"
864dbfa3 35#define PERL_IN_GV_C
79072805 36#include "perl.h"
8261f8eb 37#include "overload.c"
4aaa4757 38#include "keywords.h"
2846acbf 39#include "feature.h"
79072805 40
f54cb97a
AL
41static const char S_autoload[] = "AUTOLOAD";
42static const STRLEN S_autolen = sizeof(S_autoload)-1;
5c7983e5 43
c69033f2 44GV *
d5713896 45Perl_gv_add_by_type(pTHX_ GV *gv, svtype type)
c69033f2 46{
d5713896 47 SV **where;
7918f24d 48
13be902c
FC
49 if (
50 !gv
51 || (
52 SvTYPE((const SV *)gv) != SVt_PVGV
53 && SvTYPE((const SV *)gv) != SVt_PVLV
54 )
55 ) {
bb85b28a
NC
56 const char *what;
57 if (type == SVt_PVIO) {
58 /*
59 * if it walks like a dirhandle, then let's assume that
60 * this is a dirhandle.
61 */
332c2eac 62 what = OP_IS_DIRHOP(PL_op->op_type) ?
bb85b28a 63 "dirhandle" : "filehandle";
bb85b28a
NC
64 } else if (type == SVt_PVHV) {
65 what = "hash";
66 } else {
67 what = type == SVt_PVAV ? "array" : "scalar";
68 }
de6f7947 69 /* diag_listed_as: Bad symbol for filehandle */
bb85b28a
NC
70 Perl_croak(aTHX_ "Bad symbol for %s", what);
71 }
d5713896
NC
72
73 if (type == SVt_PVHV) {
74 where = (SV **)&GvHV(gv);
75 } else if (type == SVt_PVAV) {
76 where = (SV **)&GvAV(gv);
bb85b28a
NC
77 } else if (type == SVt_PVIO) {
78 where = (SV **)&GvIOp(gv);
d5713896
NC
79 } else {
80 where = &GvSV(gv);
81 }
7918f24d 82
d5713896 83 if (!*where)
e17aed30 84 {
d5713896 85 *where = newSV_type(type);
e17aed30
FC
86 if (type == SVt_PVAV && GvNAMELEN(gv) == 3
87 && strnEQ(GvNAME(gv), "ISA", 3))
88 sv_magic(*where, (SV *)gv, PERL_MAGIC_isa, NULL, 0);
89 }
79072805
LW
90 return gv;
91}
92
93GV *
864dbfa3 94Perl_gv_fetchfile(pTHX_ const char *name)
79072805 95{
7918f24d 96 PERL_ARGS_ASSERT_GV_FETCHFILE;
d9095cec
NC
97 return gv_fetchfile_flags(name, strlen(name), 0);
98}
99
100GV *
101Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
102 const U32 flags)
103{
4116122e 104 char smallbuf[128];
53d95988 105 char *tmpbuf;
d9095cec 106 const STRLEN tmplen = namelen + 2;
79072805
LW
107 GV *gv;
108
7918f24d 109 PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS;
d9095cec
NC
110 PERL_UNUSED_ARG(flags);
111
1d7c1841 112 if (!PL_defstash)
a0714e2c 113 return NULL;
1d7c1841 114
d9095cec 115 if (tmplen <= sizeof smallbuf)
53d95988
CS
116 tmpbuf = smallbuf;
117 else
798b63bc 118 Newx(tmpbuf, tmplen, char);
0ac0412a 119 /* This is where the debugger's %{"::_<$filename"} hash is created */
53d95988
CS
120 tmpbuf[0] = '_';
121 tmpbuf[1] = '<';
d9095cec
NC
122 memcpy(tmpbuf + 2, name, namelen);
123 gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
1d7c1841 124 if (!isGV(gv)) {
d9095cec 125 gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
c69033f2 126#ifdef PERL_DONT_CREATE_GVSV
d9095cec 127 GvSV(gv) = newSVpvn(name, namelen);
c69033f2 128#else
d9095cec 129 sv_setpvn(GvSV(gv), name, namelen);
c69033f2 130#endif
1d7c1841 131 }
5a9a79a4 132 if ((PERLDB_LINE || PERLDB_SAVESRC) && !GvAV(gv))
43e4250a 133 hv_magic(GvHVn(gv), GvAVn(gv), PERL_MAGIC_dbfile);
53d95988
CS
134 if (tmpbuf != smallbuf)
135 Safefree(tmpbuf);
79072805
LW
136 return gv;
137}
138
62d55b22
NC
139/*
140=for apidoc gv_const_sv
141
142If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
143inlining, or C<gv> is a placeholder reference that would be promoted to such
144a typeglob, then returns the value returned by the sub. Otherwise, returns
145NULL.
146
147=cut
148*/
149
150SV *
151Perl_gv_const_sv(pTHX_ GV *gv)
152{
7918f24d 153 PERL_ARGS_ASSERT_GV_CONST_SV;
23491f1d 154 PERL_UNUSED_CONTEXT;
7918f24d 155
62d55b22
NC
156 if (SvTYPE(gv) == SVt_PVGV)
157 return cv_const_sv(GvCVu(gv));
6f1b3ab0 158 return SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVAV ? SvRV(gv) : NULL;
62d55b22
NC
159}
160
12816592
NC
161GP *
162Perl_newGP(pTHX_ GV *const gv)
163{
164 GP *gp;
19bad673 165 U32 hash;
19bad673
NC
166 const char *file;
167 STRLEN len;
2639089b 168#ifndef USE_ITHREADS
6b352265 169 GV *filegv;
2639089b 170#endif
c2587955 171 dVAR;
19bad673 172
7918f24d 173 PERL_ARGS_ASSERT_NEWGP;
2639089b
DD
174 Newxz(gp, 1, GP);
175 gp->gp_egv = gv; /* allow compiler to reuse gv after this */
176#ifndef PERL_DONT_CREATE_GVSV
177 gp->gp_sv = newSV(0);
178#endif
7918f24d 179
c947bc1d
FC
180 /* PL_curcop may be null here. E.g.,
181 INIT { bless {} and exit }
182 frees INIT before looking up DESTROY (and creating *DESTROY)
183 */
2639089b
DD
184 if (PL_curcop) {
185 gp->gp_line = CopLINE(PL_curcop); /* 0 otherwise Newxz */
6e314d4f 186#ifdef USE_ITHREADS
2639089b
DD
187 if (CopFILE(PL_curcop)) {
188 file = CopFILE(PL_curcop);
189 len = strlen(file);
190 }
2639089b 191#else
cb0d3385
FC
192 filegv = CopFILEGV(PL_curcop);
193 if (filegv) {
194 file = GvNAME(filegv)+2;
195 len = GvNAMELEN(filegv)-2;
196 }
6e314d4f 197#endif
cb0d3385
FC
198 else goto no_file;
199 }
200 else {
201 no_file:
19bad673
NC
202 file = "";
203 len = 0;
204 }
f4890806
NC
205
206 PERL_HASH(hash, file, len);
f4890806 207 gp->gp_file_hek = share_hek(file, len, hash);
12816592
NC
208 gp->gp_refcnt = 1;
209
210 return gp;
211}
212
803f2748
DM
213/* Assign CvGV(cv) = gv, handling weak references.
214 * See also S_anonymise_cv_maybe */
215
216void
217Perl_cvgv_set(pTHX_ CV* cv, GV* gv)
218{
ae77754a 219 GV * const oldgv = CvNAMED(cv) ? NULL : SvANY(cv)->xcv_gv_u.xcv_gv;
b290562e 220 HEK *hek;
803f2748
DM
221 PERL_ARGS_ASSERT_CVGV_SET;
222
223 if (oldgv == gv)
224 return;
225
226 if (oldgv) {
cfc1e951 227 if (CvCVGV_RC(cv)) {
e7881358 228 SvREFCNT_dec_NN(oldgv);
cfc1e951
DM
229 CvCVGV_RC_off(cv);
230 }
803f2748 231 else {
803f2748
DM
232 sv_del_backref(MUTABLE_SV(oldgv), MUTABLE_SV(cv));
233 }
234 }
db5cc3ee
FC
235 else if ((hek = CvNAME_HEK(cv))) {
236 unshare_hek(hek);
f3feca7a 237 CvLEXICAL_off(cv);
db5cc3ee 238 }
803f2748 239
5988f306 240 CvNAMED_off(cv);
b290562e 241 SvANY(cv)->xcv_gv_u.xcv_gv = gv;
c794ca97 242 assert(!CvCVGV_RC(cv));
803f2748
DM
243
244 if (!gv)
245 return;
246
c794ca97
DM
247 if (isGV_with_GP(gv) && GvGP(gv) && (GvCV(gv) == cv || GvFORM(gv) == cv))
248 Perl_sv_add_backref(aTHX_ MUTABLE_SV(gv), MUTABLE_SV(cv));
249 else {
cfc1e951 250 CvCVGV_RC_on(cv);
803f2748
DM
251 SvREFCNT_inc_simple_void_NN(gv);
252 }
803f2748
DM
253}
254
ae77754a
FC
255/* Convert CvSTASH + CvNAME_HEK into a GV. Conceptually, all subs have a
256 GV, but for efficiency that GV may not in fact exist. This function,
257 called by CvGV, reifies it. */
258
259GV *
260Perl_cvgv_from_hek(pTHX_ CV *cv)
261{
262 GV *gv;
2eaf799e 263 SV **svp;
ae77754a
FC
264 PERL_ARGS_ASSERT_CVGV_FROM_HEK;
265 assert(SvTYPE(cv) == SVt_PVCV);
266 if (!CvSTASH(cv)) return NULL;
267 ASSUME(CvNAME_HEK(cv));
2eaf799e
FC
268 svp = hv_fetchhek(CvSTASH(cv), CvNAME_HEK(cv), 0);
269 gv = MUTABLE_GV(svp && *svp ? *svp : newSV(0));
270 if (!isGV(gv))
271 gv_init_pvn(gv, CvSTASH(cv), HEK_KEY(CvNAME_HEK(cv)),
ae77754a
FC
272 HEK_LEN(CvNAME_HEK(cv)),
273 SVf_UTF8 * !!HEK_UTF8(CvNAME_HEK(cv)));
2eaf799e
FC
274 if (!CvNAMED(cv)) { /* gv_init took care of it */
275 assert (SvANY(cv)->xcv_gv_u.xcv_gv == gv);
276 return gv;
277 }
ae77754a
FC
278 unshare_hek(CvNAME_HEK(cv));
279 CvNAMED_off(cv);
280 SvANY(cv)->xcv_gv_u.xcv_gv = gv;
2eaf799e 281 if (svp && *svp) SvREFCNT_inc_simple_void_NN(gv);
ae77754a
FC
282 CvCVGV_RC_on(cv);
283 return gv;
284}
285
c68d9564
Z
286/* Assign CvSTASH(cv) = st, handling weak references. */
287
288void
289Perl_cvstash_set(pTHX_ CV *cv, HV *st)
290{
291 HV *oldst = CvSTASH(cv);
292 PERL_ARGS_ASSERT_CVSTASH_SET;
293 if (oldst == st)
294 return;
295 if (oldst)
296 sv_del_backref(MUTABLE_SV(oldst), MUTABLE_SV(cv));
297 SvANY(cv)->xcv_stash = st;
298 if (st)
299 Perl_sv_add_backref(aTHX_ MUTABLE_SV(st), MUTABLE_SV(cv));
300}
803f2748 301
e1104062
FC
302/*
303=for apidoc gv_init_pvn
304
305Converts a scalar into a typeglob. This is an incoercible typeglob;
306assigning a reference to it will assign to one of its slots, instead of
307overwriting it as happens with typeglobs created by SvSetSV. Converting
308any scalar that is SvOK() may produce unpredictable results and is reserved
309for perl's internal use.
310
311C<gv> is the scalar to be converted.
312
313C<stash> is the parent stash/package, if any.
314
04ec7e59
FC
315C<name> and C<len> give the name. The name must be unqualified;
316that is, it must not include the package name. If C<gv> is a
e1104062
FC
317stash element, it is the caller's responsibility to ensure that the name
318passed to this function matches the name of the element. If it does not
319match, perl's internal bookkeeping will get out of sync.
320
04ec7e59
FC
321C<flags> can be set to SVf_UTF8 if C<name> is a UTF8 string, or
322the return value of SvUTF8(sv). It can also take the
323GV_ADDMULTI flag, which means to pretend that the GV has been
e1104062
FC
324seen before (i.e., suppress "Used once" warnings).
325
326=for apidoc gv_init
327
328The old form of gv_init_pvn(). It does not work with UTF8 strings, as it
04ec7e59
FC
329has no flags parameter. If the C<multi> parameter is set, the
330GV_ADDMULTI flag will be passed to gv_init_pvn().
e1104062
FC
331
332=for apidoc gv_init_pv
333
334Same as gv_init_pvn(), but takes a nul-terminated string for the name
335instead of separate char * and length parameters.
336
337=for apidoc gv_init_sv
338
339Same as gv_init_pvn(), but takes an SV * for the name instead of separate
340char * and length parameters. C<flags> is currently unused.
341
342=cut
343*/
344
463ee0b2 345void
04ec7e59 346Perl_gv_init_sv(pTHX_ GV *gv, HV *stash, SV* namesv, U32 flags)
e6066781
BF
347{
348 char *namepv;
349 STRLEN namelen;
350 PERL_ARGS_ASSERT_GV_INIT_SV;
351 namepv = SvPV(namesv, namelen);
352 if (SvUTF8(namesv))
353 flags |= SVf_UTF8;
04ec7e59 354 gv_init_pvn(gv, stash, namepv, namelen, flags);
e6066781
BF
355}
356
357void
04ec7e59 358Perl_gv_init_pv(pTHX_ GV *gv, HV *stash, const char *name, U32 flags)
e6066781
BF
359{
360 PERL_ARGS_ASSERT_GV_INIT_PV;
04ec7e59 361 gv_init_pvn(gv, stash, name, strlen(name), flags);
e6066781
BF
362}
363
364void
04ec7e59 365Perl_gv_init_pvn(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, U32 flags)
463ee0b2 366{
3b6733bf
NC
367 const U32 old_type = SvTYPE(gv);
368 const bool doproto = old_type > SVt_NULL;
f9509170 369 char * const proto = (doproto && SvPOK(gv))
dad95a0a 370 ? ((void)(SvIsCOW(gv) && (sv_force_normal((SV *)gv), 0)), SvPVX(gv))
f9509170 371 : NULL;
49a54bbe 372 const STRLEN protolen = proto ? SvCUR(gv) : 0;
e0260a5b 373 const U32 proto_utf8 = proto ? SvUTF8(gv) : 0;
756cb477 374 SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
1ccdb730 375 const U32 exported_constant = has_constant ? SvPCS_IMPORTED(gv) : 0;
756cb477 376
e6066781 377 PERL_ARGS_ASSERT_GV_INIT_PVN;
756cb477
NC
378 assert (!(proto && has_constant));
379
380 if (has_constant) {
2eaf799e 381 /* The constant has to be a scalar, array or subroutine. */
5c1f4d79 382 switch (SvTYPE(has_constant)) {
5c1f4d79 383 case SVt_PVHV:
5c1f4d79
NC
384 case SVt_PVFM:
385 case SVt_PVIO:
386 Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
387 sv_reftype(has_constant, 0));
81d52ecd 388
42d0e0b7 389 default: NOOP;
5c1f4d79 390 }
756cb477
NC
391 SvRV_set(gv, NULL);
392 SvROK_off(gv);
393 }
463ee0b2 394
3b6733bf
NC
395
396 if (old_type < SVt_PVGV) {
397 if (old_type >= SVt_PV)
398 SvCUR_set(gv, 0);
ad64d0ec 399 sv_upgrade(MUTABLE_SV(gv), SVt_PVGV);
3b6733bf 400 }
55d729e4
GS
401 if (SvLEN(gv)) {
402 if (proto) {
f880fe2f 403 SvPV_set(gv, NULL);
b162af07 404 SvLEN_set(gv, 0);
55d729e4
GS
405 SvPOK_off(gv);
406 } else
94010e71 407 Safefree(SvPVX_mutable(gv));
55d729e4 408 }
2e5b91de
NC
409 SvIOK_off(gv);
410 isGV_with_GP_on(gv);
12816592 411
c43ae56f 412 GvGP_set(gv, Perl_newGP(aTHX_ gv));
e15faf7d
NC
413 GvSTASH(gv) = stash;
414 if (stash)
ad64d0ec 415 Perl_sv_add_backref(aTHX_ MUTABLE_SV(stash), MUTABLE_SV(gv));
04f3bf56 416 gv_name_set(gv, name, len, GV_ADD | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ));
04ec7e59
FC
417 if (flags & GV_ADDMULTI || doproto) /* doproto means it */
418 GvMULTI_on(gv); /* _was_ mentioned */
2eaf799e
FC
419 if (has_constant && SvTYPE(has_constant) == SVt_PVCV) {
420 /* Not actually a constant. Just a regular sub. */
421 CV * const cv = (CV *)has_constant;
422 GvCV_set(gv,cv);
423 if (CvSTASH(cv) == stash && (
424 CvNAME_HEK(cv) == GvNAME_HEK(gv)
425 || ( HEK_LEN(CvNAME_HEK(cv)) == HEK_LEN(GvNAME_HEK(gv))
426 && HEK_FLAGS(CvNAME_HEK(cv)) != HEK_FLAGS(GvNAME_HEK(gv))
427 && HEK_UTF8(CvNAME_HEK(cv)) == HEK_UTF8(GvNAME_HEK(gv))
428 && memEQ(HEK_KEY(CvNAME_HEK(cv)), GvNAME(gv), GvNAMELEN(gv))
429 )
430 ))
431 CvGV_set(cv,gv);
432 }
433 else if (doproto) {
e3d2b9e7 434 CV *cv;
756cb477
NC
435 if (has_constant) {
436 /* newCONSTSUB takes ownership of the reference from us. */
e38acfd7 437 cv = newCONSTSUB_flags(stash, name, len, flags, has_constant);
75bd28cf
FC
438 /* In case op.c:S_process_special_blocks stole it: */
439 if (!GvCV(gv))
c43ae56f 440 GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv));
439cdf38 441 assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */
1ccdb730
NC
442 /* If this reference was a copy of another, then the subroutine
443 must have been "imported", by a Perl space assignment to a GV
444 from a reference to CV. */
445 if (exported_constant)
446 GvIMPORTED_CV_on(gv);
186a5ba8 447 CvSTASH_set(cv, PL_curstash); /* XXX Why is this needed? */
756cb477 448 } else {
186a5ba8 449 cv = newSTUB(gv,1);
756cb477 450 }
55d729e4 451 if (proto) {
e3d2b9e7 452 sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen,
49a54bbe 453 SV_HAS_TRAILING_NUL);
e0260a5b 454 if ( proto_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
55d729e4
GS
455 }
456 }
463ee0b2
LW
457}
458
76e3520e 459STATIC void
e6066781 460S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type)
a0d0e21e 461{
e6066781 462 PERL_ARGS_ASSERT_GV_INIT_SVTYPE;
7918f24d 463
a0d0e21e
LW
464 switch (sv_type) {
465 case SVt_PVIO:
466 (void)GvIOn(gv);
467 break;
468 case SVt_PVAV:
469 (void)GvAVn(gv);
470 break;
471 case SVt_PVHV:
472 (void)GvHVn(gv);
473 break;
c69033f2
NC
474#ifdef PERL_DONT_CREATE_GVSV
475 case SVt_NULL:
476 case SVt_PVCV:
477 case SVt_PVFM:
e654831b 478 case SVt_PVGV:
c69033f2
NC
479 break;
480 default:
dbdce04c
NC
481 if(GvSVn(gv)) {
482 /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13
483 If we just cast GvSVn(gv) to void, it ignores evaluating it for
484 its side effect */
485 }
c69033f2 486#endif
a0d0e21e
LW
487 }
488}
489
0f8d4b5e
FC
490static void core_xsub(pTHX_ CV* cv);
491
492static GV *
493S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
87566176 494 const char * const name, const STRLEN len)
0f8d4b5e
FC
495{
496 const int code = keyword(name, len, 1);
497 static const char file[] = __FILE__;
97021f77 498 CV *cv, *oldcompcv = NULL;
0f8d4b5e 499 int opnum = 0;
0f8d4b5e 500 bool ampable = TRUE; /* &{}-able */
97021f77
FC
501 COP *oldcurcop = NULL;
502 yy_parser *oldparser = NULL;
503 I32 oldsavestack_ix = 0;
0f8d4b5e
FC
504
505 assert(gv || stash);
506 assert(name);
0f8d4b5e 507
88b892d8
FC
508 if (!code) return NULL; /* Not a keyword */
509 switch (code < 0 ? -code : code) {
0f8d4b5e 510 /* no support for \&CORE::infix;
d885f758 511 no support for funcs that do not parse like funcs */
88b892d8 512 case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD:
a96df643 513 case KEY_BEGIN : case KEY_CHECK : case KEY_cmp:
eb31eb35 514 case KEY_default : case KEY_DESTROY:
88b892d8 515 case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif :
d51f8b19 516 case KEY_END : case KEY_eq : case KEY_eval :
88b892d8 517 case KEY_for : case KEY_foreach: case KEY_format: case KEY_ge :
498a02d8 518 case KEY_given : case KEY_goto : case KEY_grep :
88b892d8
FC
519 case KEY_gt : case KEY_if: case KEY_INIT: case KEY_last: case KEY_le:
520 case KEY_local: case KEY_lt: case KEY_m : case KEY_map : case KEY_my:
521 case KEY_ne : case KEY_next : case KEY_no: case KEY_or: case KEY_our:
1efec5ed 522 case KEY_package: case KEY_print: case KEY_printf:
919ad5f7 523 case KEY_q : case KEY_qq : case KEY_qr : case KEY_qw :
88b892d8 524 case KEY_qx : case KEY_redo : case KEY_require: case KEY_return:
d33bb3da 525 case KEY_s : case KEY_say : case KEY_sort :
d80ed303 526 case KEY_state: case KEY_sub :
46bef06f 527 case KEY_tr : case KEY_UNITCHECK: case KEY_unless:
88b892d8
FC
528 case KEY_until: case KEY_use : case KEY_when : case KEY_while :
529 case KEY_x : case KEY_xor : case KEY_y :
0f8d4b5e
FC
530 return NULL;
531 case KEY_chdir:
eb31eb35 532 case KEY_chomp: case KEY_chop: case KEY_defined: case KEY_delete:
d51f8b19 533 case KEY_each : case KEY_eof : case KEY_exec : case KEY_exists:
0f8d4b5e
FC
534 case KEY_keys:
535 case KEY_lstat:
536 case KEY_pop:
537 case KEY_push:
538 case KEY_shift:
a99f2ca2 539 case KEY_splice: case KEY_split:
0f8d4b5e
FC
540 case KEY_stat:
541 case KEY_system:
542 case KEY_truncate: case KEY_unlink:
543 case KEY_unshift:
544 case KEY_values:
545 ampable = FALSE;
546 }
547 if (!gv) {
548 gv = (GV *)newSV(0);
549 gv_init(gv, stash, name, len, TRUE);
550 }
7e68c38b 551 GvMULTI_on(gv);
0f8d4b5e
FC
552 if (ampable) {
553 ENTER;
554 oldcurcop = PL_curcop;
555 oldparser = PL_parser;
556 lex_start(NULL, NULL, 0);
557 oldcompcv = PL_compcv;
558 PL_compcv = NULL; /* Prevent start_subparse from setting
559 CvOUTSIDE. */
560 oldsavestack_ix = start_subparse(FALSE,0);
561 cv = PL_compcv;
562 }
563 else {
564 /* Avoid calling newXS, as it calls us, and things start to
565 get hairy. */
566 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
567 GvCV_set(gv,cv);
568 GvCVGEN(gv) = 0;
0f8d4b5e
FC
569 CvISXSUB_on(cv);
570 CvXSUB(cv) = core_xsub;
eacbb379 571 PoisonPADLIST(cv);
0f8d4b5e
FC
572 }
573 CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE
574 from PL_curcop. */
575 (void)gv_fetchfile(file);
576 CvFILE(cv) = (char *)file;
577 /* XXX This is inefficient, as doing things this order causes
578 a prototype check in newATTRSUB. But we have to do
579 it this order as we need an op number before calling
580 new ATTRSUB. */
581 (void)core_prototype((SV *)cv, name, code, &opnum);
87566176 582 if (stash)
73c02f15 583 (void)hv_store(stash,name,len,(SV *)gv,0);
0f8d4b5e 584 if (ampable) {
4428fb0e
TC
585#ifdef DEBUGGING
586 CV *orig_cv = cv;
587#endif
0f8d4b5e 588 CvLVALUE_on(cv);
4428fb0e
TC
589 /* newATTRSUB will free the CV and return NULL if we're still
590 compiling after a syntax error */
e8f91c91 591 if ((cv = newATTRSUB_x(
7e68c38b 592 oldsavestack_ix, (OP *)gv,
0f8d4b5e
FC
593 NULL,NULL,
594 coresub_op(
595 opnum
596 ? newSVuv((UV)opnum)
597 : newSVpvn(name,len),
598 code, opnum
7e68c38b 599 ),
e8f91c91 600 TRUE
4428fb0e
TC
601 )) != NULL) {
602 assert(GvCV(gv) == orig_cv);
603 if (opnum != OP_VEC && opnum != OP_SUBSTR && opnum != OP_POS
604 && opnum != OP_UNDEF)
605 CvLVALUE_off(cv); /* Now *that* was a neat trick. */
606 }
0f8d4b5e
FC
607 LEAVE;
608 PL_parser = oldparser;
609 PL_curcop = oldcurcop;
610 PL_compcv = oldcompcv;
611 }
4428fb0e
TC
612 if (cv) {
613 SV *opnumsv = opnum ? newSVuv((UV)opnum) : (SV *)NULL;
614 cv_set_call_checker(
615 cv, Perl_ck_entersub_args_core, opnumsv ? opnumsv : (SV *)cv
616 );
617 SvREFCNT_dec(opnumsv);
618 }
619
0f8d4b5e
FC
620 return gv;
621}
622
954c1994 623/*
6c53d59b
FC
624=for apidoc gv_fetchmeth
625
626Like L</gv_fetchmeth_pvn>, but lacks a flags parameter.
627
e6919483
BF
628=for apidoc gv_fetchmeth_sv
629
630Exactly like L</gv_fetchmeth_pvn>, but takes the name string in the form
631of an SV instead of a string/length pair.
632
633=cut
634*/
635
636GV *
637Perl_gv_fetchmeth_sv(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
638{
639 char *namepv;
640 STRLEN namelen;
641 PERL_ARGS_ASSERT_GV_FETCHMETH_SV;
642 namepv = SvPV(namesv, namelen);
643 if (SvUTF8(namesv))
644 flags |= SVf_UTF8;
645 return gv_fetchmeth_pvn(stash, namepv, namelen, level, flags);
646}
647
648/*
649=for apidoc gv_fetchmeth_pv
650
651Exactly like L</gv_fetchmeth_pvn>, but takes a nul-terminated string
652instead of a string/length pair.
653
654=cut
655*/
656
657GV *
658Perl_gv_fetchmeth_pv(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
659{
660 PERL_ARGS_ASSERT_GV_FETCHMETH_PV;
661 return gv_fetchmeth_pvn(stash, name, strlen(name), level, flags);
662}
663
664/*
665=for apidoc gv_fetchmeth_pvn
954c1994
GS
666
667Returns the glob with the given C<name> and a defined subroutine or
668C<NULL>. The glob lives in the given C<stash>, or in the stashes
07766739 669accessible via @ISA and UNIVERSAL::.
954c1994
GS
670
671The argument C<level> should be either 0 or -1. If C<level==0>, as a
672side-effect creates a glob with the given C<name> in the given C<stash>
673which in the case of success contains an alias for the subroutine, and sets
e1a479c5 674up caching info for this glob.
954c1994 675
aae43805
FC
676The only significant values for C<flags> are GV_SUPER and SVf_UTF8.
677
678GV_SUPER indicates that we want to look up the method in the superclasses
679of the C<stash>.
e6919483 680
aae43805 681The
954c1994 682GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
4929bf7b 683visible to Perl code. So when calling C<call_sv>, you should not use
954c1994 684the GV directly; instead, you should use the method's CV, which can be
b267980d 685obtained from the GV with the C<GvCV> macro.
954c1994
GS
686
687=cut
688*/
689
e1a479c5
BB
690/* NOTE: No support for tied ISA */
691
79072805 692GV *
e6919483 693Perl_gv_fetchmeth_pvn(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
79072805 694{
463ee0b2 695 GV** gvp;
e1a479c5
BB
696 AV* linear_av;
697 SV** linear_svp;
698 SV* linear_sv;
aae43805 699 HV* cstash, *cachestash;
e1a479c5
BB
700 GV* candidate = NULL;
701 CV* cand_cv = NULL;
e1a479c5 702 GV* topgv = NULL;
bfcb3514 703 const char *hvname;
e1a479c5
BB
704 I32 create = (level >= 0) ? 1 : 0;
705 I32 items;
e1a479c5 706 U32 topgen_cmp;
04f3bf56 707 U32 is_utf8 = flags & SVf_UTF8;
a0d0e21e 708
e6919483 709 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN;
7918f24d 710
af09ea45
IK
711 /* UNIVERSAL methods should be callable without a stash */
712 if (!stash) {
e1a479c5 713 create = 0; /* probably appropriate */
da51bb9b 714 if(!(stash = gv_stashpvs("UNIVERSAL", 0)))
af09ea45
IK
715 return 0;
716 }
717
e1a479c5
BB
718 assert(stash);
719
bfcb3514
NC
720 hvname = HvNAME_get(stash);
721 if (!hvname)
e1a479c5 722 Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
e27ad1f2 723
e1a479c5
BB
724 assert(hvname);
725 assert(name);
463ee0b2 726
aae43805
FC
727 DEBUG_o( Perl_deb(aTHX_ "Looking for %smethod %s in package %s\n",
728 flags & GV_SUPER ? "SUPER " : "",name,hvname) );
44a8e56a 729
dd69841b 730 topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation;
e1a479c5 731
aae43805 732 if (flags & GV_SUPER) {
1a33a059
FC
733 if (!HvAUX(stash)->xhv_mro_meta->super)
734 HvAUX(stash)->xhv_mro_meta->super = newHV();
735 cachestash = HvAUX(stash)->xhv_mro_meta->super;
aae43805
FC
736 }
737 else cachestash = stash;
738
e1a479c5 739 /* check locally for a real method or a cache entry */
aae43805
FC
740 gvp = (GV**)hv_fetch(cachestash, name, is_utf8 ? -(I32)len : (I32)len,
741 create);
e1a479c5
BB
742 if(gvp) {
743 topgv = *gvp;
0f8d4b5e 744 have_gv:
e1a479c5
BB
745 assert(topgv);
746 if (SvTYPE(topgv) != SVt_PVGV)
04ec7e59 747 gv_init_pvn(topgv, stash, name, len, GV_ADDMULTI|is_utf8);
e1a479c5
BB
748 if ((cand_cv = GvCV(topgv))) {
749 /* If genuine method or valid cache entry, use it */
750 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
751 return topgv;
752 }
753 else {
754 /* stale cache entry, junk it and move on */
e7881358 755 SvREFCNT_dec_NN(cand_cv);
c43ae56f
DM
756 GvCV_set(topgv, NULL);
757 cand_cv = NULL;
e1a479c5
BB
758 GvCVGEN(topgv) = 0;
759 }
760 }
761 else if (GvCVGEN(topgv) == topgen_cmp) {
762 /* cache indicates no such method definitively */
763 return 0;
764 }
aae43805
FC
765 else if (stash == cachestash
766 && len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4
0f8d4b5e 767 && strnEQ(hvname, "CORE", 4)
87566176 768 && S_maybe_add_coresub(aTHX_ NULL,topgv,name,len))
0f8d4b5e 769 goto have_gv;
463ee0b2 770 }
79072805 771
aae43805 772 linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
e1a479c5
BB
773 linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
774 items = AvFILLp(linear_av); /* no +1, to skip over self */
775 while (items--) {
776 linear_sv = *linear_svp++;
777 assert(linear_sv);
778 cstash = gv_stashsv(linear_sv, 0);
779
dd69841b 780 if (!cstash) {
ecad31f0 781 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
d0c0e7dd 782 "Can't locate package %"SVf" for @%"HEKf"::ISA",
ecad31f0 783 SVfARG(linear_sv),
d0c0e7dd 784 HEKfARG(HvNAME_HEK(stash)));
e1a479c5
BB
785 continue;
786 }
9607fc9c 787
e1a479c5
BB
788 assert(cstash);
789
c60dbbc3 790 gvp = (GV**)hv_fetch(cstash, name, is_utf8 ? -(I32)len : (I32)len, 0);
0f8d4b5e
FC
791 if (!gvp) {
792 if (len > 1 && HvNAMELEN_get(cstash) == 4) {
793 const char *hvname = HvNAME(cstash); assert(hvname);
794 if (strnEQ(hvname, "CORE", 4)
795 && (candidate =
87566176 796 S_maybe_add_coresub(aTHX_ cstash,NULL,name,len)
0f8d4b5e
FC
797 ))
798 goto have_candidate;
799 }
800 continue;
801 }
802 else candidate = *gvp;
803 have_candidate:
e1a479c5 804 assert(candidate);
04f3bf56 805 if (SvTYPE(candidate) != SVt_PVGV)
04ec7e59 806 gv_init_pvn(candidate, cstash, name, len, GV_ADDMULTI|is_utf8);
e1a479c5
BB
807 if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
808 /*
809 * Found real method, cache method in topgv if:
810 * 1. topgv has no synonyms (else inheritance crosses wires)
811 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
812 */
813 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
9bfbb681
VP
814 CV *old_cv = GvCV(topgv);
815 SvREFCNT_dec(old_cv);
e1a479c5 816 SvREFCNT_inc_simple_void_NN(cand_cv);
c43ae56f 817 GvCV_set(topgv, cand_cv);
e1a479c5
BB
818 GvCVGEN(topgv) = topgen_cmp;
819 }
820 return candidate;
821 }
822 }
9607fc9c 823
e1a479c5
BB
824 /* Check UNIVERSAL without caching */
825 if(level == 0 || level == -1) {
aae43805 826 candidate = gv_fetchmeth_pvn(NULL, name, len, 1, flags &~GV_SUPER);
e1a479c5
BB
827 if(candidate) {
828 cand_cv = GvCV(candidate);
829 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
9bfbb681
VP
830 CV *old_cv = GvCV(topgv);
831 SvREFCNT_dec(old_cv);
e1a479c5 832 SvREFCNT_inc_simple_void_NN(cand_cv);
c43ae56f 833 GvCV_set(topgv, cand_cv);
e1a479c5
BB
834 GvCVGEN(topgv) = topgen_cmp;
835 }
836 return candidate;
837 }
838 }
839
840 if (topgv && GvREFCNT(topgv) == 1) {
841 /* cache the fact that the method is not defined */
842 GvCVGEN(topgv) = topgen_cmp;
a0d0e21e
LW
843 }
844
79072805
LW
845 return 0;
846}
847
954c1994 848/*
460e5730
FC
849=for apidoc gv_fetchmeth_autoload
850
851This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
852parameter.
853
d21989ed 854=for apidoc gv_fetchmeth_sv_autoload
611c1e95 855
d21989ed
BF
856Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
857of an SV instead of a string/length pair.
858
859=cut
860*/
861
862GV *
863Perl_gv_fetchmeth_sv_autoload(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
864{
865 char *namepv;
866 STRLEN namelen;
867 PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD;
868 namepv = SvPV(namesv, namelen);
869 if (SvUTF8(namesv))
870 flags |= SVf_UTF8;
871 return gv_fetchmeth_pvn_autoload(stash, namepv, namelen, level, flags);
872}
873
874/*
875=for apidoc gv_fetchmeth_pv_autoload
876
877Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
878instead of a string/length pair.
879
880=cut
881*/
882
883GV *
884Perl_gv_fetchmeth_pv_autoload(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
885{
886 PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD;
887 return gv_fetchmeth_pvn_autoload(stash, name, strlen(name), level, flags);
888}
889
890/*
891=for apidoc gv_fetchmeth_pvn_autoload
892
893Same as gv_fetchmeth_pvn(), but looks for autoloaded subroutines too.
611c1e95
IZ
894Returns a glob for the subroutine.
895
896For an autoloaded subroutine without a GV, will create a GV even
897if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
898of the result may be zero.
899
d21989ed
BF
900Currently, the only significant value for C<flags> is SVf_UTF8.
901
611c1e95
IZ
902=cut
903*/
904
905GV *
d21989ed 906Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
611c1e95 907{
499321d3 908 GV *gv = gv_fetchmeth_pvn(stash, name, len, level, flags);
611c1e95 909
d21989ed 910 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD;
7918f24d 911
611c1e95 912 if (!gv) {
611c1e95
IZ
913 CV *cv;
914 GV **gvp;
915
916 if (!stash)
6136c704 917 return NULL; /* UNIVERSAL::AUTOLOAD could cause trouble */
7edbdc6b 918 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
6136c704 919 return NULL;
d21989ed 920 if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags)))
6136c704 921 return NULL;
611c1e95
IZ
922 cv = GvCV(gv);
923 if (!(CvROOT(cv) || CvXSUB(cv)))
6136c704 924 return NULL;
611c1e95
IZ
925 /* Have an autoload */
926 if (level < 0) /* Cannot do without a stub */
d21989ed 927 gv_fetchmeth_pvn(stash, name, len, 0, flags);
c60dbbc3
BF
928 gvp = (GV**)hv_fetch(stash, name,
929 (flags & SVf_UTF8) ? -(I32)len : (I32)len, (level >= 0));
611c1e95 930 if (!gvp)
6136c704 931 return NULL;
611c1e95
IZ
932 return *gvp;
933 }
934 return gv;
935}
936
937/*
954c1994
GS
938=for apidoc gv_fetchmethod_autoload
939
940Returns the glob which contains the subroutine to call to invoke the method
941on the C<stash>. In fact in the presence of autoloading this may be the
942glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
b267980d 943already setup.
954c1994
GS
944
945The third parameter of C<gv_fetchmethod_autoload> determines whether
946AUTOLOAD lookup is performed if the given method is not present: non-zero
b267980d 947means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
954c1994 948Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
b267980d 949with a non-zero C<autoload> parameter.
954c1994 950
cec2d7b1
FC
951These functions grant C<"SUPER"> token
952as a prefix of the method name. Note
954c1994
GS
953that if you want to keep the returned glob for a long time, you need to
954check for it being "AUTOLOAD", since at the later time the call may load a
cec2d7b1
FC
955different subroutine due to $AUTOLOAD changing its value. Use the glob
956created as a side effect to do this.
954c1994 957
cec2d7b1
FC
958These functions have the same side-effects as C<gv_fetchmeth> with
959C<level==0>. The warning against passing the GV returned by
960C<gv_fetchmeth> to C<call_sv> applies equally to these functions.
954c1994
GS
961
962=cut
963*/
964
dc848c6f 965GV *
864dbfa3 966Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
dc848c6f 967{
547bb267
NC
968 PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
969
256d1bb2
NC
970 return gv_fetchmethod_flags(stash, name, autoload ? GV_AUTOLOAD : 0);
971}
972
44130a26
BF
973GV *
974Perl_gv_fetchmethod_sv_flags(pTHX_ HV *stash, SV *namesv, U32 flags)
975{
976 char *namepv;
977 STRLEN namelen;
978 PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS;
979 namepv = SvPV(namesv, namelen);
980 if (SvUTF8(namesv))
981 flags |= SVf_UTF8;
982 return gv_fetchmethod_pvn_flags(stash, namepv, namelen, flags);
983}
984
985GV *
986Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
987{
988 PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS;
989 return gv_fetchmethod_pvn_flags(stash, name, strlen(name), flags);
990}
991
256d1bb2
NC
992/* Don't merge this yet, as it's likely to get a len parameter, and possibly
993 even a U32 hash */
994GV *
44130a26 995Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
256d1bb2 996{
eb578fdb 997 const char *nend;
c445ea15 998 const char *nsplit = NULL;
a0d0e21e 999 GV* gv;
0dae17bd 1000 HV* ostash = stash;
c94593d0 1001 const char * const origname = name;
ad64d0ec 1002 SV *const error_report = MUTABLE_SV(stash);
256d1bb2
NC
1003 const U32 autoload = flags & GV_AUTOLOAD;
1004 const U32 do_croak = flags & GV_CROAK;
14d1dfbd 1005 const U32 is_utf8 = flags & SVf_UTF8;
0dae17bd 1006
44130a26 1007 PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS;
7918f24d 1008
eff494dd 1009 if (SvTYPE(stash) < SVt_PVHV)
5c284bb0 1010 stash = NULL;
c9bf4021
NC
1011 else {
1012 /* The only way stash can become NULL later on is if nsplit is set,
1013 which in turn means that there is no need for a SVt_PVHV case
1014 the error reporting code. */
1015 }
b267980d 1016
44130a26 1017 for (nend = name; *nend || nend != (origname + len); nend++) {
c94593d0 1018 if (*nend == '\'') {
a0d0e21e 1019 nsplit = nend;
c94593d0
NC
1020 name = nend + 1;
1021 }
1022 else if (*nend == ':' && *(nend + 1) == ':') {
1023 nsplit = nend++;
1024 name = nend + 1;
1025 }
a0d0e21e
LW
1026 }
1027 if (nsplit) {
7edbdc6b 1028 if ((nsplit - origname) == 5 && memEQ(origname, "SUPER", 5)) {
9607fc9c 1029 /* ->SUPER::method should really be looked up in original stash */
aae43805
FC
1030 stash = CopSTASH(PL_curcop);
1031 flags |= GV_SUPER;
cea2e8a9 1032 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
0308a534 1033 origname, HvENAME_get(stash), name) );
4633a7c4 1034 }
aae43805
FC
1035 else if ((nsplit - origname) >= 7 &&
1036 strnEQ(nsplit - 7, "::SUPER", 7)) {
1037 /* don't autovifify if ->NoSuchStash::SUPER::method */
1038 stash = gv_stashpvn(origname, nsplit - origname - 7, is_utf8);
1039 if (stash) flags |= GV_SUPER;
1040 }
e189a56d 1041 else {
af09ea45 1042 /* don't autovifify if ->NoSuchStash::method */
14d1dfbd 1043 stash = gv_stashpvn(origname, nsplit - origname, is_utf8);
e189a56d 1044 }
0dae17bd 1045 ostash = stash;
4633a7c4
LW
1046 }
1047
14d1dfbd 1048 gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
a0d0e21e 1049 if (!gv) {
2f6e0fe7 1050 if (strEQ(name,"import") || strEQ(name,"unimport"))
159b6efe 1051 gv = MUTABLE_GV(&PL_sv_yes);
dc848c6f 1052 else if (autoload)
c8416c26
BF
1053 gv = gv_autoload_pvn(
1054 ostash, name, nend - name, GV_AUTOLOAD_ISMETHOD|flags
1055 );
256d1bb2
NC
1056 if (!gv && do_croak) {
1057 /* Right now this is exclusively for the benefit of S_method_common
1058 in pp_hot.c */
1059 if (stash) {
15e6cdd9
DG
1060 /* If we can't find an IO::File method, it might be a call on
1061 * a filehandle. If IO:File has not been loaded, try to
1062 * require it first instead of croaking */
1063 const char *stash_name = HvNAME_get(stash);
31b05a0f
FR
1064 if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File")
1065 && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL,
1066 STR_WITH_LEN("IO/File.pm"), 0,
1067 HV_FETCH_ISEXISTS, NULL, 0)
15e6cdd9 1068 ) {
31b05a0f 1069 require_pv("IO/File.pm");
14d1dfbd 1070 gv = gv_fetchmeth_pvn(stash, name, nend - name, 0, flags);
15e6cdd9
DG
1071 if (gv)
1072 return gv;
1073 }
256d1bb2 1074 Perl_croak(aTHX_
b17a0679 1075 "Can't locate object method \"%"UTF8f
d0c0e7dd 1076 "\" via package \"%"HEKf"\"",
b17a0679 1077 UTF8fARG(is_utf8, nend - name, name),
d0c0e7dd 1078 HEKfARG(HvNAME_HEK(stash)));
256d1bb2
NC
1079 }
1080 else {
ecad31f0 1081 SV* packnamesv;
256d1bb2 1082
256d1bb2 1083 if (nsplit) {
ecad31f0
BF
1084 packnamesv = newSVpvn_flags(origname, nsplit - origname,
1085 SVs_TEMP | is_utf8);
256d1bb2 1086 } else {
017c5e4e 1087 packnamesv = error_report;
256d1bb2
NC
1088 }
1089
1090 Perl_croak(aTHX_
b17a0679
FC
1091 "Can't locate object method \"%"UTF8f
1092 "\" via package \"%"SVf"\""
ecad31f0 1093 " (perhaps you forgot to load \"%"SVf"\"?)",
b17a0679 1094 UTF8fARG(is_utf8, nend - name, name),
ecad31f0 1095 SVfARG(packnamesv), SVfARG(packnamesv));
256d1bb2
NC
1096 }
1097 }
463ee0b2 1098 }
dc848c6f 1099 else if (autoload) {
9d4ba2ae 1100 CV* const cv = GvCV(gv);
09280a33
CS
1101 if (!CvROOT(cv) && !CvXSUB(cv)) {
1102 GV* stubgv;
1103 GV* autogv;
1104
0c028dca 1105 if (CvANON(cv) || CvLEXICAL(cv))
09280a33
CS
1106 stubgv = gv;
1107 else {
1108 stubgv = CvGV(cv);
1109 if (GvCV(stubgv) != cv) /* orphaned import */
1110 stubgv = gv;
1111 }
c8416c26
BF
1112 autogv = gv_autoload_pvn(GvSTASH(stubgv),
1113 GvNAME(stubgv), GvNAMELEN(stubgv),
1114 GV_AUTOLOAD_ISMETHOD
1115 | (GvNAMEUTF8(stubgv) ? SVf_UTF8 : 0));
dc848c6f 1116 if (autogv)
1117 gv = autogv;
1118 }
1119 }
44a8e56a 1120
1121 return gv;
1122}
1123
1124GV*
0eeb01b9 1125Perl_gv_autoload_sv(pTHX_ HV *stash, SV* namesv, U32 flags)
5fba3c91
BF
1126{
1127 char *namepv;
1128 STRLEN namelen;
0fe84f7c 1129 PERL_ARGS_ASSERT_GV_AUTOLOAD_SV;
5fba3c91
BF
1130 namepv = SvPV(namesv, namelen);
1131 if (SvUTF8(namesv))
1132 flags |= SVf_UTF8;
0eeb01b9 1133 return gv_autoload_pvn(stash, namepv, namelen, flags);
5fba3c91
BF
1134}
1135
1136GV*
0eeb01b9 1137Perl_gv_autoload_pv(pTHX_ HV *stash, const char *namepv, U32 flags)
5fba3c91 1138{
0fe84f7c 1139 PERL_ARGS_ASSERT_GV_AUTOLOAD_PV;
0eeb01b9 1140 return gv_autoload_pvn(stash, namepv, strlen(namepv), flags);
5fba3c91
BF
1141}
1142
1143GV*
0eeb01b9 1144Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
44a8e56a 1145{
44a8e56a 1146 GV* gv;
1147 CV* cv;
1148 HV* varstash;
1149 GV* vargv;
1150 SV* varsv;
c8416c26
BF
1151 SV *packname = NULL;
1152 U32 is_utf8 = flags & SVf_UTF8 ? SVf_UTF8 : 0;
44a8e56a 1153
0fe84f7c 1154 PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN;
7918f24d 1155
7edbdc6b 1156 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
a0714e2c 1157 return NULL;
0dae17bd
GS
1158 if (stash) {
1159 if (SvTYPE(stash) < SVt_PVHV) {
c8416c26
BF
1160 STRLEN packname_len = 0;
1161 const char * const packname_ptr = SvPV_const(MUTABLE_SV(stash), packname_len);
1162 packname = newSVpvn_flags(packname_ptr, packname_len,
1163 SVs_TEMP | SvUTF8(stash));
5c284bb0 1164 stash = NULL;
0dae17bd 1165 }
c8416c26
BF
1166 else
1167 packname = sv_2mortal(newSVhek(HvNAME_HEK(stash)));
aae43805 1168 if (flags & GV_SUPER) sv_catpvs(packname, "::SUPER");
0dae17bd 1169 }
257dc59d
FC
1170 if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE,
1171 is_utf8 | (flags & GV_SUPER))))
a0714e2c 1172 return NULL;
dc848c6f 1173 cv = GvCV(gv);
1174
adb5a9ae 1175 if (!(CvROOT(cv) || CvXSUB(cv)))
a0714e2c 1176 return NULL;
ed850460 1177
dc848c6f 1178 /*
1179 * Inheriting AUTOLOAD for non-methods works ... for now.
1180 */
0eeb01b9
FC
1181 if (
1182 !(flags & GV_AUTOLOAD_ISMETHOD)
1183 && (GvCVGEN(gv) || GvSTASH(gv) != stash)
041457d9 1184 )
d1d15184 1185 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
b17a0679
FC
1186 "Use of inherited AUTOLOAD for non-method %"SVf
1187 "::%"UTF8f"() is deprecated",
ecad31f0 1188 SVfARG(packname),
b17a0679 1189 UTF8fARG(is_utf8, len, name));
44a8e56a 1190
aed2304a 1191 if (CvISXSUB(cv)) {
bb619f37
FC
1192 /* Instead of forcing the XSUB do another lookup for $AUTOLOAD
1193 * and split that value on the last '::', pass along the same data
1194 * via the SvPVX field in the CV, and the stash in CvSTASH.
8fa6a409
FC
1195 *
1196 * Due to an unfortunate accident of history, the SvPVX field
e1fa07e3 1197 * serves two purposes. It is also used for the subroutine's pro-
8fa6a409
FC
1198 * type. Since SvPVX has been documented as returning the sub name
1199 * for a long time, but not as returning the prototype, we have
1200 * to preserve the SvPVX AUTOLOAD behaviour and put the prototype
1201 * elsewhere.
1202 *
1203 * We put the prototype in the same allocated buffer, but after
1204 * the sub name. The SvPOK flag indicates the presence of a proto-
1205 * type. The CvAUTOLOAD flag indicates the presence of a sub name.
1206 * If both flags are on, then SvLEN is used to indicate the end of
1207 * the prototype (artificially lower than what is actually allo-
1208 * cated), at the risk of having to reallocate a few bytes unneces-
1209 * sarily--but that should happen very rarely, if ever.
1210 *
1211 * We use SvUTF8 for both prototypes and sub names, so if one is
1212 * UTF8, the other must be upgraded.
adb5a9ae 1213 */
c68d9564 1214 CvSTASH_set(cv, stash);
8fa6a409 1215 if (SvPOK(cv)) { /* Ouch! */
e7881358 1216 SV * const tmpsv = newSVpvn_flags(name, len, is_utf8);
8fa6a409
FC
1217 STRLEN ulen;
1218 const char *proto = CvPROTO(cv);
1219 assert(proto);
1220 if (SvUTF8(cv))
1221 sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2);
1222 ulen = SvCUR(tmpsv);
1223 SvCUR(tmpsv)++; /* include null in string */
1224 sv_catpvn_flags(
1225 tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv)
1226 );
1227 SvTEMP_on(tmpsv); /* Allow theft */
1228 sv_setsv_nomg((SV *)cv, tmpsv);
05b525f4 1229 SvTEMP_off(tmpsv);
e7881358 1230 SvREFCNT_dec_NN(tmpsv);
8fa6a409
FC
1231 SvLEN(cv) = SvCUR(cv) + 1;
1232 SvCUR(cv) = ulen;
1233 }
1234 else {
1235 sv_setpvn((SV *)cv, name, len);
1236 SvPOK_off(cv);
1237 if (is_utf8)
c8416c26 1238 SvUTF8_on(cv);
8fa6a409
FC
1239 else SvUTF8_off(cv);
1240 }
1241 CvAUTOLOAD_on(cv);
adb5a9ae 1242 }
adb5a9ae 1243
44a8e56a 1244 /*
1245 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
1246 * The subroutine's original name may not be "AUTOLOAD", so we don't
1247 * use that, but for lack of anything better we will use the sub's
1248 * original package to look up $AUTOLOAD.
1249 */
18691622 1250 varstash = CvNAMED(cv) ? CvSTASH(cv) : GvSTASH(CvGV(cv));
5c7983e5 1251 vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
3d35f11b
GS
1252 ENTER;
1253
c69033f2 1254 if (!isGV(vargv)) {
04ec7e59 1255 gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0);
c69033f2 1256#ifdef PERL_DONT_CREATE_GVSV
561b68a9 1257 GvSV(vargv) = newSV(0);
c69033f2
NC
1258#endif
1259 }
3d35f11b 1260 LEAVE;
e203899d 1261 varsv = GvSVn(vargv);
4bac9ae4
CS
1262 SvTAINTED_off(varsv); /* previous $AUTOLOAD taint is obsolete */
1263 /* XXX: this process is not careful to avoid extra magic gets and sets; tied $AUTOLOAD will get noise */
c8416c26 1264 sv_setsv(varsv, packname);
396482e1 1265 sv_catpvs(varsv, "::");
d40bf27b
NC
1266 /* Ensure SvSETMAGIC() is called if necessary. In particular, to clear
1267 tainting if $FOO::AUTOLOAD was previously tainted, but is not now. */
61a9130e
FC
1268 sv_catpvn_flags(
1269 varsv, name, len,
5bcd1ef4 1270 SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES)
61a9130e 1271 );
c8416c26
BF
1272 if (is_utf8)
1273 SvUTF8_on(varsv);
a0d0e21e
LW
1274 return gv;
1275}
1276
44a2ac75
YO
1277
1278/* require_tie_mod() internal routine for requiring a module
486ec47a 1279 * that implements the logic of automatic ties like %! and %-
44a2ac75
YO
1280 *
1281 * The "gv" parameter should be the glob.
45cbc99a
RGS
1282 * "varpv" holds the name of the var, used for error messages.
1283 * "namesv" holds the module name. Its refcount will be decremented.
44a2ac75 1284 * "methpv" holds the method name to test for to check that things
45cbc99a
RGS
1285 * are working reasonably close to as expected.
1286 * "flags": if flag & 1 then save the scalar before loading.
44a2ac75
YO
1287 * For the protection of $! to work (it is set by this routine)
1288 * the sv slot must already be magicalized.
d2c93421 1289 */
44a2ac75
YO
1290STATIC HV*
1291S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methpv,const U32 flags)
d2c93421 1292{
da51bb9b 1293 HV* stash = gv_stashsv(namesv, 0);
45cbc99a 1294
7918f24d
NC
1295 PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
1296
0ea03996 1297 if (!stash || !(gv_fetchmethod_autoload(stash, methpv, FALSE))) {
45cbc99a
RGS
1298 SV *module = newSVsv(namesv);
1299 char varname = *varpv; /* varpv might be clobbered by load_module,
1300 so save it. For the moment it's always
1301 a single char. */
b82b06b8 1302 const char type = varname == '[' ? '$' : '%';
61bac25c 1303#ifdef DEBUGGING
d2c93421 1304 dSP;
61bac25c 1305#endif
d2c93421 1306 ENTER;
600beb2e 1307 SAVEFREESV(namesv);
44a2ac75 1308 if ( flags & 1 )
45cbc99a
RGS
1309 save_scalar(gv);
1310 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
61bac25c 1311 assert(sp == PL_stack_sp);
da51bb9b 1312 stash = gv_stashsv(namesv, 0);
44a2ac75 1313 if (!stash)
b82b06b8
FC
1314 Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" is not available",
1315 type, varname, SVfARG(namesv));
45cbc99a 1316 else if (!gv_fetchmethod(stash, methpv))
b82b06b8
FC
1317 Perl_croak(aTHX_ "panic: Can't use %c%c because %"SVf" does not support method %s",
1318 type, varname, SVfARG(namesv), methpv);
600beb2e 1319 LEAVE;
d2c93421 1320 }
e7881358 1321 else SvREFCNT_dec_NN(namesv);
44a2ac75 1322 return stash;
d2c93421
RH
1323}
1324
954c1994
GS
1325/*
1326=for apidoc gv_stashpv
1327
da51bb9b 1328Returns a pointer to the stash for a specified package. Uses C<strlen> to
75c442e4 1329determine the length of C<name>, then calls C<gv_stashpvn()>.
954c1994
GS
1330
1331=cut
1332*/
1333
a0d0e21e 1334HV*
864dbfa3 1335Perl_gv_stashpv(pTHX_ const char *name, I32 create)
a0d0e21e 1336{
7918f24d 1337 PERL_ARGS_ASSERT_GV_STASHPV;
dc437b57 1338 return gv_stashpvn(name, strlen(name), create);
1339}
1340
bc96cb06
SH
1341/*
1342=for apidoc gv_stashpvn
1343
da51bb9b
NC
1344Returns a pointer to the stash for a specified package. The C<namelen>
1345parameter indicates the length of the C<name>, in bytes. C<flags> is passed
1346to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
1347created if it does not already exist. If the package does not exist and
1348C<flags> is 0 (or any other setting that does not create packages) then NULL
1349is returned.
1350
566a4718
YO
1351Flags may be one of:
1352
1353 GV_ADD
1354 SVf_UTF8
1355 GV_NOADD_NOINIT
1356 GV_NOINIT
1357 GV_NOEXPAND
1358 GV_ADDMG
1359
1360The most important of which are probably GV_ADD and SVf_UTF8.
bc96cb06 1361
808724c8 1362Note, use of C<gv_stashsv> instead of C<gv_stashpvn> where possible is strongly
1363recommended for performance reasons.
1364
bc96cb06
SH
1365=cut
1366*/
1367
0eadbdad
YO
1368/*
1369gv_stashpvn_internal
1370
1371Perform the internal bits of gv_stashsvpvn_cached. You could think of this
1372as being one half of the logic. Not to be called except from gv_stashsvpvn_cached().
1373
1374*/
1375
4e7ebec5 1376PERL_STATIC_INLINE HV*
0eadbdad 1377S_gv_stashpvn_internal(pTHX_ const char *name, U32 namelen, I32 flags)
dc437b57 1378{
0cea0058 1379 char smallbuf[128];
46fc3d4c 1380 char *tmpbuf;
a0d0e21e
LW
1381 HV *stash;
1382 GV *tmpgv;
add0ecde 1383 U32 tmplen = namelen + 2;
dc437b57 1384
0eadbdad 1385 PERL_ARGS_ASSERT_GV_STASHPVN_INTERNAL;
7918f24d 1386
add0ecde 1387 if (tmplen <= sizeof smallbuf)
46fc3d4c 1388 tmpbuf = smallbuf;
1389 else
add0ecde
VP
1390 Newx(tmpbuf, tmplen, char);
1391 Copy(name, tmpbuf, namelen, char);
1392 tmpbuf[namelen] = ':';
1393 tmpbuf[namelen+1] = ':';
1394 tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
46fc3d4c 1395 if (tmpbuf != smallbuf)
1396 Safefree(tmpbuf);
a0d0e21e 1397 if (!tmpgv)
da51bb9b 1398 return NULL;
a0d0e21e 1399 stash = GvHV(tmpgv);
1f656fcf 1400 if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL;
9efb5c72 1401 assert(stash);
1f656fcf 1402 if (!HvNAME_get(stash)) {
0be4d16f 1403 hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 );
1f656fcf
FC
1404
1405 /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */
1406 /* If the containing stash has multiple effective
1407 names, see that this one gets them, too. */
1408 if (HvAUX(GvSTASH(tmpgv))->xhv_name_count)
1409 mro_package_moved(stash, NULL, tmpgv, 1);
1410 }
a0d0e21e 1411 return stash;
463ee0b2
LW
1412}
1413
808724c8 1414/*
1415gv_stashsvpvn_cached
1416
1417Returns a pointer to the stash for a specified package, possibly
1418cached. Implements both C<gv_stashpvn> and C<gc_stashsv>.
1419
1420Requires one of either namesv or namepv to be non-null.
1421
1422See C<gv_stashpvn> for details on "flags".
1423
1424Note the sv interface is strongly preferred for performance reasons.
1425
1426*/
1427
1428#define PERL_ARGS_ASSERT_GV_STASHSVPVN_CACHED \
1429 assert(namesv || name)
1430
1431PERL_STATIC_INLINE HV*
1432S_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char *name, U32 namelen, I32 flags)
4e7ebec5 1433{
1434 HV* stash;
808724c8 1435 HE* he;
1436
1437 PERL_ARGS_ASSERT_GV_STASHSVPVN_CACHED;
1438
1439 he = (HE *)hv_common(
1440 PL_stashcache, namesv, name, namelen,
4e7ebec5 1441 (flags & SVf_UTF8) ? HVhek_UTF8 : 0, 0, NULL, 0
1442 );
808724c8 1443
4e7ebec5 1444 if (he) return INT2PTR(HV*,SvIVX(HeVAL(he)));
d283e876 1445 else if (flags & GV_CACHE_ONLY) return NULL;
4e7ebec5 1446
808724c8 1447 if (namesv) {
1448 if (SvOK(namesv)) { /* prevent double uninit warning */
1449 STRLEN len;
1450 name = SvPV_const(namesv, len);
1451 namelen = len;
1452 flags |= SvUTF8(namesv);
1453 } else {
1454 name = ""; namelen = 0;
1455 }
1456 }
0eadbdad
YO
1457 stash = gv_stashpvn_internal(name, namelen, flags);
1458
4e7ebec5 1459 if (stash && namelen) {
1460 SV* const ref = newSViv(PTR2IV(stash));
0eadbdad 1461 (void)hv_store(PL_stashcache, name,
4e7ebec5 1462 (flags & SVf_UTF8) ? -(I32)namelen : (I32)namelen, ref, 0);
1463 }
808724c8 1464
4e7ebec5 1465 return stash;
1466}
1467
808724c8 1468HV*
1469Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
1470{
1471 PERL_ARGS_ASSERT_GV_STASHPVN;
1472 return gv_stashsvpvn_cached(NULL, name, namelen, flags);
1473}
1474
954c1994
GS
1475/*
1476=for apidoc gv_stashsv
1477
da51bb9b 1478Returns a pointer to the stash for a specified package. See C<gv_stashpvn>.
954c1994 1479
808724c8 1480Note this interface is strongly preferred over C<gv_stashpvn> for performance reasons.
1481
954c1994
GS
1482=cut
1483*/
1484
a0d0e21e 1485HV*
da51bb9b 1486Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
a0d0e21e 1487{
7918f24d 1488 PERL_ARGS_ASSERT_GV_STASHSV;
808724c8 1489 return gv_stashsvpvn_cached(sv, NULL, 0, flags);
a0d0e21e
LW
1490}
1491
1492
463ee0b2 1493GV *
fe9845cc 1494Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
7918f24d 1495 PERL_ARGS_ASSERT_GV_FETCHPV;
b7787f18 1496 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
7a5fd60d
NC
1497}
1498
1499GV *
fe9845cc 1500Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
7a5fd60d 1501 STRLEN len;
77cb3b01
FC
1502 const char * const nambeg =
1503 SvPV_flags_const(name, len, flags & GV_NO_SVGMAGIC ? 0 : SV_GMAGIC);
7918f24d 1504 PERL_ARGS_ASSERT_GV_FETCHSV;
7a5fd60d
NC
1505 return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
1506}
1507
90aeefb4 1508PERL_STATIC_INLINE void
290a1700 1509S_gv_magicalize_isa(pTHX_ GV *gv)
ad7cce9f
FR
1510{
1511 AV* av;
1512
1513 PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
1514
1515 av = GvAVn(gv);
1516 GvMULTI_on(gv);
1517 sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1518 NULL, 0);
ad7cce9f
FR
1519}
1520
90aeefb4
BF
1521/* This function grabs name and tries to split a stash and glob
1522 * from its contents. TODO better description, comments
1523 *
1524 * If the function returns TRUE and 'name == name_end', then
1525 * 'gv' can be directly returned to the caller of gv_fetchpvn_flags
1526 */
1527PERL_STATIC_INLINE bool
1528S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name,
1529 STRLEN *len, const char *nambeg, STRLEN full_len,
1530 const U32 is_utf8, const I32 add)
1531{
1532 const char *name_cursor;
1533 const char *const name_end = nambeg + full_len;
1534 const char *const name_em1 = name_end - 1;
1535
1536 PERL_ARGS_ASSERT_PARSE_GV_STASH_NAME;
1537
1538 if (full_len > 2 && **name == '*' && isIDFIRST_lazy_if(*name + 1, is_utf8)) {
1539 /* accidental stringify on a GV? */
1540 (*name)++;
1541 }
1542
1543 for (name_cursor = *name; name_cursor < name_end; name_cursor++) {
1544 if (name_cursor < name_em1 &&
1545 ((*name_cursor == ':' && name_cursor[1] == ':')
1546 || *name_cursor == '\''))
1547 {
1548 if (!*stash)
1549 *stash = PL_defstash;
1550 if (!*stash || !SvREFCNT(*stash)) /* symbol table under destruction */
1551 return FALSE;
1552
1553 *len = name_cursor - *name;
1554 if (name_cursor > nambeg) { /* Skip for initial :: or ' */
1555 const char *key;
1556 GV**gvp;
1557 if (*name_cursor == ':') {
1558 key = *name;
1559 *len += 2;
1560 }
1561 else {
1562 char *tmpbuf;
1563 Newx(tmpbuf, *len+2, char);
1564 Copy(*name, tmpbuf, *len, char);
1565 tmpbuf[(*len)++] = ':';
1566 tmpbuf[(*len)++] = ':';
1567 key = tmpbuf;
1568 }
c161da64 1569 gvp = (GV**)hv_fetch(*stash, key, is_utf8 ? -((I32)*len) : (I32)*len, add);
90aeefb4
BF
1570 *gv = gvp ? *gvp : NULL;
1571 if (*gv && *gv != (const GV *)&PL_sv_undef) {
1572 if (SvTYPE(*gv) != SVt_PVGV)
1573 gv_init_pvn(*gv, *stash, key, *len, (add & GV_ADDMULTI)|is_utf8);
1574 else
1575 GvMULTI_on(*gv);
1576 }
1577 if (key != *name)
1578 Safefree(key);
1579 if (!*gv || *gv == (const GV *)&PL_sv_undef)
1580 return FALSE;
1581
1582 if (!(*stash = GvHV(*gv))) {
1583 *stash = GvHV(*gv) = newHV();
1584 if (!HvNAME_get(*stash)) {
1585 if (GvSTASH(*gv) == PL_defstash && *len == 6
1586 && strnEQ(*name, "CORE", 4))
1587 hv_name_set(*stash, "CORE", 4, 0);
1588 else
1589 hv_name_set(
1590 *stash, nambeg, name_cursor-nambeg, is_utf8
1591 );
1592 /* If the containing stash has multiple effective
1593 names, see that this one gets them, too. */
1594 if (HvAUX(GvSTASH(*gv))->xhv_name_count)
1595 mro_package_moved(*stash, NULL, *gv, 1);
1596 }
1597 }
1598 else if (!HvNAME_get(*stash))
1599 hv_name_set(*stash, nambeg, name_cursor - nambeg, is_utf8);
1600 }
1601
1602 if (*name_cursor == ':')
1603 name_cursor++;
1604 *name = name_cursor+1;
1605 if (*name == name_end) {
1606 if (!*gv)
1607 *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
1608 return TRUE;
1609 }
1610 }
1611 }
1612 *len = name_cursor - *name;
1613 return TRUE;
1614}
1615
536d1a88 1616/* Checks if an unqualified name is in the main stash */
90aeefb4 1617PERL_STATIC_INLINE bool
536d1a88 1618S_gv_is_in_main(pTHX_ const char *name, STRLEN len, const U32 is_utf8)
90aeefb4 1619{
536d1a88 1620 PERL_ARGS_ASSERT_GV_IS_IN_MAIN;
90aeefb4 1621
90aeefb4 1622 /* If it's an alphanumeric variable */
536d1a88 1623 if ( len && isIDFIRST_lazy_if(name, is_utf8) ) {
90aeefb4
BF
1624 /* Some "normal" variables are always in main::,
1625 * like INC or STDOUT.
1626 */
1627 switch (len) {
1628 case 1:
1629 if (*name == '_')
536d1a88 1630 return TRUE;
90aeefb4
BF
1631 break;
1632 case 3:
1633 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1634 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1635 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
536d1a88 1636 return TRUE;
90aeefb4
BF
1637 break;
1638 case 4:
1639 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1640 && name[3] == 'V')
536d1a88 1641 return TRUE;
90aeefb4
BF
1642 break;
1643 case 5:
1644 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1645 && name[3] == 'I' && name[4] == 'N')
536d1a88 1646 return TRUE;
90aeefb4
BF
1647 break;
1648 case 6:
1649 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1650 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1651 ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
536d1a88 1652 return TRUE;
90aeefb4
BF
1653 break;
1654 case 7:
1655 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1656 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1657 && name[6] == 'T')
536d1a88 1658 return TRUE;
90aeefb4
BF
1659 break;
1660 }
536d1a88
BF
1661 }
1662 /* *{""}, or a special variable like $@ */
1663 else
1664 return TRUE;
1665
1666 return FALSE;
1667}
1668
1669
1670/* This function is called if parse_gv_stash_name() failed to
1671 * find a stash, or if GV_NOTQUAL or an empty name was passed
1672 * to gv_fetchpvn_flags.
1673 *
1674 * It returns FALSE if the default stash can't be found nor created,
1675 * which might happen during global destruction.
1676 */
1677PERL_STATIC_INLINE bool
1678S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len,
1679 const U32 is_utf8, const I32 add,
1680 const svtype sv_type)
1681{
1682 PERL_ARGS_ASSERT_FIND_DEFAULT_STASH;
1683
1684 /* No stash in name, so see how we can default */
90aeefb4 1685
536d1a88
BF
1686 if ( gv_is_in_main(name, len, is_utf8) ) {
1687 *stash = PL_defstash;
1688 }
1689 else {
1690 if (IN_PERL_COMPILETIME) {
90aeefb4
BF
1691 *stash = PL_curstash;
1692 if (add && (PL_hints & HINT_STRICT_VARS) &&
1693 sv_type != SVt_PVCV &&
1694 sv_type != SVt_PVGV &&
1695 sv_type != SVt_PVFM &&
1696 sv_type != SVt_PVIO &&
1697 !(len == 1 && sv_type == SVt_PV &&
1698 (*name == 'a' || *name == 'b')) )
1699 {
c161da64 1700 GV**gvp = (GV**)hv_fetch(*stash,name,is_utf8 ? -(I32)len : (I32)len,0);
90aeefb4
BF
1701 if (!gvp || *gvp == (const GV *)&PL_sv_undef ||
1702 SvTYPE(*gvp) != SVt_PVGV)
1703 {
1704 *stash = NULL;
1705 }
1706 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
1707 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1708 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
1709 {
1710 /* diag_listed_as: Variable "%s" is not imported%s */
1711 Perl_ck_warner_d(
1712 aTHX_ packWARN(WARN_MISC),
1713 "Variable \"%c%"UTF8f"\" is not imported",
1714 sv_type == SVt_PVAV ? '@' :
1715 sv_type == SVt_PVHV ? '%' : '$',
1716 UTF8fARG(is_utf8, len, name));
1717 if (GvCVu(*gvp))
1718 Perl_ck_warner_d(
1719 aTHX_ packWARN(WARN_MISC),
1720 "\t(Did you mean &%"UTF8f" instead?)\n",
1721 UTF8fARG(is_utf8, len, name)
1722 );
1723 *stash = NULL;
1724 }
1725 }
1726 }
1727 else {
1728 /* Use the current op's stash */
1729 *stash = CopSTASH(PL_curcop);
1730 }
1731 }
90aeefb4
BF
1732
1733 if (!*stash) {
1734 if (add && !PL_in_clean_all) {
10860bf4
FC
1735 GV *gv;
1736 qerror(Perl_mess(aTHX_
90aeefb4 1737 "Global symbol \"%s%"UTF8f
d8c6310a
FC
1738 "\" requires explicit package name (did you forget to "
1739 "declare \"my %s%"UTF8f"\"?)",
1740 (sv_type == SVt_PV ? "$"
1741 : sv_type == SVt_PVAV ? "@"
1742 : sv_type == SVt_PVHV ? "%"
1743 : ""), UTF8fARG(is_utf8, len, name),
90aeefb4
BF
1744 (sv_type == SVt_PV ? "$"
1745 : sv_type == SVt_PVAV ? "@"
1746 : sv_type == SVt_PVHV ? "%"
10860bf4 1747 : ""), UTF8fARG(is_utf8, len, name)));
cd164bf8
BF
1748 /* To maintain the output of errors after the strict exception
1749 * above, and to keep compat with older releases, rather than
1750 * placing the variables in the pad, we place
1751 * them in the <none>:: stash.
1752 */
90aeefb4
BF
1753 gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
1754 if (!gv) {
1755 /* symbol table under destruction */
1756 return FALSE;
1757 }
1758 *stash = GvHV(gv);
1759 }
1760 else
1761 return FALSE;
1762 }
1763
1764 if (!SvREFCNT(*stash)) /* symbol table under destruction */
1765 return FALSE;
1766
1767 return TRUE;
1768}
1769
8c995aba
FC
1770/* gv_magicalize only turns on the SVf_READONLY flag, not SVf_PROTECT. So
1771 redefine SvREADONLY_on for that purpose. We don’t use it later on in
1772 this file. */
1773#undef SvREADONLY_on
1774#define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)
1775
930867a8
BF
1776/* gv_magicalize() is called by gv_fetchpvn_flags when creating
1777 * a new GV.
1778 * Note that it does not insert the GV into the stash prior to
1779 * magicalization, which some variables require need in order
1780 * to work (like $[, %+, %-, %!), so callers must take care of
1781 * that beforehand.
1782 *
1783 * The return value has a specific meaning for gv_fetchpvn_flags:
1784 * If it returns true, and the gv is empty, it indicates that its
1785 * refcount should be decreased.
1786 */
1787PERL_STATIC_INLINE bool
1788S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
71c35c05 1789 bool addmg, const svtype sv_type)
79072805 1790{
960b831f 1791 SSize_t paren;
79072805 1792
930867a8 1793 PERL_ARGS_ASSERT_GV_MAGICALIZE;
90aeefb4 1794
44428a46 1795 if (stash != PL_defstash) { /* not the main stash */
ea238638 1796 /* We only have to check for a few names here: a, b, EXPORT, ISA
4aaa4757
FC
1797 and VERSION. All the others apply only to the main stash or to
1798 CORE (which is checked right after this). */
ea238638 1799 if (len) {
b464bac0 1800 const char * const name2 = name + 1;
cc4c2da6 1801 switch (*name) {
cc4c2da6
NC
1802 case 'E':
1803 if (strnEQ(name2, "XPORT", 5))
1804 GvMULTI_on(gv);
1805 break;
1806 case 'I':
44428a46 1807 if (strEQ(name2, "SA"))
290a1700 1808 gv_magicalize_isa(gv);
cc4c2da6 1809 break;
44428a46
FC
1810 case 'V':
1811 if (strEQ(name2, "ERSION"))
1812 GvMULTI_on(gv);
1813 break;
ea238638
FC
1814 case 'a':
1815 case 'b':
1816 if (len == 1 && sv_type == SVt_PV)
1817 GvMULTI_on(gv);
924ba076 1818 /* FALLTHROUGH */
4aaa4757
FC
1819 default:
1820 goto try_core;
1821 }
930867a8 1822 return addmg;
4aaa4757
FC
1823 }
1824 try_core:
1825 if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
1826 /* Avoid null warning: */
1827 const char * const stashname = HvNAME(stash); assert(stashname);
87566176
FC
1828 if (strnEQ(stashname, "CORE", 4))
1829 S_maybe_add_coresub(aTHX_ 0, gv, name, len);
44428a46
FC
1830 }
1831 }
1832 else if (len > 1) {
1833#ifndef EBCDIC
1834 if (*name > 'V' ) {
1835 NOOP;
1836 /* Nothing else to do.
1837 The compiler will probably turn the switch statement into a
1838 branch table. Make sure we avoid even that small overhead for
2ae25f5c
KW
1839 the common case of lower case variable names. (On EBCDIC
1840 platforms, we can't just do:
1841 if (NATIVE_TO_ASCII(*name) > NATIVE_TO_ASCII('V') ) {
1842 because cases like '\027' in the switch statement below are
1843 C1 (non-ASCII) controls on those platforms, so the remapping
1844 would make them larger than 'V')
1845 */
44428a46
FC
1846 } else
1847#endif
1848 {
1849 const char * const name2 = name + 1;
1850 switch (*name) {
1851 case 'A':
1852 if (strEQ(name2, "RGV")) {
1853 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1854 }
1855 else if (strEQ(name2, "RGVOUT")) {
1856 GvMULTI_on(gv);
1857 }
1858 break;
1859 case 'E':
1860 if (strnEQ(name2, "XPORT", 5))
1861 GvMULTI_on(gv);
1862 break;
1863 case 'I':
1864 if (strEQ(name2, "SA")) {
290a1700 1865 gv_magicalize_isa(gv);
44428a46
FC
1866 }
1867 break;
cc4c2da6
NC
1868 case 'S':
1869 if (strEQ(name2, "IG")) {
1870 HV *hv;
1871 I32 i;
d525a7b2
NC
1872 if (!PL_psig_name) {
1873 Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
a02a5408 1874 Newxz(PL_psig_pend, SIG_SIZE, int);
d525a7b2 1875 PL_psig_ptr = PL_psig_name + SIG_SIZE;
0bdedcb3
NC
1876 } else {
1877 /* I think that the only way to get here is to re-use an
1878 embedded perl interpreter, where the previous
1879 use didn't clean up fully because
1880 PL_perl_destruct_level was 0. I'm not sure that we
1881 "support" that, in that I suspect in that scenario
1882 there are sufficient other garbage values left in the
1883 interpreter structure that something else will crash
1884 before we get here. I suspect that this is one of
1885 those "doctor, it hurts when I do this" bugs. */
d525a7b2 1886 Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
0bdedcb3 1887 Zero(PL_psig_pend, SIG_SIZE, int);
cc4c2da6
NC
1888 }
1889 GvMULTI_on(gv);
1890 hv = GvHVn(gv);
a0714e2c 1891 hv_magic(hv, NULL, PERL_MAGIC_sig);
cc4c2da6 1892 for (i = 1; i < SIG_SIZE; i++) {
551405c4 1893 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
cc4c2da6
NC
1894 if (init)
1895 sv_setsv(*init, &PL_sv_undef);
cc4c2da6
NC
1896 }
1897 }
1898 break;
1899 case 'V':
1900 if (strEQ(name2, "ERSION"))
1901 GvMULTI_on(gv);
1902 break;
e5218da5
GA
1903 case '\003': /* $^CHILD_ERROR_NATIVE */
1904 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1905 goto magicalize;
1906 break;
cc4c2da6
NC
1907 case '\005': /* $^ENCODING */
1908 if (strEQ(name2, "NCODING"))
1909 goto magicalize;
1910 break;
9ebf26ad
FR
1911 case '\007': /* $^GLOBAL_PHASE */
1912 if (strEQ(name2, "LOBAL_PHASE"))
1913 goto ro_magicalize;
1914 break;
8561ea1d
FC
1915 case '\014': /* $^LAST_FH */
1916 if (strEQ(name2, "AST_FH"))
1917 goto ro_magicalize;
1918 break;
cde0cee5 1919 case '\015': /* $^MATCH */
960b831f
NC
1920 if (strEQ(name2, "ATCH")) {
1921 paren = RX_BUFF_IDX_CARET_FULLMATCH;
1922 goto storeparen;
1923 }
66230c86 1924 break;
cc4c2da6
NC
1925 case '\017': /* $^OPEN */
1926 if (strEQ(name2, "PEN"))
1927 goto magicalize;
1928 break;
cde0cee5 1929 case '\020': /* $^PREMATCH $^POSTMATCH */
960b831f
NC
1930 if (strEQ(name2, "REMATCH")) {
1931 paren = RX_BUFF_IDX_CARET_PREMATCH;
1932 goto storeparen;
1933 }
1934 if (strEQ(name2, "OSTMATCH")) {
1935 paren = RX_BUFF_IDX_CARET_POSTMATCH;
1936 goto storeparen;
1937 }
9ebf26ad 1938 break;
cc4c2da6
NC
1939 case '\024': /* ${^TAINT} */
1940 if (strEQ(name2, "AINT"))
1941 goto ro_magicalize;
1942 break;
7cebcbc0 1943 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
a0288114 1944 if (strEQ(name2, "NICODE"))
cc4c2da6 1945 goto ro_magicalize;
a0288114 1946 if (strEQ(name2, "TF8LOCALE"))
7cebcbc0 1947 goto ro_magicalize;
e07ea26a
NC
1948 if (strEQ(name2, "TF8CACHE"))
1949 goto magicalize;
cc4c2da6
NC
1950 break;
1951 case '\027': /* $^WARNING_BITS */
1952 if (strEQ(name2, "ARNING_BITS"))
1953 goto magicalize;
1954 break;
1955 case '1':
1956 case '2':
1957 case '3':
1958 case '4':
1959 case '5':
1960 case '6':
1961 case '7':
1962 case '8':
1963 case '9':
85e6fe83 1964 {
2fdbfb4d
AB
1965 /* Ensures that we have an all-digit variable, ${"1foo"} fails
1966 this test */
1967 /* This snippet is taken from is_gv_magical */
cc4c2da6
NC
1968 const char *end = name + len;
1969 while (--end > name) {
930867a8
BF
1970 if (!isDIGIT(*end))
1971 return addmg;
cc4c2da6 1972 }
99944878 1973 paren = grok_atou(name, NULL);
960b831f 1974 goto storeparen;
1d7c1841 1975 }
dc437b57 1976 }
93a17b20 1977 }
392db708
NC
1978 } else {
1979 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1980 be case '\0' in this switch statement (ie a default case) */
cc4c2da6 1981 switch (*name) {
6361f656 1982 case '&': /* $& */
960b831f
NC
1983 paren = RX_BUFF_IDX_FULLMATCH;
1984 goto sawampersand;
6361f656 1985 case '`': /* $` */
960b831f
NC
1986 paren = RX_BUFF_IDX_PREMATCH;
1987 goto sawampersand;
6361f656 1988 case '\'': /* $' */
960b831f
NC
1989 paren = RX_BUFF_IDX_POSTMATCH;
1990 sawampersand:
1a904fc8 1991#ifdef PERL_SAWAMPERSAND
a289ef89 1992 if (!(
cc4c2da6
NC
1993 sv_type == SVt_PVAV ||
1994 sv_type == SVt_PVHV ||
1995 sv_type == SVt_PVCV ||
1996 sv_type == SVt_PVFM ||
1997 sv_type == SVt_PVIO
d3b97530
DM
1998 )) { PL_sawampersand |=
1999 (*name == '`')
2000 ? SAWAMPERSAND_LEFT
2001 : (*name == '&')
2002 ? SAWAMPERSAND_MIDDLE
2003 : SAWAMPERSAND_RIGHT;
2004 }
1a904fc8 2005#endif
960b831f 2006 goto storeparen;
e91d8259
NC
2007 case '1': /* $1 */
2008 case '2': /* $2 */
2009 case '3': /* $3 */
2010 case '4': /* $4 */
2011 case '5': /* $5 */
2012 case '6': /* $6 */
2013 case '7': /* $7 */
2014 case '8': /* $8 */
2015 case '9': /* $9 */
960b831f
NC
2016 paren = *name - '0';
2017
2018 storeparen:
e91d8259
NC
2019 /* Flag the capture variables with a NULL mg_ptr
2020 Use mg_len for the array index to lookup. */
960b831f 2021 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, NULL, paren);
e91d8259 2022 break;
cc4c2da6 2023
6361f656 2024 case ':': /* $: */
c69033f2 2025 sv_setpv(GvSVn(gv),PL_chopset);
cc4c2da6
NC
2026 goto magicalize;
2027
6361f656 2028 case '?': /* $? */
ff0cee69 2029#ifdef COMPLEX_STATUS
c69033f2 2030 SvUPGRADE(GvSVn(gv), SVt_PVLV);
ff0cee69 2031#endif
cc4c2da6 2032 goto magicalize;
ff0cee69 2033
6361f656 2034 case '!': /* $! */
67261566 2035 GvMULTI_on(gv);
44a2ac75 2036 /* If %! has been used, automatically load Errno.pm. */
d2c93421 2037
ad64d0ec 2038 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
d2c93421 2039
44a2ac75 2040 /* magicalization must be done before require_tie_mod is called */
67261566 2041 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
ffdb8bcd 2042 {
44a2ac75 2043 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
930867a8 2044 addmg = FALSE;
ffdb8bcd 2045 }
d2c93421 2046
6cef1e77 2047 break;
6361f656
AB
2048 case '-': /* $- */
2049 case '+': /* $+ */
44a2ac75
YO
2050 GvMULTI_on(gv); /* no used once warnings here */
2051 {
44a2ac75 2052 AV* const av = GvAVn(gv);
ad64d0ec 2053 SV* const avc = (*name == '+') ? MUTABLE_SV(av) : NULL;
44a2ac75 2054
ad64d0ec
NC
2055 sv_magic(MUTABLE_SV(av), avc, PERL_MAGIC_regdata, NULL, 0);
2056 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
67261566 2057 if (avc)
44a2ac75 2058 SvREADONLY_on(GvSVn(gv));
44a2ac75 2059 SvREADONLY_on(av);
67261566
YO
2060
2061 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
213084e4 2062 {
192b9cd1 2063 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
930867a8 2064 addmg = FALSE;
213084e4 2065 }
67261566 2066
80305961 2067 break;
cc4c2da6 2068 }
6361f656
AB
2069 case '*': /* $* */
2070 case '#': /* $# */
9b387841 2071 if (sv_type == SVt_PV)
4f650b80 2072 /* diag_listed_as: $* is no longer supported */
9b387841 2073 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
4f650b80 2074 "$%c is no longer supported", *name);
8ae1fe26 2075 break;
b3ca2e83
NC
2076 case '\010': /* $^H */
2077 {
2078 HV *const hv = GvHVn(gv);
2079 hv_magic(hv, NULL, PERL_MAGIC_hints);
2080 }
2081 goto magicalize;
b82b06b8 2082 case '[': /* $[ */
7d69d4a6 2083 if ((sv_type == SVt_PV || sv_type == SVt_PVGV)
2846acbf 2084 && FEATURE_ARYBASE_IS_ENABLED) {
b82b06b8 2085 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
930867a8 2086 addmg = FALSE;
b82b06b8 2087 }
7d69d4a6 2088 else goto magicalize;
b82b06b8 2089 break;
cc4c2da6 2090 case '\023': /* $^S */
2fdbfb4d
AB
2091 ro_magicalize:
2092 SvREADONLY_on(GvSVn(gv));
924ba076 2093 /* FALLTHROUGH */
6361f656 2094 case '0': /* $0 */
6361f656
AB
2095 case '^': /* $^ */
2096 case '~': /* $~ */
2097 case '=': /* $= */
2098 case '%': /* $% */
2099 case '.': /* $. */
2100 case '(': /* $( */
2101 case ')': /* $) */
2102 case '<': /* $< */
2103 case '>': /* $> */
2104 case '\\': /* $\ */
2105 case '/': /* $/ */
4505a31f 2106 case '|': /* $| */
9cdac2a2 2107 case '$': /* $$ */
cc4c2da6
NC
2108 case '\001': /* $^A */
2109 case '\003': /* $^C */
2110 case '\004': /* $^D */
2111 case '\005': /* $^E */
2112 case '\006': /* $^F */
cc4c2da6
NC
2113 case '\011': /* $^I, NOT \t in EBCDIC */
2114 case '\016': /* $^N */
2115 case '\017': /* $^O */
2116 case '\020': /* $^P */
2117 case '\024': /* $^T */
2118 case '\027': /* $^W */
2119 magicalize:
ad64d0ec 2120 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
cc4c2da6 2121 break;
e521374c 2122
cc4c2da6 2123 case '\014': /* $^L */
76f68e9b 2124 sv_setpvs(GvSVn(gv),"\f");
463ee0b2 2125 break;
6361f656 2126 case ';': /* $; */
76f68e9b 2127 sv_setpvs(GvSVn(gv),"\034");
463ee0b2 2128 break;
6361f656 2129 case ']': /* $] */
cc4c2da6 2130 {
3638bf15 2131 SV * const sv = GvSV(gv);
d7aa5382 2132 if (!sv_derived_from(PL_patchlevel, "version"))
ac0e6a2f 2133 upg_version(PL_patchlevel, TRUE);
7d54d38e
SH
2134 GvSV(gv) = vnumify(PL_patchlevel);
2135 SvREADONLY_on(GvSV(gv));
2136 SvREFCNT_dec(sv);
93a17b20
LW
2137 }
2138 break;
cc4c2da6
NC
2139 case '\026': /* $^V */
2140 {
3638bf15 2141 SV * const sv = GvSV(gv);
f9be5ac8
DM
2142 GvSV(gv) = new_version(PL_patchlevel);
2143 SvREADONLY_on(GvSV(gv));
2144 SvREFCNT_dec(sv);
16070b82
GS
2145 }
2146 break;
ea238638
FC
2147 case 'a':
2148 case 'b':
dc3e91f6 2149 if (sv_type == SVt_PV)
ea238638 2150 GvMULTI_on(gv);
cc4c2da6 2151 }
79072805 2152 }
930867a8
BF
2153
2154 return addmg;
71c35c05
BF
2155}
2156
8c995aba
FC
2157/* If we do ever start using this later on in the file, we need to make
2158 sure we don’t accidentally use the wrong definition. */
2159#undef SvREADONLY_on
2160
070dc475
BF
2161/* This function is called when the stash already holds the GV of the magic
2162 * variable we're looking for, but we need to check that it has the correct
2163 * kind of magic. For example, if someone first uses $! and then %!, the
2164 * latter would end up here, and we add the Errno tie to the HASH slot of
2165 * the *! glob.
2166 */
2167PERL_STATIC_INLINE void
2168S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type)
2169{
2170 PERL_ARGS_ASSERT_MAYBE_MULTIMAGIC_GV;
2171
2172 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
2173 if (*name == '!')
2174 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
2175 else if (*name == '-' || *name == '+')
2176 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
2177 } else if (sv_type == SVt_PV) {
2178 if (*name == '*' || *name == '#') {
2179 /* diag_listed_as: $* is no longer supported */
2180 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED,
2181 WARN_SYNTAX),
2182 "$%c is no longer supported", *name);
2183 }
2184 }
2185 if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
2186 switch (*name) {
2187 case '[':
2188 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
2189 break;
2190#ifdef PERL_SAWAMPERSAND
2191 case '`':
2192 PL_sawampersand |= SAWAMPERSAND_LEFT;
2193 (void)GvSVn(gv);
2194 break;
2195 case '&':
2196 PL_sawampersand |= SAWAMPERSAND_MIDDLE;
2197 (void)GvSVn(gv);
2198 break;
2199 case '\'':
2200 PL_sawampersand |= SAWAMPERSAND_RIGHT;
2201 (void)GvSVn(gv);
2202 break;
2203#endif
2204 }
2205 }
2206}
2207
71c35c05
BF
2208GV *
2209Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
2210 const svtype sv_type)
2211{
71c35c05
BF
2212 const char *name = nambeg;
2213 GV *gv = NULL;
2214 GV**gvp;
2215 STRLEN len;
2216 HV *stash = NULL;
2217 const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
2218 const I32 no_expand = flags & GV_NOEXPAND;
2219 const I32 add = flags & ~GV_NOADD_MASK;
2220 const U32 is_utf8 = flags & SVf_UTF8;
930867a8 2221 bool addmg = cBOOL(flags & GV_ADDMG);
71c35c05
BF
2222 const char *const name_end = nambeg + full_len;
2223 U32 faking_it;
2224
2225 PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
2226
2227 /* If we have GV_NOTQUAL, the caller promised that
2228 * there is no stash, so we can skip the check.
2229 * Similarly if full_len is 0, since then we're
2230 * dealing with something like *{""} or ""->foo()
2231 */
2232 if ((flags & GV_NOTQUAL) || !full_len) {
2233 len = full_len;
2234 }
2235 else if (parse_gv_stash_name(&stash, &gv, &name, &len, nambeg, full_len, is_utf8, add)) {
2236 if (name == name_end) return gv;
2237 }
2238 else {
2239 return NULL;
2240 }
2241
2242 if (!stash && !find_default_stash(&stash, name, len, is_utf8, add, sv_type)) {
2243 return NULL;
2244 }
2245
2246 /* By this point we should have a stash and a name */
c161da64 2247 gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -(I32)len : (I32)len,add);
71c35c05
BF
2248 if (!gvp || *gvp == (const GV *)&PL_sv_undef) {
2249 if (addmg) gv = (GV *)newSV(0);
2250 else return NULL;
2251 }
2252 else gv = *gvp, addmg = 0;
2253 /* From this point on, addmg means gv has not been inserted in the
2254 symtab yet. */
2255
2256 if (SvTYPE(gv) == SVt_PVGV) {
c002ae9a
BF
2257 /* The GV already exists, so return it, but check if we need to do
2258 * anything else with it before that.
2259 */
71c35c05 2260 if (add) {
c002ae9a
BF
2261 /* This is the heuristic that handles if a variable triggers the
2262 * 'used only once' warning. If there's already a GV in the stash
2263 * with this name, then we assume that the variable has been used
2264 * before and turn its MULTI flag on.
2265 * It's a heuristic because it can easily be "tricked", like with
2266 * BEGIN { $a = 1; $::{foo} = *a }; () = $foo
2267 * not warning about $main::foo being used just once
2268 */
71c35c05
BF
2269 GvMULTI_on(gv);
2270 gv_init_svtype(gv, sv_type);
2271 /* You reach this path once the typeglob has already been created,
2272 either by the same or a different sigil. If this path didn't
2273 exist, then (say) referencing $! first, and %! second would
2274 mean that %! was not handled correctly. */
2275 if (len == 1 && stash == PL_defstash) {
070dc475 2276 maybe_multimagic_gv(gv, name, sv_type);
71c35c05
BF
2277 }
2278 else if (len == 3 && sv_type == SVt_PVAV
2279 && strnEQ(name, "ISA", 3)
2280 && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
2281 gv_magicalize_isa(gv);
2282 }
2283 return gv;
2284 } else if (no_init) {
2285 assert(!addmg);
2286 return gv;
c002ae9a
BF
2287 }
2288 /* If GV_NOEXPAND is true and what we got off the stash is a ref,
2289 * don't expand it to a glob. This is an optimization so that things
2290 * copying constants over, like Exporter, don't have to be rewritten
2291 * to take into account that you can store more than just globs in
2292 * stashes.
2293 */
2294 else if (no_expand && SvROK(gv)) {
71c35c05
BF
2295 assert(!addmg);
2296 return gv;
2297 }
2298
2299 /* Adding a new symbol.
2300 Unless of course there was already something non-GV here, in which case
2301 we want to behave as if there was always a GV here, containing some sort
2302 of subroutine.
2303 Otherwise we run the risk of creating things like GvIO, which can cause
2304 subtle bugs. eg the one that tripped up SQL::Translator */
2305
2306 faking_it = SvOK(gv);
2307
2308 if (add & GV_ADDWARN)
2309 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2310 "Had to create %"UTF8f" unexpectedly",
2311 UTF8fARG(is_utf8, name_end-nambeg, nambeg));
2312 gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8);
2313
9e5de6ae 2314 if ( isIDFIRST_lazy_if(name, is_utf8) && !ckWARN(WARN_ONCE) )
71c35c05
BF
2315 GvMULTI_on(gv) ;
2316
930867a8
BF
2317 /* First, store the gv in the symtab if we're adding magic,
2318 * but only for non-empty GVs
2319 */
2320#define GvEMPTY(gv) !(GvAV(gv) || GvHV(gv) || GvIO(gv) \
2321 || GvCV(gv) || (GvSV(gv) && SvOK(GvSV(gv))))
2322
2323 if ( addmg && !GvEMPTY(gv) ) {
2324 (void)hv_store(stash,name,len,(SV *)gv,0);
2325 }
2326
71c35c05 2327 /* set up magic where warranted */
930867a8
BF
2328 if ( gv_magicalize(gv, stash, name, len, addmg, sv_type) ) {
2329 /* See 23496c6 */
2330 if (GvEMPTY(gv)) {
2331 if ( GvSV(gv) && SvMAGICAL(GvSV(gv)) ) {
2332 /* The GV was and still is "empty", except that now
2333 * it has the magic flags turned on, so we want it
2334 * stored in the symtab.
2335 */
2336 (void)hv_store(stash,name,len,(SV *)gv,0);
2337 }
2338 else {
2339 /* Most likely the temporary GV created above */
2340 SvREFCNT_dec_NN(gv);
2341 gv = NULL;
2342 }
2343 }
2344 }
71c35c05 2345
e6066781 2346 if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type);
93a17b20 2347 return gv;
79072805
LW
2348}
2349
2350void
35a4481c 2351Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 2352{
ed60a868 2353 const char *name;
35a4481c 2354 const HV * const hv = GvSTASH(gv);
7918f24d
NC
2355
2356 PERL_ARGS_ASSERT_GV_FULLNAME4;
2357
666ea192 2358 sv_setpv(sv, prefix ? prefix : "");
a0288114 2359
52a6327b 2360 if (hv && (name = HvNAME(hv))) {
ed60a868
FC
2361 const STRLEN len = HvNAMELEN(hv);
2362 if (keepmain || strnNE(name, "main", len)) {
2363 sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES);
396482e1 2364 sv_catpvs(sv,"::");
ed60a868 2365 }
43693395 2366 }
ed60a868 2367 else sv_catpvs(sv,"__ANON__::");
04f3bf56 2368 sv_catsv(sv,sv_2mortal(newSVhek(GvNAME_HEK(gv))));
43693395
GS
2369}
2370
2371void
35a4481c 2372Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 2373{
099be4f1 2374 const GV * const egv = GvEGVx(gv);
7918f24d
NC
2375
2376 PERL_ARGS_ASSERT_GV_EFULLNAME4;
2377
46c461b5 2378 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
43693395
GS
2379}
2380
39a65960
DM
2381
2382/* recursively scan a stash and any nested stashes looking for entries
2383 * that need the "only used once" warning raised
2384 */
2385
79072805 2386void
51da40ed 2387Perl_gv_check(pTHX_ HV *stash)
79072805 2388{
eb578fdb 2389 I32 i;
463ee0b2 2390
7918f24d
NC
2391 PERL_ARGS_ASSERT_GV_CHECK;
2392
8990e307
LW
2393 if (!HvARRAY(stash))
2394 return;
90754377
DM
2395
2396 assert(SvOOK(stash));
90754377 2397
a0d0e21e 2398 for (i = 0; i <= (I32) HvMAX(stash); i++) {
e1ec3a88 2399 const HE *entry;
90754377 2400 /* mark stash is being scanned, to avoid recursing */
339441ef 2401 HvAUX(stash)->xhv_aux_flags |= HvAUXf_SCAN_STASH;
dc437b57 2402 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
eb578fdb 2403 GV *gv;
b7787f18 2404 HV *hv;
dc437b57 2405 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
159b6efe 2406 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
a0d0e21e 2407 {
90754377
DM
2408 if (hv != PL_defstash && hv != stash
2409 && !(SvOOK(hv)
2410 && (HvAUX(hv)->xhv_aux_flags & HvAUXf_SCAN_STASH))
2411 )
a0d0e21e
LW
2412 gv_check(hv); /* nested package */
2413 }
ecad31f0
BF
2414 else if ( *HeKEY(entry) != '_'
2415 && isIDFIRST_lazy_if(HeKEY(entry), HeUTF8(entry)) ) {
e1ec3a88 2416 const char *file;
159b6efe 2417 gv = MUTABLE_GV(HeVAL(entry));
55d729e4 2418 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
463ee0b2 2419 continue;
1d7c1841 2420 file = GvFILE(gv);
1d7c1841 2421 CopLINE_set(PL_curcop, GvLINE(gv));
1dc74fdb
FC
2422#ifdef USE_ITHREADS
2423 CopFILE(PL_curcop) = (char *)file; /* set for warning */
2424#else
2425 CopFILEGV(PL_curcop)
2426 = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
2427#endif
9014280d 2428 Perl_warner(aTHX_ packWARN(WARN_ONCE),
d0c0e7dd
FC
2429 "Name \"%"HEKf"::%"HEKf
2430 "\" used only once: possible typo",
2431 HEKfARG(HvNAME_HEK(stash)),
2432 HEKfARG(GvNAME_HEK(gv)));
463ee0b2 2433 }
79072805 2434 }
339441ef 2435 HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_SCAN_STASH;
79072805
LW
2436 }
2437}
2438
2439GV *
9cc50d5b 2440Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags)
79072805 2441{
9cc50d5b 2442 PERL_ARGS_ASSERT_NEWGVGEN_FLAGS;
b17a0679 2443 assert(!(flags & ~SVf_UTF8));
7918f24d 2444
b17a0679
FC
2445 return gv_fetchpv(Perl_form(aTHX_ "%"UTF8f"::_GEN_%ld",
2446 UTF8fARG(flags, strlen(pack), pack),
9cc50d5b
BF
2447 (long)PL_gensym++),
2448 GV_ADD, SVt_PVGV);
79072805
LW
2449}
2450
2451/* hopefully this is only called on local symbol table entries */
2452
2453GP*
864dbfa3 2454Perl_gp_ref(pTHX_ GP *gp)
79072805 2455{
1d7c1841 2456 if (!gp)
d4c19fe8 2457 return NULL;
79072805 2458 gp->gp_refcnt++;
44a8e56a 2459 if (gp->gp_cv) {
2460 if (gp->gp_cvgen) {
e1a479c5
BB
2461 /* If the GP they asked for a reference to contains
2462 a method cache entry, clear it first, so that we
2463 don't infect them with our cached entry */
e7881358 2464 SvREFCNT_dec_NN(gp->gp_cv);
601f1833 2465 gp->gp_cv = NULL;
44a8e56a 2466 gp->gp_cvgen = 0;
2467 }
44a8e56a 2468 }
79072805 2469 return gp;
79072805
LW
2470}
2471
2472void
864dbfa3 2473Perl_gp_free(pTHX_ GV *gv)
79072805 2474{
79072805 2475 GP* gp;
b0d55c99 2476 int attempts = 100;
79072805 2477
f7877b28 2478 if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
79072805 2479 return;
f248d071 2480 if (gp->gp_refcnt == 0) {
9b387841
NC
2481 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2482 "Attempt to free unreferenced glob pointers"
2483 pTHX__FORMAT pTHX__VALUE);
79072805
LW
2484 return;
2485 }
4571f4a7 2486 if (gp->gp_refcnt > 1) {
bc81b34d 2487 borrowed:
748a9306
LW
2488 if (gp->gp_egv == gv)
2489 gp->gp_egv = 0;
4571f4a7 2490 gp->gp_refcnt--;
c43ae56f 2491 GvGP_set(gv, NULL);
79072805 2492 return;
748a9306 2493 }
79072805 2494
b0d55c99
FC
2495 while (1) {
2496 /* Copy and null out all the glob slots, so destructors do not see
2497 freed SVs. */
2498 HEK * const file_hek = gp->gp_file_hek;
2499 SV * const sv = gp->gp_sv;
2500 AV * const av = gp->gp_av;
2501 HV * const hv = gp->gp_hv;
2502 IO * const io = gp->gp_io;
2503 CV * const cv = gp->gp_cv;
2504 CV * const form = gp->gp_form;
2505
2506 gp->gp_file_hek = NULL;
2507 gp->gp_sv = NULL;
2508 gp->gp_av = NULL;
2509 gp->gp_hv = NULL;
2510 gp->gp_io = NULL;
2511 gp->gp_cv = NULL;
2512 gp->gp_form = NULL;
2513
2514 if (file_hek)
2515 unshare_hek(file_hek);
2516
2517 SvREFCNT_dec(sv);
2518 SvREFCNT_dec(av);
2519 /* FIXME - another reference loop GV -> symtab -> GV ?
2520 Somehow gp->gp_hv can end up pointing at freed garbage. */
2521 if (hv && SvTYPE(hv) == SVt_PVHV) {
c2242065 2522 const HEK *hvname_hek = HvNAME_HEK(hv);
10bafe90 2523 DEBUG_o(Perl_deb(aTHX_ "gp_free clearing PL_stashcache for '%"HEKf"'\n", HEKfARG(hvname_hek)));
c2242065 2524 if (PL_stashcache && hvname_hek)
0ca9877d 2525 (void)hv_deletehek(PL_stashcache, hvname_hek, G_DISCARD);
b0d55c99
FC
2526 SvREFCNT_dec(hv);
2527 }
96d7c888
FC
2528 if (io && SvREFCNT(io) == 1 && IoIFP(io)
2529 && (IoTYPE(io) == IoTYPE_WRONLY ||
2530 IoTYPE(io) == IoTYPE_RDWR ||
2531 IoTYPE(io) == IoTYPE_APPEND)
2532 && ckWARN_d(WARN_IO)
2533 && IoIFP(io) != PerlIO_stdin()
2534 && IoIFP(io) != PerlIO_stdout()
2535 && IoIFP(io) != PerlIO_stderr()
2536 && !(IoFLAGS(io) & IOf_FAKE_DIRP))
2537 io_close(io, gv, FALSE, TRUE);
b0d55c99
FC
2538 SvREFCNT_dec(io);
2539 SvREFCNT_dec(cv);
2540 SvREFCNT_dec(form);
2541
bc81b34d
FC
2542 /* Possibly reallocated by a destructor */
2543 gp = GvGP(gv);
2544
b0d55c99
FC
2545 if (!gp->gp_file_hek
2546 && !gp->gp_sv
2547 && !gp->gp_av
2548 && !gp->gp_hv
2549 && !gp->gp_io
2550 && !gp->gp_cv
2551 && !gp->gp_form) break;
2552
2553 if (--attempts == 0) {
2554 Perl_die(aTHX_
2555 "panic: gp_free failed to free glob pointer - "
2556 "something is repeatedly re-creating entries"
2557 );
2558 }
13207a71 2559 }
748a9306 2560
bc81b34d
FC
2561 /* Possibly incremented by a destructor doing glob assignment */
2562 if (gp->gp_refcnt > 1) goto borrowed;
79072805 2563 Safefree(gp);
c43ae56f 2564 GvGP_set(gv, NULL);
79072805
LW
2565}
2566
d460ef45
NIS
2567int
2568Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
2569{
53c1dcc0
AL
2570 AMT * const amtp = (AMT*)mg->mg_ptr;
2571 PERL_UNUSED_ARG(sv);
dd374669 2572
7918f24d
NC
2573 PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
2574
d460ef45
NIS
2575 if (amtp && AMT_AMAGIC(amtp)) {
2576 int i;
2577 for (i = 1; i < NofAMmeth; i++) {
53c1dcc0 2578 CV * const cv = amtp->table[i];
b37c2d43 2579 if (cv) {
e7881358 2580 SvREFCNT_dec_NN(MUTABLE_SV(cv));
601f1833 2581 amtp->table[i] = NULL;
d460ef45
NIS
2582 }
2583 }
2584 }
2585 return 0;
2586}
2587
a0d0e21e 2588/* Updates and caches the CV's */
c3a9a790
RGS
2589/* Returns:
2590 * 1 on success and there is some overload
2591 * 0 if there is no overload
2592 * -1 if some error occurred and it couldn't croak
2593 */
a0d0e21e 2594
c3a9a790 2595int
242f8760 2596Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
a0d0e21e 2597{
ad64d0ec 2598 MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
a6006777 2599 AMT amt;
9b439311 2600 const struct mro_meta* stash_meta = HvMROMETA(stash);
e1a479c5 2601 U32 newgen;
a0d0e21e 2602
7918f24d
NC
2603 PERL_ARGS_ASSERT_GV_AMUPDATE;
2604
9b439311 2605 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
14899595
NC
2606 if (mg) {
2607 const AMT * const amtp = (AMT*)mg->mg_ptr;
66978156 2608 if (amtp->was_ok_sub == newgen) {
8c34e50d 2609 return AMT_AMAGIC(amtp) ? 1 : 0;
14899595 2610 }
ad64d0ec 2611 sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
14899595 2612 }
a0d0e21e 2613
bfcb3514 2614 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
a0d0e21e 2615
d460ef45 2616 Zero(&amt,1,AMT);
e1a479c5 2617 amt.was_ok_sub = newgen;
a6006777 2618 amt.fallback = AMGfallNO;
2619 amt.flags = 0;
2620
a6006777 2621 {
8c34e50d
FC
2622 int filled = 0;
2623 int i;
3d147ac2
DM
2624 bool deref_seen = 0;
2625
a6006777 2626
3866ea3b 2627 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
a6006777 2628
89ffc314 2629 /* Try to find via inheritance. */
e6919483 2630 GV *gv = gv_fetchmeth_pvn(stash, PL_AMG_names[0], 2, -1, 0);
3866ea3b 2631 SV * const sv = gv ? GvSV(gv) : NULL;
53c1dcc0 2632 CV* cv;
89ffc314
IZ
2633
2634 if (!gv)
3866ea3b
FC
2635 {
2636 if (!gv_fetchmeth_pvn(stash, "((", 2, -1, 0))
8c34e50d 2637 goto no_table;
3866ea3b
FC
2638 }
2639#ifdef PERL_DONT_CREATE_GVSV
2640 else if (!sv) {
6f207bd3 2641 NOOP; /* Equivalent to !SvTRUE and !SvOK */
3866ea3b
FC
2642 }
2643#endif
79c9643d
JL
2644 else if (SvTRUE(sv))
2645 /* don't need to set overloading here because fallback => 1
2646 * is the default setting for classes without overloading */
89ffc314 2647 amt.fallback=AMGfallYES;
79c9643d
JL
2648 else if (SvOK(sv)) {
2649 amt.fallback=AMGfallNEVER;
386a5489 2650 filled = 1;
386a5489 2651 }
79c9643d 2652 else {
386a5489 2653 filled = 1;
386a5489 2654 }
a6006777 2655
3d147ac2 2656 assert(SvOOK(stash));
3d147ac2 2657 /* initially assume the worst */
339441ef 2658 HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_NO_DEREF;
3d147ac2 2659
8c34e50d 2660 for (i = 1; i < NofAMmeth; i++) {
6136c704 2661 const char * const cooky = PL_AMG_names[i];
32251b26 2662 /* Human-readable form, for debugging: */
8c34e50d 2663 const char * const cp = AMG_id2name(i);
d279ab82 2664 const STRLEN l = PL_AMG_namelens[i];
89ffc314 2665
a0288114 2666 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
bfcb3514 2667 cp, HvNAME_get(stash)) );
611c1e95
IZ
2668 /* don't fill the cache while looking up!
2669 Creation of inheritance stubs in intermediate packages may
2670 conflict with the logic of runtime method substitution.
2671 Indeed, for inheritance A -> B -> C, if C overloads "+0",
2672 then we could have created stubs for "(+0" in A and C too.
2673 But if B overloads "bool", we may want to use it for
2674 numifying instead of C's "+0". */
8c34e50d 2675 gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
46fc3d4c 2676 cv = 0;
c3ad4e54
FC
2677 if (gv && (cv = GvCV(gv)) && CvHASGV(cv)) {
2678 const HEK * const gvhek =
2679 CvNAMED(cv) ? CvNAME_HEK(cv) : GvNAME_HEK(CvGV(cv));
2680 const HEK * const stashek =
2681 HvNAME_HEK(CvNAMED(cv) ? CvSTASH(cv) : GvSTASH(CvGV(cv)));
2682 if (HEK_LEN(gvhek) == 3 && strEQ(HEK_KEY(gvhek), "nil")
2683 && stashek && HEK_LEN(stashek) == 8
2684 && strEQ(HEK_KEY(stashek), "overload")) {
611c1e95
IZ
2685 /* This is a hack to support autoloading..., while
2686 knowing *which* methods were declared as overloaded. */
44a8e56a 2687 /* GvSV contains the name of the method. */
6136c704 2688 GV *ngv = NULL;
c69033f2 2689 SV *gvsv = GvSV(gv);
a0288114
AL
2690
2691 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
2692 "\" for overloaded \"%s\" in package \"%.256s\"\n",
f0e9f182 2693 (void*)GvSV(gv), cp, HvNAME(stash)) );
c69033f2 2694 if (!gvsv || !SvPOK(gvsv)
7f415459 2695 || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0)))
dc848c6f 2696 {
a0288114 2697 /* Can be an import stub (created by "can"). */
242f8760 2698 if (destructing) {
c3a9a790 2699 return -1;
242f8760
RGS
2700 }
2701 else {
d66cca07
BF
2702 const SV * const name = (gvsv && SvPOK(gvsv))
2703 ? gvsv
2704 : newSVpvs_flags("???", SVs_TEMP);
dcbac5bb 2705 /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */
d66cca07
BF
2706 Perl_croak(aTHX_ "%s method \"%"SVf256
2707 "\" overloading \"%s\" "\
d0c0e7dd 2708 "in package \"%"HEKf256"\"",
242f8760
RGS
2709 (GvCVGEN(gv) ? "Stub found while resolving"
2710 : "Can't resolve"),
d66cca07 2711 SVfARG(name), cp,
d0c0e7dd 2712 HEKfARG(
d66cca07 2713 HvNAME_HEK(stash)
d0c0e7dd 2714 ));
242f8760 2715 }
44a8e56a 2716 }
dc848c6f 2717 cv = GvCV(gv = ngv);
44a8e56a 2718 }
b464bac0 2719 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
bfcb3514 2720 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
44a8e56a 2721 GvNAME(CvGV(cv))) );
2722 filled = 1;
611c1e95 2723 } else if (gv) { /* Autoloaded... */
ea726b52 2724 cv = MUTABLE_CV(gv);
611c1e95 2725 filled = 1;
44a8e56a 2726 }
ea726b52 2727 amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
3d147ac2
DM
2728
2729 if (gv) {
2730 switch (i) {
2731 case to_sv_amg:
2732 case to_av_amg:
2733 case to_hv_amg:
2734 case to_gv_amg:
2735 case to_cv_amg:
2736 case nomethod_amg:
2737 deref_seen = 1;
2738 break;
2739 }
2740 }
a0d0e21e 2741 }
3d147ac2 2742 if (!deref_seen)
45479970
DM
2743 /* none of @{} etc overloaded; we can do $obj->[N] quicker.
2744 * NB - aux var invalid here, HvARRAY() could have been
2745 * reallocated since it was assigned to */
2746 HvAUX(stash)->xhv_aux_flags |= HvAUXf_NO_DEREF;
3d147ac2 2747
a0d0e21e 2748 if (filled) {
a6006777 2749 AMT_AMAGIC_on(&amt);
ad64d0ec 2750 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
14befaf4 2751 (char*)&amt, sizeof(AMT));
8c34e50d 2752 return TRUE;
a0d0e21e
LW
2753 }
2754 }
a6006777 2755 /* Here we have no table: */
8c34e50d 2756 no_table:
a6006777 2757 AMT_AMAGIC_off(&amt);
ad64d0ec 2758 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
14befaf4 2759 (char*)&amt, sizeof(AMTS));
c3a9a790 2760 return 0;
a0d0e21e
LW
2761}
2762
32251b26
IZ
2763
2764CV*
2765Perl_gv_handler(pTHX_ HV *stash, I32 id)
2766{
3f8f4626 2767 MAGIC *mg;
32251b26 2768 AMT *amtp;
e1a479c5 2769 U32 newgen;
9b439311 2770 struct mro_meta* stash_meta;
32251b26 2771
bfcb3514 2772 if (!stash || !HvNAME_get(stash))
601f1833 2773 return NULL;
e1a479c5 2774
9b439311
BB
2775 stash_meta = HvMROMETA(stash);
2776 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
e1a479c5 2777
ad64d0ec 2778 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
32251b26
IZ
2779 if (!mg) {
2780 do_update:
8c34e50d 2781 if (Gv_AMupdate(stash, 0) == -1)
242f8760 2782 return NULL;
ad64d0ec 2783 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
32251b26 2784 }
a9fd4e40 2785 assert(mg);
32251b26 2786 amtp = (AMT*)mg->mg_ptr;
66978156 2787 if ( amtp->was_ok_sub != newgen )
32251b26 2788 goto do_update;
3ad83ce7 2789 if (AMT_AMAGIC(amtp)) {
b7787f18 2790 CV * const ret = amtp->table[id];
3ad83ce7
AMS
2791 if (ret && isGV(ret)) { /* Autoloading stab */
2792 /* Passing it through may have resulted in a warning
2793 "Inherited AUTOLOAD for a non-method deprecated", since
2794 our caller is going through a function call, not a method call.
2795 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
890ce7af 2796 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
3ad83ce7
AMS
2797
2798 if (gv && GvCV(gv))
2799 return GvCV(gv);
2800 }
2801 return ret;
2802 }
a0288114 2803
601f1833 2804 return NULL;
32251b26
IZ
2805}
2806
2807
6f1401dc
DM
2808/* Implement tryAMAGICun_MG macro.
2809 Do get magic, then see if the stack arg is overloaded and if so call it.
2810 Flags:
2811 AMGf_set return the arg using SETs rather than assigning to
2812 the targ
2813 AMGf_numeric apply sv_2num to the stack arg.
2814*/
2815
2816bool
2817Perl_try_amagic_un(pTHX_ int method, int flags) {
6f1401dc
DM
2818 dSP;
2819 SV* tmpsv;
2820 SV* const arg = TOPs;
2821
2822 SvGETMAGIC(arg);
2823
9f8bf298
NC
2824 if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
2825 AMGf_noright | AMGf_unary))) {
6f1401dc
DM
2826 if (flags & AMGf_set) {
2827 SETs(tmpsv);
2828 }
2829 else {
2830 dTARGET;
2831 if (SvPADMY(TARG)) {
2832 sv_setsv(TARG, tmpsv);
2833 SETTARG;
2834 }
2835 else
2836 SETs(tmpsv);
2837 }
2838 PUTBACK;
2839 return TRUE;
2840 }
2841
2842 if ((flags & AMGf_numeric) && SvROK(arg))
2843 *sp = sv_2num(arg);
2844 return FALSE;
2845}
2846
2847
2848/* Implement tryAMAGICbin_MG macro.
2849 Do get magic, then see if the two stack args are overloaded and if so
2850 call it.
2851 Flags:
2852 AMGf_set return the arg using SETs rather than assigning to
2853 the targ
2854 AMGf_assign op may be called as mutator (eg +=)
2855 AMGf_numeric apply sv_2num to the stack arg.
2856*/
2857
2858bool
2859Perl_try_amagic_bin(pTHX_ int method, int flags) {
6f1401dc
DM
2860 dSP;
2861 SV* const left = TOPm1s;
2862 SV* const right = TOPs;
2863
2864 SvGETMAGIC(left);
2865 if (left != right)
2866 SvGETMAGIC(right);
2867
2868 if (SvAMAGIC(left) || SvAMAGIC(right)) {
2869 SV * const tmpsv = amagic_call(left, right, method,
2870 ((flags & AMGf_assign) && opASSIGN ? AMGf_assign: 0));
2871 if (tmpsv) {
2872 if (flags & AMGf_set) {
2873 (void)POPs;
2874 SETs(tmpsv);
2875 }
2876 else {
2877 dATARGET;
2878 (void)POPs;
2879 if (opASSIGN || SvPADMY(TARG)) {
2880 sv_setsv(TARG, tmpsv);
2881 SETTARG;
2882 }
2883 else
2884 SETs(tmpsv);
2885 }
2886 PUTBACK;
2887 return TRUE;
2888 }
2889 }
75ea7a12
FC
2890 if(left==right && SvGMAGICAL(left)) {
2891 SV * const left = sv_newmortal();
2892 *(sp-1) = left;
2893 /* Print the uninitialized warning now, so it includes the vari-
2894 able name. */
2895 if (!SvOK(right)) {
2896 if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right);
2897 sv_setsv_flags(left, &PL_sv_no, 0);
2898 }
2899 else sv_setsv_flags(left, right, 0);
2900 SvGETMAGIC(right);
2901 }
6f1401dc 2902 if (flags & AMGf_numeric) {
75ea7a12
FC
2903 if (SvROK(TOPm1s))
2904 *(sp-1) = sv_2num(TOPm1s);
6f1401dc
DM
2905 if (SvROK(right))
2906 *sp = sv_2num(right);
2907 }
2908 return FALSE;
2909}
2910
25a9ffce
NC
2911SV *
2912Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
2913 SV *tmpsv = NULL;
3d147ac2 2914 HV *stash;
25a9ffce
NC
2915
2916 PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
2917
3d147ac2
DM
2918 if (!SvAMAGIC(ref))
2919 return ref;
2920 /* return quickly if none of the deref ops are overloaded */
2921 stash = SvSTASH(SvRV(ref));
2922 assert(SvOOK(stash));
2923 if (HvAUX(stash)->xhv_aux_flags & HvAUXf_NO_DEREF)
2924 return ref;
2925
2926 while ((tmpsv = amagic_call(ref, &PL_sv_undef, method,
25a9ffce
NC
2927 AMGf_noright | AMGf_unary))) {
2928 if (!SvROK(tmpsv))
2929 Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
2930 if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
2931 /* Bail out if it returns us the same reference. */
2932 return tmpsv;
2933 }
2934 ref = tmpsv;
3d147ac2
DM
2935 if (!SvAMAGIC(ref))
2936 break;
25a9ffce
NC
2937 }
2938 return tmpsv ? tmpsv : ref;
2939}
6f1401dc 2940
8d569291
FC
2941bool
2942Perl_amagic_is_enabled(pTHX_ int method)
2943{
2944 SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
2945
2946 assert(PL_curcop->cop_hints & HINT_NO_AMAGIC);
2947
2948 if ( !lex_mask || !SvOK(lex_mask) )
2949 /* overloading lexically disabled */
2950 return FALSE;
2951 else if ( lex_mask && SvPOK(lex_mask) ) {
2952 /* we have an entry in the hints hash, check if method has been
2953 * masked by overloading.pm */
2954 STRLEN len;
2955 const int offset = method / 8;
2956 const int bit = method % 8;
2957 char *pv = SvPV(lex_mask, len);
2958
2959 /* Bit set, so this overloading operator is disabled */
2960 if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
2961 return FALSE;
2962 }
2963 return TRUE;
2964}
2965
a0d0e21e 2966SV*
864dbfa3 2967Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
a0d0e21e 2968{
27da23d5 2969 dVAR;
b267980d 2970 MAGIC *mg;
9c5ffd7c 2971 CV *cv=NULL;
a0d0e21e 2972 CV **cvp=NULL, **ocvp=NULL;
9c5ffd7c 2973 AMT *amtp=NULL, *oamtp=NULL;
b464bac0
AL
2974 int off = 0, off1, lr = 0, notfound = 0;
2975 int postpr = 0, force_cpy = 0;
2976 int assign = AMGf_assign & flags;
2977 const int assignshift = assign ? 1 : 0;
bf5522a1 2978 int use_default_op = 0;
67288365 2979 int force_scalar = 0;
497b47a8
JH
2980#ifdef DEBUGGING
2981 int fl=0;
497b47a8 2982#endif
25716404 2983 HV* stash=NULL;
7918f24d
NC
2984
2985 PERL_ARGS_ASSERT_AMAGIC_CALL;
2986
e46c382e 2987 if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
8d569291 2988 if (!amagic_is_enabled(method)) return NULL;
e46c382e
YK
2989 }
2990
a0d0e21e 2991 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
0a2c84ab 2992 && (stash = SvSTASH(SvRV(left))) && Gv_AMG(stash)
ad64d0ec 2993 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
b267980d 2994 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 2995 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
d4c19fe8 2996 : NULL))
b267980d 2997 && ((cv = cvp[off=method+assignshift])
748a9306
LW
2998 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2999 * usual method */
497b47a8
JH
3000 (
3001#ifdef DEBUGGING
3002 fl = 1,
a0288114 3003#endif
497b47a8 3004 cv = cvp[off=method])))) {
a0d0e21e
LW
3005 lr = -1; /* Call method for left argument */
3006 } else {
3007 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
3008 int logic;
3009
3010 /* look for substituted methods */
ee239bfe 3011 /* In all the covered cases we should be called with assign==0. */
a0d0e21e
LW
3012 switch (method) {
3013 case inc_amg:
ee239bfe
IZ
3014 force_cpy = 1;
3015 if ((cv = cvp[off=add_ass_amg])
3016 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
3280af22 3017 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e
LW
3018 }
3019 break;
3020 case dec_amg:
ee239bfe
IZ
3021 force_cpy = 1;
3022 if ((cv = cvp[off = subtr_ass_amg])
3023 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
3280af22 3024 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e
LW
3025 }
3026 break;
3027 case bool__amg:
3028 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
3029 break;
3030 case numer_amg:
3031 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
3032 break;
3033 case string_amg:
3034 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
3035 break;
b7787f18
AL
3036 case not_amg:
3037 (void)((cv = cvp[off=bool__amg])
3038 || (cv = cvp[off=numer_amg])
3039 || (cv = cvp[off=string_amg]));
2ab54efd
MB
3040 if (cv)
3041 postpr = 1;
b7787f18 3042 break;
748a9306
LW
3043 case copy_amg:
3044 {
76e3520e
GS
3045 /*
3046 * SV* ref causes confusion with the interpreter variable of
3047 * the same name
3048 */
890ce7af 3049 SV* const tmpRef=SvRV(left);
76e3520e 3050 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
fc36a67e 3051 /*
3052 * Just to be extra cautious. Maybe in some
3053 * additional cases sv_setsv is safe, too.
3054 */
890ce7af 3055 SV* const newref = newSVsv(tmpRef);
748a9306 3056 SvOBJECT_on(newref);
a1cd65be
FC
3057 /* No need to do SvAMAGIC_on here, as SvAMAGIC macros
3058 delegate to the stash. */
85fbaab2 3059 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
748a9306
LW
3060 return newref;
3061 }
3062 }
3063 break;
a0d0e21e 3064 case abs_amg:
b267980d 3065 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
a0d0e21e 3066 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
890ce7af 3067 SV* const nullsv=sv_2mortal(newSViv(0));
a0d0e21e 3068 if (off1==lt_amg) {
890ce7af 3069 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e
LW
3070 lt_amg,AMGf_noright);
3071 logic = SvTRUE(lessp);
3072 } else {
890ce7af 3073 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e
LW
3074 ncmp_amg,AMGf_noright);
3075 logic = (SvNV(lessp) < 0);
3076 }
3077 if (logic) {
3078 if (off==subtr_amg) {
3079 right = left;
748a9306 3080 left = nullsv;
a0d0e21e
LW
3081 lr = 1;
3082 }
3083 } else {
3084 return left;
3085 }
3086 }
3087 break;
3088 case neg_amg:
155aba94 3089 if ((cv = cvp[off=subtr_amg])) {
a0d0e21e
LW
3090 right = left;
3091 left = sv_2mortal(newSViv(0));
3092 lr = 1;
3093 }
3094 break;
f216259d 3095 case int_amg:
f5284f61 3096 case iter_amg: /* XXXX Eventually should do to_gv. */
c4c7412c 3097 case ftest_amg: /* XXXX Eventually should do to_gv. */
d4b87e75 3098 case regexp_amg:
b267980d
NIS
3099 /* FAIL safe */
3100 return NULL; /* Delegate operation to standard mechanisms. */
81d52ecd 3101
f5284f61
IZ
3102 case to_sv_amg:
3103 case to_av_amg:
3104 case to_hv_amg:
3105 case to_gv_amg:
3106 case to_cv_amg:
3107 /* FAIL safe */
b267980d 3108 return left; /* Delegate operation to standard mechanisms. */
81d52ecd 3109
a0d0e21e
LW
3110 default:
3111 goto not_found;
3112 }
3113 if (!cv) goto not_found;
3114 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
0a2c84ab 3115 && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash)
ad64d0ec 3116 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
b267980d 3117 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 3118 ? (amtp = (AMT*)mg->mg_ptr)->table
d4c19fe8 3119 : NULL))
69815d08
RS
3120 && (cv = cvp[off=method])) { /* Method for right
3121 * argument found */
3122 lr=1;
bf5522a1
MB
3123 } else if (((cvp && amtp->fallback > AMGfallNEVER)
3124 || (ocvp && oamtp->fallback > AMGfallNEVER))
a0d0e21e
LW
3125 && !(flags & AMGf_unary)) {
3126 /* We look for substitution for
3127 * comparison operations and
fc36a67e 3128 * concatenation */
a0d0e21e
LW
3129 if (method==concat_amg || method==concat_ass_amg
3130 || method==repeat_amg || method==repeat_ass_amg) {
3131 return NULL; /* Delegate operation to string conversion */
3132 }
3133 off = -1;
3134 switch (method) {
3135 case lt_amg:
3136 case le_amg:
3137 case gt_amg:
3138 case ge_amg:
3139 case eq_amg:
3140 case ne_amg:
2ab54efd
MB
3141 off = ncmp_amg;
3142 break;
a0d0e21e
LW
3143 case slt_amg:
3144 case sle_amg:
3145 case sgt_amg:
3146 case sge_amg:
3147 case seq_amg:
3148 case sne_amg:
2ab54efd
MB
3149 off = scmp_amg;
3150 break;
a0d0e21e 3151 }
bf5522a1
MB
3152 if (off != -1) {
3153 if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
3154 cv = ocvp[off];
3155 lr = -1;
3156 }
3157 if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
3158 cv = cvp[off];
3159 lr = 1;
3160 }
3161 }
3162 if (cv)
2ab54efd
MB
3163 postpr = 1;
3164 else
3165 goto not_found;
a0d0e21e 3166 } else {
a6006777 3167 not_found: /* No method found, either report or croak */
b267980d
NIS
3168 switch (method) {
3169 case to_sv_amg:
3170 case to_av_amg:
3171 case to_hv_amg:
3172 case to_gv_amg:
3173 case to_cv_amg:
3174 /* FAIL safe */
3175 return left; /* Delegate operation to standard mechanisms. */
b267980d 3176 }
a0d0e21e
LW
3177 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
3178 notfound = 1; lr = -1;
3179 } else if (cvp && (cv=cvp[nomethod_amg])) {
3180 notfound = 1; lr = 1;
bf5522a1
MB
3181 } else if ((use_default_op =
3182 (!ocvp || oamtp->fallback >= AMGfallYES)
3183 && (!cvp || amtp->fallback >= AMGfallYES))
3184 && !DEBUG_o_TEST) {
4cc0ca18
NC
3185 /* Skip generating the "no method found" message. */
3186 return NULL;
a0d0e21e 3187 } else {
46fc3d4c 3188 SV *msg;
774d564b 3189 if (off==-1) off=method;
b267980d 3190 msg = sv_2mortal(Perl_newSVpvf(aTHX_
d66cca07
BF
3191 "Operation \"%s\": no method found,%sargument %s%"SVf"%s%"SVf,
3192 AMG_id2name(method + assignshift),
3193 (flags & AMGf_unary ? " " : "\n\tleft "),
3194 SvAMAGIC(left)?
3195 "in overloaded package ":
3196 "has no overloaded magic",
3197 SvAMAGIC(left)?
3198 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))):
3199 SVfARG(&PL_sv_no),
3200 SvAMAGIC(right)?
3201 ",\n\tright argument in overloaded package ":
3202 (flags & AMGf_unary
3203 ? ""
3204 : ",\n\tright argument has no overloaded magic"),
3205 SvAMAGIC(right)?
3206 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))):
3207 SVfARG(&PL_sv_no)));
bf5522a1 3208 if (use_default_op) {
d66cca07 3209 DEBUG_o( Perl_deb(aTHX_ "%"SVf, SVfARG(msg)) );
a0d0e21e 3210 } else {
be2597df 3211 Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
a0d0e21e
LW
3212 }
3213 return NULL;
3214 }
ee239bfe 3215 force_cpy = force_cpy || assign;
a0d0e21e
LW
3216 }
3217 }
67288365
JL
3218
3219 switch (method) {
3220 /* in these cases, we're calling '+' or '-' as a fallback for a ++ or --
3221 * operation. we need this to return a value, so that it can be assigned
3222 * later on, in the postpr block (case inc_amg/dec_amg), even if the
3223 * increment or decrement was itself called in void context */
3224 case inc_amg:
3225 if (off == add_amg)
3226 force_scalar = 1;
3227 break;
3228 case dec_amg:
3229 if (off == subtr_amg)
3230 force_scalar = 1;
3231 break;
3232 /* in these cases, we're calling an assignment variant of an operator
3233 * (+= rather than +, for instance). regardless of whether it's a
3234 * fallback or not, it always has to return a value, which will be
3235 * assigned to the proper variable later */
3236 case add_amg:
3237 case subtr_amg:
3238 case mult_amg:
3239 case div_amg:
3240 case modulo_amg:
3241 case pow_amg:
3242 case lshift_amg:
3243 case rshift_amg:
3244 case repeat_amg:
3245 case concat_amg:
3246 case band_amg:
3247 case bor_amg:
3248 case bxor_amg:
3249 if (assign)
3250 force_scalar = 1;
3251 break;
3252 /* the copy constructor always needs to return a value */
3253 case copy_amg:
3254 force_scalar = 1;
3255 break;
3256 /* because of the way these are implemented (they don't perform the
3257 * dereferencing themselves, they return a reference that perl then
3258 * dereferences later), they always have to be in scalar context */
3259 case to_sv_amg:
3260 case to_av_amg:
3261 case to_hv_amg:
3262 case to_gv_amg:
3263 case to_cv_amg:
3264 force_scalar = 1;
3265 break;
3266 /* these don't have an op of their own; they're triggered by their parent
3267 * op, so the context there isn't meaningful ('$a and foo()' in void
3268 * context still needs to pass scalar context on to $a's bool overload) */
3269 case bool__amg:
3270 case numer_amg:
3271 case string_amg:
3272 force_scalar = 1;
3273 break;
3274 }
3275
497b47a8 3276#ifdef DEBUGGING
a0d0e21e 3277 if (!notfound) {
497b47a8 3278 DEBUG_o(Perl_deb(aTHX_
d66cca07 3279 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %"SVf"%s\n",
497b47a8
JH
3280 AMG_id2name(off),
3281 method+assignshift==off? "" :
a0288114 3282 " (initially \"",
497b47a8
JH
3283 method+assignshift==off? "" :
3284 AMG_id2name(method+assignshift),
a0288114 3285 method+assignshift==off? "" : "\")",
497b47a8
JH
3286 flags & AMGf_unary? "" :
3287 lr==1 ? " for right argument": " for left argument",
3288 flags & AMGf_unary? " for argument" : "",
d66cca07 3289 stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)),
497b47a8 3290 fl? ",\n\tassignment variant used": "") );
ee239bfe 3291 }
497b47a8 3292#endif
748a9306
LW
3293 /* Since we use shallow copy during assignment, we need
3294 * to dublicate the contents, probably calling user-supplied
3295 * version of copy operator
3296 */
ee239bfe
IZ
3297 /* We need to copy in following cases:
3298 * a) Assignment form was called.
3299 * assignshift==1, assign==T, method + 1 == off
3300 * b) Increment or decrement, called directly.
3301 * assignshift==0, assign==0, method + 0 == off
3302 * c) Increment or decrement, translated to assignment add/subtr.
b267980d 3303 * assignshift==0, assign==T,
ee239bfe
IZ
3304 * force_cpy == T
3305 * d) Increment or decrement, translated to nomethod.
b267980d 3306 * assignshift==0, assign==0,
ee239bfe
IZ
3307 * force_cpy == T
3308 * e) Assignment form translated to nomethod.
3309 * assignshift==1, assign==T, method + 1 != off
3310 * force_cpy == T
3311 */
3312 /* off is method, method+assignshift, or a result of opcode substitution.
3313 * In the latter case assignshift==0, so only notfound case is important.
3314 */
73512201 3315 if ( (lr == -1) && ( ( (method + assignshift == off)
ee239bfe 3316 && (assign || (method == inc_amg) || (method == dec_amg)))
73512201 3317 || force_cpy) )
6f1401dc 3318 {
1b38c28e
NC
3319 /* newSVsv does not behave as advertised, so we copy missing
3320 * information by hand */
3321 SV *tmpRef = SvRV(left);
3322 SV *rv_copy;
31d632c3 3323 if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
1b38c28e
NC
3324 SvRV_set(left, rv_copy);
3325 SvSETMAGIC(left);
e7881358 3326 SvREFCNT_dec_NN(tmpRef);
1b38c28e 3327 }
6f1401dc
DM
3328 }
3329
a0d0e21e
LW
3330 {
3331 dSP;
3332 BINOP myop;
3333 SV* res;
b7787f18 3334 const bool oldcatch = CATCH_GET;
67288365
JL
3335 I32 oldmark, nret;
3336 int gimme = force_scalar ? G_SCALAR : GIMME_V;
a0d0e21e 3337
54310121 3338 CATCH_SET(TRUE);
a0d0e21e
LW
3339 Zero(&myop, 1, BINOP);
3340 myop.op_last = (OP *) &myop;
b37c2d43 3341 myop.op_next = NULL;
67288365
JL
3342 myop.op_flags = OPf_STACKED;
3343
3344 switch (gimme) {
3345 case G_VOID:
3346 myop.op_flags |= OPf_WANT_VOID;
3347 break;
3348 case G_ARRAY:
3349 if (flags & AMGf_want_list) {
3350 myop.op_flags |= OPf_WANT_LIST;
3351 break;
3352 }
3353 /* FALLTHROUGH */
3354 default:
3355 myop.op_flags |= OPf_WANT_SCALAR;
3356 break;
3357 }
a0d0e21e 3358
e788e7d3 3359 PUSHSTACKi(PERLSI_OVERLOAD);
a0d0e21e 3360 ENTER;
462e5cf6 3361 SAVEOP();
533c011a 3362 PL_op = (OP *) &myop;
3280af22 3363 if (PERLDB_SUB && PL_curstash != PL_debstash)
533c011a 3364 PL_op->op_private |= OPpENTERSUB_DB;
897d3989 3365 Perl_pp_pushmark(aTHX);
a0d0e21e 3366
924508f0 3367 EXTEND(SP, notfound + 5);
a0d0e21e
LW
3368 PUSHs(lr>0? right: left);
3369 PUSHs(lr>0? left: right);
3280af22 3370 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
a0d0e21e 3371 if (notfound) {
59cd0e26
NC
3372 PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
3373 AMG_id2namelen(method + assignshift), SVs_TEMP));
a0d0e21e 3374 }
ad64d0ec 3375 PUSHs(MUTABLE_SV(cv));
a0d0e21e 3376 PUTBACK;
67288365 3377 oldmark = TOPMARK;
a0d0e21e 3378
139d0ce6 3379 if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
cea2e8a9 3380 CALLRUNOPS(aTHX);
a0d0e21e
LW
3381 LEAVE;
3382 SPAGAIN;
67288365
JL
3383 nret = SP - (PL_stack_base + oldmark);
3384
3385 switch (gimme) {
3386 case G_VOID:
3387 /* returning NULL has another meaning, and we check the context
3388 * at the call site too, so this can be differentiated from the
3389 * scalar case */
3390 res = &PL_sv_undef;
3391 SP = PL_stack_base + oldmark;
3392 break;
3393 case G_ARRAY: {
3394 if (flags & AMGf_want_list) {
3395 res = sv_2mortal((SV *)newAV());
3396 av_extend((AV *)res, nret);
3397 while (nret--)
3398 av_store((AV *)res, nret, POPs);
3399 break;
3400 }
3401 /* FALLTHROUGH */
3402 }
3403 default:
3404 res = POPs;
3405 break;
3406 }
a0d0e21e 3407
ebafeae7 3408 PUTBACK;
d3acc0f7 3409 POPSTACK;
54310121 3410 CATCH_SET(oldcatch);
a0d0e21e 3411
a0d0e21e 3412 if (postpr) {
b7787f18 3413 int ans;
a0d0e21e
LW
3414 switch (method) {
3415 case le_amg:
3416 case sle_amg:
3417 ans=SvIV(res)<=0; break;
3418 case lt_amg:
3419 case slt_amg:
3420 ans=SvIV(res)<0; break;
3421 case ge_amg:
3422 case sge_amg:
3423 ans=SvIV(res)>=0; break;
3424 case gt_amg:
3425 case sgt_amg:
3426 ans=SvIV(res)>0; break;
3427 case eq_amg:
3428 case seq_amg:
3429 ans=SvIV(res)==0; break;
3430 case ne_amg:
3431 case sne_amg:
3432 ans=SvIV(res)!=0; break;
3433 case inc_amg:
3434 case dec_amg:
bbce6d69 3435 SvSetSV(left,res); return left;
dc437b57 3436 case not_amg:
fe7ac86a 3437 ans=!SvTRUE(res); break;
b7787f18
AL
3438 default:
3439 ans=0; break;
a0d0e21e 3440 }
54310121 3441 return boolSV(ans);
748a9306
LW
3442 } else if (method==copy_amg) {
3443 if (!SvROK(res)) {
cea2e8a9 3444 Perl_croak(aTHX_ "Copy method did not return a reference");
748a9306
LW
3445 }
3446 return SvREFCNT_inc(SvRV(res));
a0d0e21e
LW
3447 } else {
3448 return res;
3449 }
3450 }
3451}
c9d5ac95 3452
f5c1e807
NC
3453void
3454Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
3455{
3456 dVAR;
acda4c6a 3457 U32 hash;
f5c1e807 3458
7918f24d 3459 PERL_ARGS_ASSERT_GV_NAME_SET;
f5c1e807 3460
acda4c6a
NC
3461 if (len > I32_MAX)
3462 Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
3463
ae8cc45f
NC
3464 if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
3465 unshare_hek(GvNAME_HEK(gv));
3466 }
3467
acda4c6a 3468 PERL_HASH(hash, name, len);
c60dbbc3 3469 GvNAME_HEK(gv) = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash);
f5c1e807
NC
3470}
3471
66610fdd 3472/*
f7461760
Z
3473=for apidoc gv_try_downgrade
3474
2867cdbc
Z
3475If the typeglob C<gv> can be expressed more succinctly, by having
3476something other than a real GV in its place in the stash, replace it
3477with the optimised form. Basic requirements for this are that C<gv>
3478is a real typeglob, is sufficiently ordinary, and is only referenced
3479from its package. This function is meant to be used when a GV has been
3480looked up in part to see what was there, causing upgrading, but based
3481on what was found it turns out that the real GV isn't required after all.
3482
3483If C<gv> is a completely empty typeglob, it is deleted from the stash.
3484
3485If C<gv> is a typeglob containing only a sufficiently-ordinary constant
3486sub, the typeglob is replaced with a scalar-reference placeholder that
3487more compactly represents the same thing.
f7461760
Z
3488
3489=cut
3490*/
3491
3492void
3493Perl_gv_try_downgrade(pTHX_ GV *gv)
3494{
3495 HV *stash;
3496 CV *cv;
3497 HEK *namehek;
3498 SV **gvp;
3499 PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
95f56751
FC
3500
3501 /* XXX Why and where does this leave dangling pointers during global
3502 destruction? */
627364f1 3503 if (PL_phase == PERL_PHASE_DESTRUCT) return;
95f56751 3504
2867cdbc 3505 if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
803f2748 3506 !SvOBJECT(gv) && !SvREADONLY(gv) &&
f7461760 3507 isGV_with_GP(gv) && GvGP(gv) &&
2867cdbc 3508 !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
f7461760 3509 !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
099be4f1 3510 GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
2867cdbc 3511 return;
2be08ad1
FC
3512 if (gv == PL_statgv || gv == PL_last_in_gv || gv == PL_stderrgv)
3513 return;
803f2748
DM
3514 if (SvMAGICAL(gv)) {
3515 MAGIC *mg;
3516 /* only backref magic is allowed */
3517 if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
3518 return;
3519 for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
3520 if (mg->mg_type != PERL_MAGIC_backref)
3521 return;
3522 }
3523 }
2867cdbc
Z
3524 cv = GvCV(gv);
3525 if (!cv) {
3526 HEK *gvnhek = GvNAME_HEK(gv);
0ca9877d 3527 (void)hv_deletehek(stash, gvnhek, G_DISCARD);
8941bf97 3528 } else if (GvMULTI(gv) && cv && SvREFCNT(cv) == 1 &&
f7461760 3529 !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
34d81fc4 3530 CvSTASH(cv) == stash && !CvNAMED(cv) && CvGV(cv) == gv &&
f7461760
Z
3531 CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
3532 !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
3533 (namehek = GvNAME_HEK(gv)) &&
48c2c411 3534 (gvp = hv_fetchhek(stash, namehek, 0)) &&
f7461760
Z
3535 *gvp == (SV*)gv) {
3536 SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
70e5f2b5 3537 const bool imported = !!GvIMPORTED_CV(gv);
f7461760
Z
3538 SvREFCNT(gv) = 0;
3539 sv_clear((SV*)gv);
3540 SvREFCNT(gv) = 1;
70e5f2b5 3541 SvFLAGS(gv) = SVt_IV|SVf_ROK|SVprv_PCS_IMPORTED * imported;
f7461760
Z
3542 SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
3543 STRUCT_OFFSET(XPVIV, xiv_iv));
3544 SvRV_set(gv, value);
3545 }
3546}
3547
9e3fb20c
FC
3548GV *
3549Perl_gv_override(pTHX_ const char * const name, const STRLEN len)
3550{
3551 GV *gv = gv_fetchpvn(name, len, GV_NOTQUAL, SVt_PVCV);
3552 GV * const *gvp;
3553 PERL_ARGS_ASSERT_GV_OVERRIDE;
3554 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) return gv;
3555 gvp = (GV**)hv_fetch(PL_globalstash, name, len, FALSE);
3556 gv = gvp ? *gvp : NULL;
3557 if (gv && !isGV(gv)) {
3558 if (!SvPCS_IMPORTED(gv)) return NULL;
3559 gv_init(gv, PL_globalstash, name, len, 0);
3560 return gv;
3561 }
3562 return gv && GvCVu(gv) && GvIMPORTED_CV(gv) ? gv : NULL;
3563}
3564
4aaa4757
FC
3565#include "XSUB.h"
3566
3567static void
3568core_xsub(pTHX_ CV* cv)
3569{
3570 Perl_croak(aTHX_
3571 "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
3572 );
3573}
3574
f7461760 3575/*
66610fdd
RGS
3576 * Local variables:
3577 * c-indentation-style: bsd
3578 * c-basic-offset: 4
14d04a33 3579 * indent-tabs-mode: nil
66610fdd
RGS
3580 * End:
3581 *
14d04a33 3582 * ex: set ts=8 sts=4 sw=4 et:
37442d52 3583 */