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