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