This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Linker options file not created before nonxs extension building.
[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;
add0ecde 858 U32 tmplen = namelen + 2;
dc437b57 859
7918f24d
NC
860 PERL_ARGS_ASSERT_GV_STASHPVN;
861
add0ecde 862 if (tmplen <= sizeof smallbuf)
46fc3d4c 863 tmpbuf = smallbuf;
864 else
add0ecde
VP
865 Newx(tmpbuf, tmplen, char);
866 Copy(name, tmpbuf, namelen, char);
867 tmpbuf[namelen] = ':';
868 tmpbuf[namelen+1] = ':';
869 tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
46fc3d4c 870 if (tmpbuf != smallbuf)
871 Safefree(tmpbuf);
a0d0e21e 872 if (!tmpgv)
da51bb9b 873 return NULL;
a0d0e21e
LW
874 if (!GvHV(tmpgv))
875 GvHV(tmpgv) = newHV();
876 stash = GvHV(tmpgv);
bfcb3514 877 if (!HvNAME_get(stash))
51a37f80 878 hv_name_set(stash, name, namelen, 0);
a0d0e21e 879 return stash;
463ee0b2
LW
880}
881
954c1994
GS
882/*
883=for apidoc gv_stashsv
884
da51bb9b 885Returns a pointer to the stash for a specified package. See C<gv_stashpvn>.
954c1994
GS
886
887=cut
888*/
889
a0d0e21e 890HV*
da51bb9b 891Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
a0d0e21e 892{
dc437b57 893 STRLEN len;
9d4ba2ae 894 const char * const ptr = SvPV_const(sv,len);
7918f24d
NC
895
896 PERL_ARGS_ASSERT_GV_STASHSV;
897
da51bb9b 898 return gv_stashpvn(ptr, len, flags);
a0d0e21e
LW
899}
900
901
463ee0b2 902GV *
fe9845cc 903Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
7918f24d 904 PERL_ARGS_ASSERT_GV_FETCHPV;
b7787f18 905 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
7a5fd60d
NC
906}
907
908GV *
fe9845cc 909Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
7a5fd60d 910 STRLEN len;
9d4ba2ae 911 const char * const nambeg = SvPV_const(name, len);
7918f24d 912 PERL_ARGS_ASSERT_GV_FETCHSV;
7a5fd60d
NC
913 return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
914}
915
916GV *
917Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
fe9845cc 918 const svtype sv_type)
79072805 919{
97aff369 920 dVAR;
08105a92 921 register const char *name = nambeg;
c445ea15 922 register GV *gv = NULL;
79072805 923 GV**gvp;
79072805 924 I32 len;
b3d904f3 925 register const char *name_cursor;
c445ea15 926 HV *stash = NULL;
add2581e 927 const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
e26df76a 928 const I32 no_expand = flags & GV_NOEXPAND;
780a5241 929 const I32 add = flags & ~GV_NOADD_MASK;
b3d904f3
NC
930 const char *const name_end = nambeg + full_len;
931 const char *const name_em1 = name_end - 1;
5e0caaeb 932 U32 faking_it;
79072805 933
7918f24d
NC
934 PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
935
fafc274c
NC
936 if (flags & GV_NOTQUAL) {
937 /* Caller promised that there is no stash, so we can skip the check. */
938 len = full_len;
939 goto no_stash;
940 }
941
b208e10c
NC
942 if (full_len > 2 && *name == '*' && isALPHA(name[1])) {
943 /* accidental stringify on a GV? */
c07a80fd 944 name++;
b208e10c 945 }
c07a80fd 946
b3d904f3
NC
947 for (name_cursor = name; name_cursor < name_end; name_cursor++) {
948 if ((*name_cursor == ':' && name_cursor < name_em1
949 && name_cursor[1] == ':')
950 || (*name_cursor == '\'' && name_cursor[1]))
463ee0b2 951 {
463ee0b2 952 if (!stash)
3280af22 953 stash = PL_defstash;
dc437b57 954 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
a0714e2c 955 return NULL;
463ee0b2 956
b3d904f3 957 len = name_cursor - name;
85e6fe83 958 if (len > 0) {
0cea0058 959 char smallbuf[128];
62b57502 960 char *tmpbuf;
62b57502 961
798b63bc 962 if (len + 2 <= (I32)sizeof (smallbuf))
3c78fafa 963 tmpbuf = smallbuf;
62b57502 964 else
2ae0db35 965 Newx(tmpbuf, len+2, char);
a0d0e21e
LW
966 Copy(name, tmpbuf, len, char);
967 tmpbuf[len++] = ':';
968 tmpbuf[len++] = ':';
463ee0b2 969 gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
a0714e2c 970 gv = gvp ? *gvp : NULL;
159b6efe 971 if (gv && gv != (const GV *)&PL_sv_undef) {
6fa846a0 972 if (SvTYPE(gv) != SVt_PVGV)
0f303493 973 gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
6fa846a0
GS
974 else
975 GvMULTI_on(gv);
976 }
3c78fafa 977 if (tmpbuf != smallbuf)
62b57502 978 Safefree(tmpbuf);
159b6efe 979 if (!gv || gv == (const GV *)&PL_sv_undef)
a0714e2c 980 return NULL;
85e6fe83 981
463ee0b2
LW
982 if (!(stash = GvHV(gv)))
983 stash = GvHV(gv) = newHV();
85e6fe83 984
bfcb3514 985 if (!HvNAME_get(stash))
b3d904f3 986 hv_name_set(stash, nambeg, name_cursor - nambeg, 0);
463ee0b2
LW
987 }
988
b3d904f3
NC
989 if (*name_cursor == ':')
990 name_cursor++;
991 name_cursor++;
992 name = name_cursor;
ad6bfa9d 993 if (name == name_end)
159b6efe
NC
994 return gv
995 ? gv : MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
79072805 996 }
79072805 997 }
b3d904f3 998 len = name_cursor - name;
463ee0b2
LW
999
1000 /* No stash in name, so see how we can default */
1001
1002 if (!stash) {
fafc274c 1003 no_stash:
8ccce9ae 1004 if (len && isIDFIRST_lazy(name)) {
9607fc9c 1005 bool global = FALSE;
1006
8ccce9ae
NC
1007 switch (len) {
1008 case 1:
18ea00d7 1009 if (*name == '_')
9d116dd7 1010 global = TRUE;
18ea00d7 1011 break;
8ccce9ae
NC
1012 case 3:
1013 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1014 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1015 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
9d116dd7 1016 global = TRUE;
18ea00d7 1017 break;
8ccce9ae
NC
1018 case 4:
1019 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1020 && name[3] == 'V')
9d116dd7 1021 global = TRUE;
18ea00d7 1022 break;
8ccce9ae
NC
1023 case 5:
1024 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1025 && name[3] == 'I' && name[4] == 'N')
463ee0b2 1026 global = TRUE;
18ea00d7 1027 break;
8ccce9ae
NC
1028 case 6:
1029 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1030 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1031 ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
1032 global = TRUE;
1033 break;
1034 case 7:
1035 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1036 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1037 && name[6] == 'T')
18ea00d7
NC
1038 global = TRUE;
1039 break;
463ee0b2 1040 }
9607fc9c 1041
463ee0b2 1042 if (global)
3280af22 1043 stash = PL_defstash;
923e4eb5 1044 else if (IN_PERL_COMPILETIME) {
3280af22
NIS
1045 stash = PL_curstash;
1046 if (add && (PL_hints & HINT_STRICT_VARS) &&
748a9306
LW
1047 sv_type != SVt_PVCV &&
1048 sv_type != SVt_PVGV &&
4633a7c4 1049 sv_type != SVt_PVFM &&
c07a80fd 1050 sv_type != SVt_PVIO &&
70ec6265
NC
1051 !(len == 1 && sv_type == SVt_PV &&
1052 (*name == 'a' || *name == 'b')) )
748a9306 1053 {
4633a7c4
LW
1054 gvp = (GV**)hv_fetch(stash,name,len,0);
1055 if (!gvp ||
159b6efe 1056 *gvp == (const GV *)&PL_sv_undef ||
a5f75d66
AD
1057 SvTYPE(*gvp) != SVt_PVGV)
1058 {
d4c19fe8 1059 stash = NULL;
a5f75d66 1060 }
155aba94
GS
1061 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
1062 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1063 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
4633a7c4 1064 {
fe13d51d 1065 /* diag_listed_as: Variable "%s" is not imported%s */
cea2e8a9 1066 Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
4633a7c4
LW
1067 sv_type == SVt_PVAV ? '@' :
1068 sv_type == SVt_PVHV ? '%' : '$',
1069 name);
8ebc5c01 1070 if (GvCVu(*gvp))
cc507455 1071 Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
d4c19fe8 1072 stash = NULL;
4633a7c4 1073 }
a0d0e21e 1074 }
85e6fe83 1075 }
463ee0b2 1076 else
1d7c1841 1077 stash = CopSTASH(PL_curcop);
463ee0b2
LW
1078 }
1079 else
3280af22 1080 stash = PL_defstash;
463ee0b2
LW
1081 }
1082
1083 /* By this point we should have a stash and a name */
1084
a0d0e21e 1085 if (!stash) {
5a844595 1086 if (add) {
9d4ba2ae 1087 SV * const err = Perl_mess(aTHX_
5a844595
GS
1088 "Global symbol \"%s%s\" requires explicit package name",
1089 (sv_type == SVt_PV ? "$"
1090 : sv_type == SVt_PVAV ? "@"
1091 : sv_type == SVt_PVHV ? "%"
608b3986 1092 : ""), name);
e7f343b6 1093 GV *gv;
608b3986
AE
1094 if (USE_UTF8_IN_NAMES)
1095 SvUTF8_on(err);
1096 qerror(err);
76f68e9b 1097 gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
e7f343b6
NC
1098 if(!gv) {
1099 /* symbol table under destruction */
1100 return NULL;
1101 }
1102 stash = GvHV(gv);
a0d0e21e 1103 }
d7aacf4e 1104 else
a0714e2c 1105 return NULL;
a0d0e21e
LW
1106 }
1107
1108 if (!SvREFCNT(stash)) /* symbol table under destruction */
a0714e2c 1109 return NULL;
a0d0e21e 1110
79072805 1111 gvp = (GV**)hv_fetch(stash,name,len,add);
159b6efe 1112 if (!gvp || *gvp == (const GV *)&PL_sv_undef)
a0714e2c 1113 return NULL;
79072805
LW
1114 gv = *gvp;
1115 if (SvTYPE(gv) == SVt_PVGV) {
a0d0e21e 1116 if (add) {
a5f75d66 1117 GvMULTI_on(gv);
a0d0e21e 1118 gv_init_sv(gv, sv_type);
45cbc99a 1119 if (len == 1 && (sv_type == SVt_PVHV || sv_type == SVt_PVGV)) {
44a2ac75
YO
1120 if (*name == '!')
1121 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
45cbc99a 1122 else if (*name == '-' || *name == '+')
192b9cd1 1123 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
45cbc99a 1124 }
a0d0e21e 1125 }
79072805 1126 return gv;
add2581e 1127 } else if (no_init) {
55d729e4 1128 return gv;
e26df76a
NC
1129 } else if (no_expand && SvROK(gv)) {
1130 return gv;
79072805 1131 }
93a17b20 1132
5e0caaeb
NC
1133 /* Adding a new symbol.
1134 Unless of course there was already something non-GV here, in which case
1135 we want to behave as if there was always a GV here, containing some sort
1136 of subroutine.
1137 Otherwise we run the risk of creating things like GvIO, which can cause
1138 subtle bugs. eg the one that tripped up SQL::Translator */
1139
1140 faking_it = SvOK(gv);
93a17b20 1141
0453d815 1142 if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
9014280d 1143 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
55d729e4 1144 gv_init(gv, stash, name, len, add & GV_ADDMULTI);
5e0caaeb 1145 gv_init_sv(gv, faking_it ? SVt_PVCV : sv_type);
93a17b20 1146
a0288114 1147 if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
7272584d 1148 : (PL_dowarn & G_WARN_ON ) ) )
0453d815
PM
1149 GvMULTI_on(gv) ;
1150
93a17b20 1151 /* set up magic where warranted */
cc4c2da6 1152 if (len > 1) {
9431620d 1153#ifndef EBCDIC
cc4c2da6 1154 if (*name > 'V' ) {
6f207bd3 1155 NOOP;
cc4c2da6 1156 /* Nothing else to do.
91f565cb 1157 The compiler will probably turn the switch statement into a
cc4c2da6
NC
1158 branch table. Make sure we avoid even that small overhead for
1159 the common case of lower case variable names. */
9431620d
NC
1160 } else
1161#endif
1162 {
b464bac0 1163 const char * const name2 = name + 1;
cc4c2da6
NC
1164 switch (*name) {
1165 case 'A':
1166 if (strEQ(name2, "RGV")) {
1167 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1168 }
7b8203e3
YST
1169 else if (strEQ(name2, "RGVOUT")) {
1170 GvMULTI_on(gv);
1171 }
cc4c2da6
NC
1172 break;
1173 case 'E':
1174 if (strnEQ(name2, "XPORT", 5))
1175 GvMULTI_on(gv);
1176 break;
1177 case 'I':
1178 if (strEQ(name2, "SA")) {
9d4ba2ae 1179 AV* const av = GvAVn(gv);
cc4c2da6 1180 GvMULTI_on(gv);
ad64d0ec
NC
1181 sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1182 NULL, 0);
cc4c2da6
NC
1183 /* NOTE: No support for tied ISA */
1184 if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
1185 && AvFILLp(av) == -1)
1186 {
e84ce9a2
MHM
1187 av_push(av, newSVpvs("NDBM_File"));
1188 gv_stashpvs("NDBM_File", GV_ADD);
1189 av_push(av, newSVpvs("DB_File"));
1190 gv_stashpvs("DB_File", GV_ADD);
1191 av_push(av, newSVpvs("GDBM_File"));
1192 gv_stashpvs("GDBM_File", GV_ADD);
1193 av_push(av, newSVpvs("SDBM_File"));
1194 gv_stashpvs("SDBM_File", GV_ADD);
1195 av_push(av, newSVpvs("ODBM_File"));
1196 gv_stashpvs("ODBM_File", GV_ADD);
cc4c2da6
NC
1197 }
1198 }
1199 break;
1200 case 'O':
1201 if (strEQ(name2, "VERLOAD")) {
9d4ba2ae 1202 HV* const hv = GvHVn(gv);
cc4c2da6 1203 GvMULTI_on(gv);
a0714e2c 1204 hv_magic(hv, NULL, PERL_MAGIC_overload);
cc4c2da6
NC
1205 }
1206 break;
1207 case 'S':
1208 if (strEQ(name2, "IG")) {
1209 HV *hv;
1210 I32 i;
d525a7b2
NC
1211 if (!PL_psig_name) {
1212 Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
a02a5408 1213 Newxz(PL_psig_pend, SIG_SIZE, int);
d525a7b2 1214 PL_psig_ptr = PL_psig_name + SIG_SIZE;
0bdedcb3
NC
1215 } else {
1216 /* I think that the only way to get here is to re-use an
1217 embedded perl interpreter, where the previous
1218 use didn't clean up fully because
1219 PL_perl_destruct_level was 0. I'm not sure that we
1220 "support" that, in that I suspect in that scenario
1221 there are sufficient other garbage values left in the
1222 interpreter structure that something else will crash
1223 before we get here. I suspect that this is one of
1224 those "doctor, it hurts when I do this" bugs. */
d525a7b2 1225 Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
0bdedcb3 1226 Zero(PL_psig_pend, SIG_SIZE, int);
cc4c2da6
NC
1227 }
1228 GvMULTI_on(gv);
1229 hv = GvHVn(gv);
a0714e2c 1230 hv_magic(hv, NULL, PERL_MAGIC_sig);
cc4c2da6 1231 for (i = 1; i < SIG_SIZE; i++) {
551405c4 1232 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
cc4c2da6
NC
1233 if (init)
1234 sv_setsv(*init, &PL_sv_undef);
cc4c2da6
NC
1235 }
1236 }
1237 break;
1238 case 'V':
1239 if (strEQ(name2, "ERSION"))
1240 GvMULTI_on(gv);
1241 break;
e5218da5
GA
1242 case '\003': /* $^CHILD_ERROR_NATIVE */
1243 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1244 goto magicalize;
1245 break;
cc4c2da6
NC
1246 case '\005': /* $^ENCODING */
1247 if (strEQ(name2, "NCODING"))
1248 goto magicalize;
1249 break;
cde0cee5
YO
1250 case '\015': /* $^MATCH */
1251 if (strEQ(name2, "ATCH"))
2fdbfb4d 1252 goto magicalize;
cc4c2da6
NC
1253 case '\017': /* $^OPEN */
1254 if (strEQ(name2, "PEN"))
1255 goto magicalize;
1256 break;
cde0cee5
YO
1257 case '\020': /* $^PREMATCH $^POSTMATCH */
1258 if (strEQ(name2, "REMATCH") || strEQ(name2, "OSTMATCH"))
2fdbfb4d 1259 goto magicalize;
cc4c2da6
NC
1260 case '\024': /* ${^TAINT} */
1261 if (strEQ(name2, "AINT"))
1262 goto ro_magicalize;
1263 break;
7cebcbc0 1264 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
a0288114 1265 if (strEQ(name2, "NICODE"))
cc4c2da6 1266 goto ro_magicalize;
a0288114 1267 if (strEQ(name2, "TF8LOCALE"))
7cebcbc0 1268 goto ro_magicalize;
e07ea26a
NC
1269 if (strEQ(name2, "TF8CACHE"))
1270 goto magicalize;
cc4c2da6
NC
1271 break;
1272 case '\027': /* $^WARNING_BITS */
1273 if (strEQ(name2, "ARNING_BITS"))
1274 goto magicalize;
1275 break;
1276 case '1':
1277 case '2':
1278 case '3':
1279 case '4':
1280 case '5':
1281 case '6':
1282 case '7':
1283 case '8':
1284 case '9':
85e6fe83 1285 {
2fdbfb4d
AB
1286 /* Ensures that we have an all-digit variable, ${"1foo"} fails
1287 this test */
1288 /* This snippet is taken from is_gv_magical */
cc4c2da6
NC
1289 const char *end = name + len;
1290 while (--end > name) {
2fdbfb4d 1291 if (!isDIGIT(*end)) return gv;
cc4c2da6 1292 }
2fdbfb4d 1293 goto magicalize;
1d7c1841 1294 }
dc437b57 1295 }
93a17b20 1296 }
392db708
NC
1297 } else {
1298 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1299 be case '\0' in this switch statement (ie a default case) */
cc4c2da6
NC
1300 switch (*name) {
1301 case '&':
1302 case '`':
1303 case '\'':
1304 if (
1305 sv_type == SVt_PVAV ||
1306 sv_type == SVt_PVHV ||
1307 sv_type == SVt_PVCV ||
1308 sv_type == SVt_PVFM ||
1309 sv_type == SVt_PVIO
1310 ) { break; }
1311 PL_sawampersand = TRUE;
2fdbfb4d 1312 goto magicalize;
cc4c2da6
NC
1313
1314 case ':':
c69033f2 1315 sv_setpv(GvSVn(gv),PL_chopset);
cc4c2da6
NC
1316 goto magicalize;
1317
1318 case '?':
ff0cee69 1319#ifdef COMPLEX_STATUS
c69033f2 1320 SvUPGRADE(GvSVn(gv), SVt_PVLV);
ff0cee69 1321#endif
cc4c2da6 1322 goto magicalize;
ff0cee69 1323
cc4c2da6 1324 case '!':
67261566 1325 GvMULTI_on(gv);
44a2ac75 1326 /* If %! has been used, automatically load Errno.pm. */
d2c93421 1327
ad64d0ec 1328 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
d2c93421 1329
44a2ac75 1330 /* magicalization must be done before require_tie_mod is called */
67261566 1331 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
44a2ac75 1332 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
d2c93421 1333
6cef1e77 1334 break;
cc4c2da6 1335 case '-':
44a2ac75
YO
1336 case '+':
1337 GvMULTI_on(gv); /* no used once warnings here */
1338 {
44a2ac75 1339 AV* const av = GvAVn(gv);
ad64d0ec 1340 SV* const avc = (*name == '+') ? MUTABLE_SV(av) : NULL;
44a2ac75 1341
ad64d0ec
NC
1342 sv_magic(MUTABLE_SV(av), avc, PERL_MAGIC_regdata, NULL, 0);
1343 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
67261566 1344 if (avc)
44a2ac75 1345 SvREADONLY_on(GvSVn(gv));
44a2ac75 1346 SvREADONLY_on(av);
67261566
YO
1347
1348 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
192b9cd1 1349 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
67261566 1350
80305961 1351 break;
cc4c2da6
NC
1352 }
1353 case '*':
cc4c2da6 1354 case '#':
fafcdf9e 1355 if (sv_type == SVt_PV && ckWARN2_d(WARN_DEPRECATED, WARN_SYNTAX))
cc4c2da6 1356 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
8ae1fe26
RGS
1357 "$%c is no longer supported", *name);
1358 break;
cc4c2da6 1359 case '|':
c69033f2 1360 sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
cc4c2da6
NC
1361 goto magicalize;
1362
b3ca2e83
NC
1363 case '\010': /* $^H */
1364 {
1365 HV *const hv = GvHVn(gv);
1366 hv_magic(hv, NULL, PERL_MAGIC_hints);
1367 }
1368 goto magicalize;
cc4c2da6 1369 case '\023': /* $^S */
2fdbfb4d
AB
1370 ro_magicalize:
1371 SvREADONLY_on(GvSVn(gv));
1372 /* FALL THROUGH */
e69c155a 1373 case '0':
cc4c2da6
NC
1374 case '1':
1375 case '2':
1376 case '3':
1377 case '4':
1378 case '5':
1379 case '6':
1380 case '7':
1381 case '8':
1382 case '9':
cc4c2da6
NC
1383 case '[':
1384 case '^':
1385 case '~':
1386 case '=':
1387 case '%':
1388 case '.':
1389 case '(':
1390 case ')':
1391 case '<':
1392 case '>':
cc4c2da6
NC
1393 case '\\':
1394 case '/':
1395 case '\001': /* $^A */
1396 case '\003': /* $^C */
1397 case '\004': /* $^D */
1398 case '\005': /* $^E */
1399 case '\006': /* $^F */
cc4c2da6
NC
1400 case '\011': /* $^I, NOT \t in EBCDIC */
1401 case '\016': /* $^N */
1402 case '\017': /* $^O */
1403 case '\020': /* $^P */
1404 case '\024': /* $^T */
1405 case '\027': /* $^W */
1406 magicalize:
ad64d0ec 1407 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
cc4c2da6 1408 break;
e521374c 1409
cc4c2da6 1410 case '\014': /* $^L */
76f68e9b 1411 sv_setpvs(GvSVn(gv),"\f");
c69033f2 1412 PL_formfeed = GvSVn(gv);
463ee0b2 1413 break;
cc4c2da6 1414 case ';':
76f68e9b 1415 sv_setpvs(GvSVn(gv),"\034");
463ee0b2 1416 break;
cc4c2da6
NC
1417 case ']':
1418 {
c69033f2 1419 SV * const sv = GvSVn(gv);
d7aa5382 1420 if (!sv_derived_from(PL_patchlevel, "version"))
ac0e6a2f 1421 upg_version(PL_patchlevel, TRUE);
7d54d38e
SH
1422 GvSV(gv) = vnumify(PL_patchlevel);
1423 SvREADONLY_on(GvSV(gv));
1424 SvREFCNT_dec(sv);
93a17b20
LW
1425 }
1426 break;
cc4c2da6
NC
1427 case '\026': /* $^V */
1428 {
c69033f2 1429 SV * const sv = GvSVn(gv);
f9be5ac8
DM
1430 GvSV(gv) = new_version(PL_patchlevel);
1431 SvREADONLY_on(GvSV(gv));
1432 SvREFCNT_dec(sv);
16070b82
GS
1433 }
1434 break;
cc4c2da6 1435 }
79072805 1436 }
93a17b20 1437 return gv;
79072805
LW
1438}
1439
1440void
35a4481c 1441Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 1442{
35a4481c 1443 const char *name;
7423f6db 1444 STRLEN namelen;
35a4481c 1445 const HV * const hv = GvSTASH(gv);
7918f24d
NC
1446
1447 PERL_ARGS_ASSERT_GV_FULLNAME4;
1448
43693395 1449 if (!hv) {
0c34ef67 1450 SvOK_off(sv);
43693395
GS
1451 return;
1452 }
666ea192 1453 sv_setpv(sv, prefix ? prefix : "");
a0288114 1454
bfcb3514 1455 name = HvNAME_get(hv);
7423f6db
NC
1456 if (name) {
1457 namelen = HvNAMELEN_get(hv);
1458 } else {
e27ad1f2 1459 name = "__ANON__";
7423f6db
NC
1460 namelen = 8;
1461 }
a0288114 1462
e27ad1f2 1463 if (keepmain || strNE(name, "main")) {
7423f6db 1464 sv_catpvn(sv,name,namelen);
396482e1 1465 sv_catpvs(sv,"::");
43693395 1466 }
257984c0 1467 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
43693395
GS
1468}
1469
1470void
35a4481c 1471Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 1472{
46c461b5 1473 const GV * const egv = GvEGV(gv);
7918f24d
NC
1474
1475 PERL_ARGS_ASSERT_GV_EFULLNAME4;
1476
46c461b5 1477 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
43693395
GS
1478}
1479
79072805 1480void
1146e912 1481Perl_gv_check(pTHX_ const HV *stash)
79072805 1482{
97aff369 1483 dVAR;
79072805 1484 register I32 i;
463ee0b2 1485
7918f24d
NC
1486 PERL_ARGS_ASSERT_GV_CHECK;
1487
8990e307
LW
1488 if (!HvARRAY(stash))
1489 return;
a0d0e21e 1490 for (i = 0; i <= (I32) HvMAX(stash); i++) {
e1ec3a88 1491 const HE *entry;
dc437b57 1492 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
b7787f18
AL
1493 register GV *gv;
1494 HV *hv;
dc437b57 1495 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
159b6efe 1496 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
a0d0e21e 1497 {
19b6c847 1498 if (hv != PL_defstash && hv != stash)
a0d0e21e
LW
1499 gv_check(hv); /* nested package */
1500 }
dc437b57 1501 else if (isALPHA(*HeKEY(entry))) {
e1ec3a88 1502 const char *file;
159b6efe 1503 gv = MUTABLE_GV(HeVAL(entry));
55d729e4 1504 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
463ee0b2 1505 continue;
1d7c1841 1506 file = GvFILE(gv);
1d7c1841
GS
1507 CopLINE_set(PL_curcop, GvLINE(gv));
1508#ifdef USE_ITHREADS
dd374669 1509 CopFILE(PL_curcop) = (char *)file; /* set for warning */
1d7c1841 1510#else
9bde8eb0
NC
1511 CopFILEGV(PL_curcop)
1512 = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
1d7c1841 1513#endif
9014280d 1514 Perl_warner(aTHX_ packWARN(WARN_ONCE),
599cee73 1515 "Name \"%s::%s\" used only once: possible typo",
bfcb3514 1516 HvNAME_get(stash), GvNAME(gv));
463ee0b2 1517 }
79072805
LW
1518 }
1519 }
1520}
1521
1522GV *
e1ec3a88 1523Perl_newGVgen(pTHX_ const char *pack)
79072805 1524{
97aff369 1525 dVAR;
7918f24d
NC
1526
1527 PERL_ARGS_ASSERT_NEWGVGEN;
1528
cea2e8a9 1529 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
6fd99bb3 1530 GV_ADD, SVt_PVGV);
79072805
LW
1531}
1532
1533/* hopefully this is only called on local symbol table entries */
1534
1535GP*
864dbfa3 1536Perl_gp_ref(pTHX_ GP *gp)
79072805 1537{
97aff369 1538 dVAR;
1d7c1841 1539 if (!gp)
d4c19fe8 1540 return NULL;
79072805 1541 gp->gp_refcnt++;
44a8e56a 1542 if (gp->gp_cv) {
1543 if (gp->gp_cvgen) {
e1a479c5
BB
1544 /* If the GP they asked for a reference to contains
1545 a method cache entry, clear it first, so that we
1546 don't infect them with our cached entry */
44a8e56a 1547 SvREFCNT_dec(gp->gp_cv);
601f1833 1548 gp->gp_cv = NULL;
44a8e56a 1549 gp->gp_cvgen = 0;
1550 }
44a8e56a 1551 }
79072805 1552 return gp;
79072805
LW
1553}
1554
1555void
864dbfa3 1556Perl_gp_free(pTHX_ GV *gv)
79072805 1557{
97aff369 1558 dVAR;
79072805
LW
1559 GP* gp;
1560
f7877b28 1561 if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
79072805 1562 return;
f248d071
GS
1563 if (gp->gp_refcnt == 0) {
1564 if (ckWARN_d(WARN_INTERNAL))
9014280d 1565 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc
SB
1566 "Attempt to free unreferenced glob pointers"
1567 pTHX__FORMAT pTHX__VALUE);
79072805
LW
1568 return;
1569 }
748a9306
LW
1570 if (--gp->gp_refcnt > 0) {
1571 if (gp->gp_egv == gv)
1572 gp->gp_egv = 0;
dd38834b 1573 GvGP(gv) = 0;
79072805 1574 return;
748a9306 1575 }
79072805 1576
c9ce39a9
RGS
1577 if (gp->gp_file_hek)
1578 unshare_hek(gp->gp_file_hek);
c9da69fb
AL
1579 SvREFCNT_dec(gp->gp_sv);
1580 SvREFCNT_dec(gp->gp_av);
bfcb3514
NC
1581 /* FIXME - another reference loop GV -> symtab -> GV ?
1582 Somehow gp->gp_hv can end up pointing at freed garbage. */
1583 if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
bfcb3514
NC
1584 const char *hvname = HvNAME_get(gp->gp_hv);
1585 if (PL_stashcache && hvname)
04fe65b0 1586 (void)hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
7423f6db 1587 G_DISCARD);
bfcb3514 1588 SvREFCNT_dec(gp->gp_hv);
13207a71 1589 }
c9da69fb
AL
1590 SvREFCNT_dec(gp->gp_io);
1591 SvREFCNT_dec(gp->gp_cv);
1592 SvREFCNT_dec(gp->gp_form);
748a9306 1593
79072805
LW
1594 Safefree(gp);
1595 GvGP(gv) = 0;
1596}
1597
d460ef45
NIS
1598int
1599Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1600{
53c1dcc0
AL
1601 AMT * const amtp = (AMT*)mg->mg_ptr;
1602 PERL_UNUSED_ARG(sv);
dd374669 1603
7918f24d
NC
1604 PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
1605
d460ef45
NIS
1606 if (amtp && AMT_AMAGIC(amtp)) {
1607 int i;
1608 for (i = 1; i < NofAMmeth; i++) {
53c1dcc0 1609 CV * const cv = amtp->table[i];
b37c2d43 1610 if (cv) {
ad64d0ec 1611 SvREFCNT_dec(MUTABLE_SV(cv));
601f1833 1612 amtp->table[i] = NULL;
d460ef45
NIS
1613 }
1614 }
1615 }
1616 return 0;
1617}
1618
a0d0e21e 1619/* Updates and caches the CV's */
c3a9a790
RGS
1620/* Returns:
1621 * 1 on success and there is some overload
1622 * 0 if there is no overload
1623 * -1 if some error occurred and it couldn't croak
1624 */
a0d0e21e 1625
c3a9a790 1626int
242f8760 1627Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
a0d0e21e 1628{
97aff369 1629 dVAR;
ad64d0ec 1630 MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
a6006777 1631 AMT amt;
9b439311 1632 const struct mro_meta* stash_meta = HvMROMETA(stash);
e1a479c5 1633 U32 newgen;
a0d0e21e 1634
7918f24d
NC
1635 PERL_ARGS_ASSERT_GV_AMUPDATE;
1636
9b439311 1637 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
14899595
NC
1638 if (mg) {
1639 const AMT * const amtp = (AMT*)mg->mg_ptr;
1640 if (amtp->was_ok_am == PL_amagic_generation
e1a479c5 1641 && amtp->was_ok_sub == newgen) {
c3a9a790 1642 return AMT_OVERLOADED(amtp) ? 1 : 0;
14899595 1643 }
ad64d0ec 1644 sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
14899595 1645 }
a0d0e21e 1646
bfcb3514 1647 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
a0d0e21e 1648
d460ef45 1649 Zero(&amt,1,AMT);
3280af22 1650 amt.was_ok_am = PL_amagic_generation;
e1a479c5 1651 amt.was_ok_sub = newgen;
a6006777 1652 amt.fallback = AMGfallNO;
1653 amt.flags = 0;
1654
a6006777 1655 {
32251b26
IZ
1656 int filled = 0, have_ovl = 0;
1657 int i, lim = 1;
a6006777 1658
22c35a8c 1659 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
a6006777 1660
89ffc314 1661 /* Try to find via inheritance. */
53c1dcc0
AL
1662 GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1663 SV * const sv = gv ? GvSV(gv) : NULL;
1664 CV* cv;
89ffc314
IZ
1665
1666 if (!gv)
32251b26 1667 lim = DESTROY_amg; /* Skip overloading entries. */
c69033f2
NC
1668#ifdef PERL_DONT_CREATE_GVSV
1669 else if (!sv) {
6f207bd3 1670 NOOP; /* Equivalent to !SvTRUE and !SvOK */
c69033f2
NC
1671 }
1672#endif
89ffc314
IZ
1673 else if (SvTRUE(sv))
1674 amt.fallback=AMGfallYES;
1675 else if (SvOK(sv))
1676 amt.fallback=AMGfallNEVER;
a6006777 1677
32251b26 1678 for (i = 1; i < lim; i++)
601f1833 1679 amt.table[i] = NULL;
32251b26 1680 for (; i < NofAMmeth; i++) {
6136c704 1681 const char * const cooky = PL_AMG_names[i];
32251b26 1682 /* Human-readable form, for debugging: */
6136c704 1683 const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
d279ab82 1684 const STRLEN l = PL_AMG_namelens[i];
89ffc314 1685
a0288114 1686 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
bfcb3514 1687 cp, HvNAME_get(stash)) );
611c1e95
IZ
1688 /* don't fill the cache while looking up!
1689 Creation of inheritance stubs in intermediate packages may
1690 conflict with the logic of runtime method substitution.
1691 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1692 then we could have created stubs for "(+0" in A and C too.
1693 But if B overloads "bool", we may want to use it for
1694 numifying instead of C's "+0". */
1695 if (i >= DESTROY_amg)
1696 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1697 else /* Autoload taken care of below */
1698 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
46fc3d4c 1699 cv = 0;
89ffc314 1700 if (gv && (cv = GvCV(gv))) {
bfcb3514 1701 const char *hvname;
44a8e56a 1702 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
bfcb3514 1703 && strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
611c1e95
IZ
1704 /* This is a hack to support autoloading..., while
1705 knowing *which* methods were declared as overloaded. */
44a8e56a 1706 /* GvSV contains the name of the method. */
6136c704 1707 GV *ngv = NULL;
c69033f2 1708 SV *gvsv = GvSV(gv);
a0288114
AL
1709
1710 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1711 "\" for overloaded \"%s\" in package \"%.256s\"\n",
ca0270c4 1712 (void*)GvSV(gv), cp, hvname) );
c69033f2
NC
1713 if (!gvsv || !SvPOK(gvsv)
1714 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
dc848c6f 1715 FALSE)))
1716 {
a0288114 1717 /* Can be an import stub (created by "can"). */
242f8760 1718 if (destructing) {
c3a9a790 1719 return -1;
242f8760
RGS
1720 }
1721 else {
1722 const char * const name = (gvsv && SvPOK(gvsv)) ? SvPVX_const(gvsv) : "???";
1723 Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1724 "in package \"%.256s\"",
1725 (GvCVGEN(gv) ? "Stub found while resolving"
1726 : "Can't resolve"),
1727 name, cp, hvname);
1728 }
44a8e56a 1729 }
dc848c6f 1730 cv = GvCV(gv = ngv);
44a8e56a 1731 }
b464bac0 1732 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
bfcb3514 1733 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
44a8e56a 1734 GvNAME(CvGV(cv))) );
1735 filled = 1;
32251b26
IZ
1736 if (i < DESTROY_amg)
1737 have_ovl = 1;
611c1e95 1738 } else if (gv) { /* Autoloaded... */
ea726b52 1739 cv = MUTABLE_CV(gv);
611c1e95 1740 filled = 1;
44a8e56a 1741 }
ea726b52 1742 amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
a0d0e21e 1743 }
a0d0e21e 1744 if (filled) {
a6006777 1745 AMT_AMAGIC_on(&amt);
32251b26
IZ
1746 if (have_ovl)
1747 AMT_OVERLOADED_on(&amt);
ad64d0ec 1748 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
14befaf4 1749 (char*)&amt, sizeof(AMT));
32251b26 1750 return have_ovl;
a0d0e21e
LW
1751 }
1752 }
a6006777 1753 /* Here we have no table: */
9cbac4c7 1754 /* no_table: */
a6006777 1755 AMT_AMAGIC_off(&amt);
ad64d0ec 1756 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
14befaf4 1757 (char*)&amt, sizeof(AMTS));
c3a9a790 1758 return 0;
a0d0e21e
LW
1759}
1760
32251b26
IZ
1761
1762CV*
1763Perl_gv_handler(pTHX_ HV *stash, I32 id)
1764{
97aff369 1765 dVAR;
3f8f4626 1766 MAGIC *mg;
32251b26 1767 AMT *amtp;
e1a479c5 1768 U32 newgen;
9b439311 1769 struct mro_meta* stash_meta;
32251b26 1770
bfcb3514 1771 if (!stash || !HvNAME_get(stash))
601f1833 1772 return NULL;
e1a479c5 1773
9b439311
BB
1774 stash_meta = HvMROMETA(stash);
1775 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
e1a479c5 1776
ad64d0ec 1777 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
32251b26
IZ
1778 if (!mg) {
1779 do_update:
242f8760
RGS
1780 /* If we're looking up a destructor to invoke, we must avoid
1781 * that Gv_AMupdate croaks, because we might be dying already */
c3a9a790 1782 if (Gv_AMupdate(stash, id == DESTROY_amg) == -1) {
242f8760
RGS
1783 /* and if it didn't found a destructor, we fall back
1784 * to a simpler method that will only look for the
1785 * destructor instead of the whole magic */
1786 if (id == DESTROY_amg) {
1787 GV * const gv = gv_fetchmethod(stash, "DESTROY");
1788 if (gv)
1789 return GvCV(gv);
1790 }
1791 return NULL;
1792 }
ad64d0ec 1793 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
32251b26 1794 }
a9fd4e40 1795 assert(mg);
32251b26
IZ
1796 amtp = (AMT*)mg->mg_ptr;
1797 if ( amtp->was_ok_am != PL_amagic_generation
e1a479c5 1798 || amtp->was_ok_sub != newgen )
32251b26 1799 goto do_update;
3ad83ce7 1800 if (AMT_AMAGIC(amtp)) {
b7787f18 1801 CV * const ret = amtp->table[id];
3ad83ce7
AMS
1802 if (ret && isGV(ret)) { /* Autoloading stab */
1803 /* Passing it through may have resulted in a warning
1804 "Inherited AUTOLOAD for a non-method deprecated", since
1805 our caller is going through a function call, not a method call.
1806 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
890ce7af 1807 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
3ad83ce7
AMS
1808
1809 if (gv && GvCV(gv))
1810 return GvCV(gv);
1811 }
1812 return ret;
1813 }
a0288114 1814
601f1833 1815 return NULL;
32251b26
IZ
1816}
1817
1818
a0d0e21e 1819SV*
864dbfa3 1820Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
a0d0e21e 1821{
27da23d5 1822 dVAR;
b267980d 1823 MAGIC *mg;
9c5ffd7c 1824 CV *cv=NULL;
a0d0e21e 1825 CV **cvp=NULL, **ocvp=NULL;
9c5ffd7c 1826 AMT *amtp=NULL, *oamtp=NULL;
b464bac0
AL
1827 int off = 0, off1, lr = 0, notfound = 0;
1828 int postpr = 0, force_cpy = 0;
1829 int assign = AMGf_assign & flags;
1830 const int assignshift = assign ? 1 : 0;
497b47a8
JH
1831#ifdef DEBUGGING
1832 int fl=0;
497b47a8 1833#endif
25716404 1834 HV* stash=NULL;
7918f24d
NC
1835
1836 PERL_ARGS_ASSERT_AMAGIC_CALL;
1837
e46c382e
YK
1838 if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
1839 SV *lex_mask = Perl_refcounted_he_fetch(aTHX_ PL_curcop->cop_hints_hash,
1840 0, "overloading", 11, 0, 0);
1841
1842 if ( !lex_mask || !SvOK(lex_mask) )
1843 /* overloading lexically disabled */
1844 return NULL;
1845 else if ( lex_mask && SvPOK(lex_mask) ) {
1846 /* we have an entry in the hints hash, check if method has been
1847 * masked by overloading.pm */
d15cd831 1848 STRLEN len;
e46c382e 1849 const int offset = method / 8;
d87d3eed 1850 const int bit = method % 8;
e46c382e
YK
1851 char *pv = SvPV(lex_mask, len);
1852
d15cd831 1853 /* Bit set, so this overloading operator is disabled */
ed15e576 1854 if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
e46c382e
YK
1855 return NULL;
1856 }
1857 }
1858
a0d0e21e 1859 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
25716404 1860 && (stash = SvSTASH(SvRV(left)))
ad64d0ec 1861 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
b267980d 1862 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 1863 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
d4c19fe8 1864 : NULL))
b267980d 1865 && ((cv = cvp[off=method+assignshift])
748a9306
LW
1866 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1867 * usual method */
497b47a8
JH
1868 (
1869#ifdef DEBUGGING
1870 fl = 1,
a0288114 1871#endif
497b47a8 1872 cv = cvp[off=method])))) {
a0d0e21e
LW
1873 lr = -1; /* Call method for left argument */
1874 } else {
1875 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1876 int logic;
1877
1878 /* look for substituted methods */
ee239bfe 1879 /* In all the covered cases we should be called with assign==0. */
a0d0e21e
LW
1880 switch (method) {
1881 case inc_amg:
ee239bfe
IZ
1882 force_cpy = 1;
1883 if ((cv = cvp[off=add_ass_amg])
1884 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
3280af22 1885 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e
LW
1886 }
1887 break;
1888 case dec_amg:
ee239bfe
IZ
1889 force_cpy = 1;
1890 if ((cv = cvp[off = subtr_ass_amg])
1891 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
3280af22 1892 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e
LW
1893 }
1894 break;
1895 case bool__amg:
1896 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1897 break;
1898 case numer_amg:
1899 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1900 break;
1901 case string_amg:
1902 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1903 break;
b7787f18
AL
1904 case not_amg:
1905 (void)((cv = cvp[off=bool__amg])
1906 || (cv = cvp[off=numer_amg])
1907 || (cv = cvp[off=string_amg]));
1908 postpr = 1;
1909 break;
748a9306
LW
1910 case copy_amg:
1911 {
76e3520e
GS
1912 /*
1913 * SV* ref causes confusion with the interpreter variable of
1914 * the same name
1915 */
890ce7af 1916 SV* const tmpRef=SvRV(left);
76e3520e 1917 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
fc36a67e 1918 /*
1919 * Just to be extra cautious. Maybe in some
1920 * additional cases sv_setsv is safe, too.
1921 */
890ce7af 1922 SV* const newref = newSVsv(tmpRef);
748a9306 1923 SvOBJECT_on(newref);
96d4b0ee
NC
1924 /* As a bit of a source compatibility hack, SvAMAGIC() and
1925 friends dereference an RV, to behave the same was as when
1926 overloading was stored on the reference, not the referant.
1927 Hence we can't use SvAMAGIC_on()
1928 */
1929 SvFLAGS(newref) |= SVf_AMAGIC;
85fbaab2 1930 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
748a9306
LW
1931 return newref;
1932 }
1933 }
1934 break;
a0d0e21e 1935 case abs_amg:
b267980d 1936 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
a0d0e21e 1937 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
890ce7af 1938 SV* const nullsv=sv_2mortal(newSViv(0));
a0d0e21e 1939 if (off1==lt_amg) {
890ce7af 1940 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e
LW
1941 lt_amg,AMGf_noright);
1942 logic = SvTRUE(lessp);
1943 } else {
890ce7af 1944 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e
LW
1945 ncmp_amg,AMGf_noright);
1946 logic = (SvNV(lessp) < 0);
1947 }
1948 if (logic) {
1949 if (off==subtr_amg) {
1950 right = left;
748a9306 1951 left = nullsv;
a0d0e21e
LW
1952 lr = 1;
1953 }
1954 } else {
1955 return left;
1956 }
1957 }
1958 break;
1959 case neg_amg:
155aba94 1960 if ((cv = cvp[off=subtr_amg])) {
a0d0e21e
LW
1961 right = left;
1962 left = sv_2mortal(newSViv(0));
1963 lr = 1;
1964 }
1965 break;
f216259d 1966 case int_amg:
f5284f61 1967 case iter_amg: /* XXXX Eventually should do to_gv. */
c4c7412c 1968 case ftest_amg: /* XXXX Eventually should do to_gv. */
b267980d
NIS
1969 /* FAIL safe */
1970 return NULL; /* Delegate operation to standard mechanisms. */
1971 break;
f5284f61
IZ
1972 case to_sv_amg:
1973 case to_av_amg:
1974 case to_hv_amg:
1975 case to_gv_amg:
1976 case to_cv_amg:
1977 /* FAIL safe */
b267980d 1978 return left; /* Delegate operation to standard mechanisms. */
f5284f61 1979 break;
a0d0e21e
LW
1980 default:
1981 goto not_found;
1982 }
1983 if (!cv) goto not_found;
1984 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
25716404 1985 && (stash = SvSTASH(SvRV(right)))
ad64d0ec 1986 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
b267980d 1987 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 1988 ? (amtp = (AMT*)mg->mg_ptr)->table
d4c19fe8 1989 : NULL))
a0d0e21e
LW
1990 && (cv = cvp[off=method])) { /* Method for right
1991 * argument found */
1992 lr=1;
b267980d
NIS
1993 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1994 && (cvp=ocvp) && (lr = -1))
a0d0e21e
LW
1995 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1996 && !(flags & AMGf_unary)) {
1997 /* We look for substitution for
1998 * comparison operations and
fc36a67e 1999 * concatenation */
a0d0e21e
LW
2000 if (method==concat_amg || method==concat_ass_amg
2001 || method==repeat_amg || method==repeat_ass_amg) {
2002 return NULL; /* Delegate operation to string conversion */
2003 }
2004 off = -1;
2005 switch (method) {
2006 case lt_amg:
2007 case le_amg:
2008 case gt_amg:
2009 case ge_amg:
2010 case eq_amg:
2011 case ne_amg:
2012 postpr = 1; off=ncmp_amg; break;
2013 case slt_amg:
2014 case sle_amg:
2015 case sgt_amg:
2016 case sge_amg:
2017 case seq_amg:
2018 case sne_amg:
2019 postpr = 1; off=scmp_amg; break;
2020 }
2021 if (off != -1) cv = cvp[off];
2022 if (!cv) {
2023 goto not_found;
2024 }
2025 } else {
a6006777 2026 not_found: /* No method found, either report or croak */
b267980d 2027 switch (method) {
d11ee47c
RD
2028 case lt_amg:
2029 case le_amg:
2030 case gt_amg:
2031 case ge_amg:
2032 case eq_amg:
2033 case ne_amg:
2034 case slt_amg:
2035 case sle_amg:
2036 case sgt_amg:
2037 case sge_amg:
2038 case seq_amg:
2039 case sne_amg:
2040 postpr = 0; break;
b267980d
NIS
2041 case to_sv_amg:
2042 case to_av_amg:
2043 case to_hv_amg:
2044 case to_gv_amg:
2045 case to_cv_amg:
2046 /* FAIL safe */
2047 return left; /* Delegate operation to standard mechanisms. */
2048 break;
2049 }
a0d0e21e
LW
2050 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
2051 notfound = 1; lr = -1;
2052 } else if (cvp && (cv=cvp[nomethod_amg])) {
2053 notfound = 1; lr = 1;
4cc0ca18
NC
2054 } else if ((amtp && amtp->fallback >= AMGfallYES) && !DEBUG_o_TEST) {
2055 /* Skip generating the "no method found" message. */
2056 return NULL;
a0d0e21e 2057 } else {
46fc3d4c 2058 SV *msg;
774d564b 2059 if (off==-1) off=method;
b267980d 2060 msg = sv_2mortal(Perl_newSVpvf(aTHX_
a0288114 2061 "Operation \"%s\": no method found,%sargument %s%s%s%s",
89ffc314 2062 AMG_id2name(method + assignshift),
e7ea3e70 2063 (flags & AMGf_unary ? " " : "\n\tleft "),
b267980d 2064 SvAMAGIC(left)?
a0d0e21e
LW
2065 "in overloaded package ":
2066 "has no overloaded magic",
b267980d 2067 SvAMAGIC(left)?
bfcb3514 2068 HvNAME_get(SvSTASH(SvRV(left))):
a0d0e21e 2069 "",
b267980d 2070 SvAMAGIC(right)?
e7ea3e70 2071 ",\n\tright argument in overloaded package ":
b267980d 2072 (flags & AMGf_unary
e7ea3e70
IZ
2073 ? ""
2074 : ",\n\tright argument has no overloaded magic"),
b267980d 2075 SvAMAGIC(right)?
bfcb3514 2076 HvNAME_get(SvSTASH(SvRV(right))):
46fc3d4c 2077 ""));
a0d0e21e 2078 if (amtp && amtp->fallback >= AMGfallYES) {
b15aece3 2079 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
a0d0e21e 2080 } else {
be2597df 2081 Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
a0d0e21e
LW
2082 }
2083 return NULL;
2084 }
ee239bfe 2085 force_cpy = force_cpy || assign;
a0d0e21e
LW
2086 }
2087 }
497b47a8 2088#ifdef DEBUGGING
a0d0e21e 2089 if (!notfound) {
497b47a8 2090 DEBUG_o(Perl_deb(aTHX_
a0288114 2091 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
497b47a8
JH
2092 AMG_id2name(off),
2093 method+assignshift==off? "" :
a0288114 2094 " (initially \"",
497b47a8
JH
2095 method+assignshift==off? "" :
2096 AMG_id2name(method+assignshift),
a0288114 2097 method+assignshift==off? "" : "\")",
497b47a8
JH
2098 flags & AMGf_unary? "" :
2099 lr==1 ? " for right argument": " for left argument",
2100 flags & AMGf_unary? " for argument" : "",
bfcb3514 2101 stash ? HvNAME_get(stash) : "null",
497b47a8 2102 fl? ",\n\tassignment variant used": "") );
ee239bfe 2103 }
497b47a8 2104#endif
748a9306
LW
2105 /* Since we use shallow copy during assignment, we need
2106 * to dublicate the contents, probably calling user-supplied
2107 * version of copy operator
2108 */
ee239bfe
IZ
2109 /* We need to copy in following cases:
2110 * a) Assignment form was called.
2111 * assignshift==1, assign==T, method + 1 == off
2112 * b) Increment or decrement, called directly.
2113 * assignshift==0, assign==0, method + 0 == off
2114 * c) Increment or decrement, translated to assignment add/subtr.
b267980d 2115 * assignshift==0, assign==T,
ee239bfe
IZ
2116 * force_cpy == T
2117 * d) Increment or decrement, translated to nomethod.
b267980d 2118 * assignshift==0, assign==0,
ee239bfe
IZ
2119 * force_cpy == T
2120 * e) Assignment form translated to nomethod.
2121 * assignshift==1, assign==T, method + 1 != off
2122 * force_cpy == T
2123 */
2124 /* off is method, method+assignshift, or a result of opcode substitution.
2125 * In the latter case assignshift==0, so only notfound case is important.
2126 */
2127 if (( (method + assignshift == off)
2128 && (assign || (method == inc_amg) || (method == dec_amg)))
2129 || force_cpy)
2130 RvDEEPCP(left);
a0d0e21e
LW
2131 {
2132 dSP;
2133 BINOP myop;
2134 SV* res;
b7787f18 2135 const bool oldcatch = CATCH_GET;
a0d0e21e 2136
54310121 2137 CATCH_SET(TRUE);
a0d0e21e
LW
2138 Zero(&myop, 1, BINOP);
2139 myop.op_last = (OP *) &myop;
b37c2d43 2140 myop.op_next = NULL;
54310121 2141 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
a0d0e21e 2142
e788e7d3 2143 PUSHSTACKi(PERLSI_OVERLOAD);
a0d0e21e 2144 ENTER;
462e5cf6 2145 SAVEOP();
533c011a 2146 PL_op = (OP *) &myop;
3280af22 2147 if (PERLDB_SUB && PL_curstash != PL_debstash)
533c011a 2148 PL_op->op_private |= OPpENTERSUB_DB;
a0d0e21e 2149 PUTBACK;
cea2e8a9 2150 pp_pushmark();
a0d0e21e 2151
924508f0 2152 EXTEND(SP, notfound + 5);
a0d0e21e
LW
2153 PUSHs(lr>0? right: left);
2154 PUSHs(lr>0? left: right);
3280af22 2155 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
a0d0e21e 2156 if (notfound) {
59cd0e26
NC
2157 PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
2158 AMG_id2namelen(method + assignshift), SVs_TEMP));
a0d0e21e 2159 }
ad64d0ec 2160 PUSHs(MUTABLE_SV(cv));
a0d0e21e
LW
2161 PUTBACK;
2162
139d0ce6 2163 if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
cea2e8a9 2164 CALLRUNOPS(aTHX);
a0d0e21e
LW
2165 LEAVE;
2166 SPAGAIN;
2167
2168 res=POPs;
ebafeae7 2169 PUTBACK;
d3acc0f7 2170 POPSTACK;
54310121 2171 CATCH_SET(oldcatch);
a0d0e21e 2172
a0d0e21e 2173 if (postpr) {
b7787f18 2174 int ans;
a0d0e21e
LW
2175 switch (method) {
2176 case le_amg:
2177 case sle_amg:
2178 ans=SvIV(res)<=0; break;
2179 case lt_amg:
2180 case slt_amg:
2181 ans=SvIV(res)<0; break;
2182 case ge_amg:
2183 case sge_amg:
2184 ans=SvIV(res)>=0; break;
2185 case gt_amg:
2186 case sgt_amg:
2187 ans=SvIV(res)>0; break;
2188 case eq_amg:
2189 case seq_amg:
2190 ans=SvIV(res)==0; break;
2191 case ne_amg:
2192 case sne_amg:
2193 ans=SvIV(res)!=0; break;
2194 case inc_amg:
2195 case dec_amg:
bbce6d69 2196 SvSetSV(left,res); return left;
dc437b57 2197 case not_amg:
fe7ac86a 2198 ans=!SvTRUE(res); break;
b7787f18
AL
2199 default:
2200 ans=0; break;
a0d0e21e 2201 }
54310121 2202 return boolSV(ans);
748a9306
LW
2203 } else if (method==copy_amg) {
2204 if (!SvROK(res)) {
cea2e8a9 2205 Perl_croak(aTHX_ "Copy method did not return a reference");
748a9306
LW
2206 }
2207 return SvREFCNT_inc(SvRV(res));
a0d0e21e
LW
2208 } else {
2209 return res;
2210 }
2211 }
2212}
c9d5ac95
GS
2213
2214/*
7fc63493 2215=for apidoc is_gv_magical_sv
c9d5ac95
GS
2216
2217Returns C<TRUE> if given the name of a magical GV.
2218
2219Currently only useful internally when determining if a GV should be
2220created even in rvalue contexts.
2221
2222C<flags> is not used at present but available for future extension to
2223allow selecting particular classes of magical variable.
2224
b9b0e72c
NC
2225Currently assumes that C<name> is NUL terminated (as well as len being valid).
2226This assumption is met by all callers within the perl core, which all pass
2227pointers returned by SvPV.
2228
c9d5ac95
GS
2229=cut
2230*/
9d8f40c4 2231
c9d5ac95 2232bool
9d8f40c4 2233Perl_is_gv_magical_sv(pTHX_ SV *const name_sv, U32 flags)
c9d5ac95 2234{
9d8f40c4
NC
2235 STRLEN len;
2236 const char *const name = SvPV_const(name_sv, len);
9d4ba2ae 2237
9d8f40c4
NC
2238 PERL_UNUSED_ARG(flags);
2239 PERL_ARGS_ASSERT_IS_GV_MAGICAL_SV;
7918f24d 2240
b9b0e72c 2241 if (len > 1) {
b464bac0 2242 const char * const name1 = name + 1;
b9b0e72c
NC
2243 switch (*name) {
2244 case 'I':
f2df7081 2245 if (len == 3 && name[1] == 'S' && name[2] == 'A')
b9b0e72c
NC
2246 goto yes;
2247 break;
2248 case 'O':
9431620d 2249 if (len == 8 && strEQ(name1, "VERLOAD"))
b9b0e72c
NC
2250 goto yes;
2251 break;
2252 case 'S':
9431620d 2253 if (len == 3 && name[1] == 'I' && name[2] == 'G')
b9b0e72c
NC
2254 goto yes;
2255 break;
2256 /* Using ${^...} variables is likely to be sufficiently rare that
2257 it seems sensible to avoid the space hit of also checking the
2258 length. */
2259 case '\017': /* ${^OPEN} */
9431620d 2260 if (strEQ(name1, "PEN"))
b9b0e72c
NC
2261 goto yes;
2262 break;
2263 case '\024': /* ${^TAINT} */
9431620d 2264 if (strEQ(name1, "AINT"))
b9b0e72c
NC
2265 goto yes;
2266 break;
2267 case '\025': /* ${^UNICODE} */
9431620d 2268 if (strEQ(name1, "NICODE"))
b9b0e72c 2269 goto yes;
a0288114 2270 if (strEQ(name1, "TF8LOCALE"))
7cebcbc0 2271 goto yes;
b9b0e72c
NC
2272 break;
2273 case '\027': /* ${^WARNING_BITS} */
9431620d 2274 if (strEQ(name1, "ARNING_BITS"))
b9b0e72c
NC
2275 goto yes;
2276 break;
2277 case '1':
2278 case '2':
2279 case '3':
2280 case '4':
2281 case '5':
2282 case '6':
2283 case '7':
2284 case '8':
2285 case '9':
c9d5ac95 2286 {
7fc63493 2287 const char *end = name + len;
c9d5ac95
GS
2288 while (--end > name) {
2289 if (!isDIGIT(*end))
2290 return FALSE;
2291 }
b9b0e72c
NC
2292 goto yes;
2293 }
2294 }
2295 } else {
2296 /* Because we're already assuming that name is NUL terminated
2297 below, we can treat an empty name as "\0" */
2298 switch (*name) {
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 '<':
2316 case '>':
b9b0e72c
NC
2317 case '\\':
2318 case '/':
2319 case '|':
2320 case '+':
2321 case ';':
2322 case ']':
2323 case '\001': /* $^A */
2324 case '\003': /* $^C */
2325 case '\004': /* $^D */
2326 case '\005': /* $^E */
2327 case '\006': /* $^F */
2328 case '\010': /* $^H */
2329 case '\011': /* $^I, NOT \t in EBCDIC */
2330 case '\014': /* $^L */
2331 case '\016': /* $^N */
2332 case '\017': /* $^O */
2333 case '\020': /* $^P */
2334 case '\023': /* $^S */
2335 case '\024': /* $^T */
2336 case '\026': /* $^V */
2337 case '\027': /* $^W */
2338 case '1':
2339 case '2':
2340 case '3':
2341 case '4':
2342 case '5':
2343 case '6':
2344 case '7':
2345 case '8':
2346 case '9':
2347 yes:
2348 return TRUE;
2349 default:
2350 break;
c9d5ac95 2351 }
c9d5ac95
GS
2352 }
2353 return FALSE;
2354}
66610fdd 2355
f5c1e807
NC
2356void
2357Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
2358{
2359 dVAR;
acda4c6a 2360 U32 hash;
f5c1e807 2361
7918f24d 2362 PERL_ARGS_ASSERT_GV_NAME_SET;
f5c1e807
NC
2363 PERL_UNUSED_ARG(flags);
2364
acda4c6a
NC
2365 if (len > I32_MAX)
2366 Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
2367
ae8cc45f
NC
2368 if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
2369 unshare_hek(GvNAME_HEK(gv));
2370 }
2371
acda4c6a 2372 PERL_HASH(hash, name, len);
9f616d01 2373 GvNAME_HEK(gv) = share_hek(name, len, hash);
f5c1e807
NC
2374}
2375
66610fdd
RGS
2376/*
2377 * Local variables:
2378 * c-indentation-style: bsd
2379 * c-basic-offset: 4
2380 * indent-tabs-mode: t
2381 * End:
2382 *
37442d52
RGS
2383 * ex: set ts=8 sts=4 sw=4 noet:
2384 */