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