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