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