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