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