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