Fix worrying typo in handy.h :-s
[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 */
55d729e4 167 start_subparse(0,0); /* Create 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--) {
79072805 305 SV* sv = *svp++;
a0d0e21e 306 HV* 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) {
9607fc9c 323 HV* lastchance;
324
155aba94 325 if ((lastchance = gv_stashpvn("UNIVERSAL", 9, FALSE))) {
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 */
12bcd1a6 550 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && !method &&
599cee73 551 (GvCVGEN(gv) || GvSTASH(gv) != stash))
12bcd1a6 552 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
dc848c6f 553 "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
0dae17bd 554 packname, (int)len, name);
44a8e56a 555
adb5a9ae 556 if (CvXSUB(cv)) {
557 /* rather than lookup/init $AUTOLOAD here
558 * only to have the XSUB do another lookup for $AUTOLOAD
559 * and split that value on the last '::',
560 * pass along the same data via some unused fields in the CV
561 */
562 CvSTASH(cv) = stash;
f880fe2f 563 SvPV_set(cv, (char *)name); /* cast to lose constness warning */
b162af07 564 SvCUR_set(cv, len);
adb5a9ae 565 return gv;
566 }
adb5a9ae 567
44a8e56a 568 /*
569 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
570 * The subroutine's original name may not be "AUTOLOAD", so we don't
571 * use that, but for lack of anything better we will use the sub's
572 * original package to look up $AUTOLOAD.
573 */
574 varstash = GvSTASH(CvGV(cv));
5c7983e5 575 vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
3d35f11b 576 ENTER;
577
c69033f2 578 if (!isGV(vargv)) {
5c7983e5 579 gv_init(vargv, varstash, S_autoload, S_autolen, FALSE);
c69033f2 580#ifdef PERL_DONT_CREATE_GVSV
581 GvSV(vargv) = NEWSV(72,0);
582#endif
583 }
3d35f11b 584 LEAVE;
e203899d 585 varsv = GvSVn(vargv);
7423f6db 586 sv_setpvn(varsv, packname, packname_len);
44a8e56a 587 sv_catpvn(varsv, "::", 2);
588 sv_catpvn(varsv, name, len);
589 SvTAINTED_off(varsv);
a0d0e21e 590 return gv;
591}
592
d2c93421 593/* The "gv" parameter should be the glob known to Perl code as *!
594 * The scalar must already have been magicalized.
595 */
596STATIC void
597S_require_errno(pTHX_ GV *gv)
598{
27da23d5 599 dVAR;
d2c93421 600 HV* stash = gv_stashpvn("Errno",5,FALSE);
601
a0288114 602 if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
d2c93421 603 dSP;
604 PUTBACK;
605 ENTER;
606 save_scalar(gv); /* keep the value of $! */
84f1fa11 607 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
608 newSVpvn("Errno",5), Nullsv);
d2c93421 609 LEAVE;
610 SPAGAIN;
611 stash = gv_stashpvn("Errno",5,FALSE);
612 if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
613 Perl_croak(aTHX_ "Can't use %%! because Errno.pm is not available");
614 }
615}
616
954c1994 617/*
618=for apidoc gv_stashpv
619
386d01d6 620Returns a pointer to the stash for a specified package. C<name> should
bc96cb06 621be a valid UTF-8 string and must be null-terminated. If C<create> is set
622then the package will be created if it does not already exist. If C<create>
623is not set and the package does not exist then NULL is returned.
954c1994 624
625=cut
626*/
627
a0d0e21e 628HV*
864dbfa3 629Perl_gv_stashpv(pTHX_ const char *name, I32 create)
a0d0e21e 630{
dc437b57 631 return gv_stashpvn(name, strlen(name), create);
632}
633
bc96cb06 634/*
635=for apidoc gv_stashpvn
636
637Returns a pointer to the stash for a specified package. C<name> should
638be a valid UTF-8 string. The C<namelen> parameter indicates the length of
639the C<name>, in bytes. If C<create> is set then the package will be
640created if it does not already exist. If C<create> is not set and the
641package does not exist then NULL is returned.
642
643=cut
644*/
645
dc437b57 646HV*
864dbfa3 647Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 create)
dc437b57 648{
46fc3d4c 649 char smallbuf[256];
650 char *tmpbuf;
a0d0e21e 651 HV *stash;
652 GV *tmpgv;
dc437b57 653
46fc3d4c 654 if (namelen + 3 < sizeof smallbuf)
655 tmpbuf = smallbuf;
656 else
a02a5408 657 Newx(tmpbuf, namelen + 3, char);
dc437b57 658 Copy(name,tmpbuf,namelen,char);
659 tmpbuf[namelen++] = ':';
660 tmpbuf[namelen++] = ':';
661 tmpbuf[namelen] = '\0';
46fc3d4c 662 tmpgv = gv_fetchpv(tmpbuf, create, SVt_PVHV);
663 if (tmpbuf != smallbuf)
664 Safefree(tmpbuf);
a0d0e21e 665 if (!tmpgv)
666 return 0;
667 if (!GvHV(tmpgv))
668 GvHV(tmpgv) = newHV();
669 stash = GvHV(tmpgv);
bfcb3514 670 if (!HvNAME_get(stash))
671 Perl_hv_name_set(aTHX_ stash, name, namelen, 0);
a0d0e21e 672 return stash;
463ee0b2 673}
674
954c1994 675/*
676=for apidoc gv_stashsv
677
386d01d6 678Returns a pointer to the stash for a specified package, which must be a
679valid UTF-8 string. See C<gv_stashpv>.
954c1994 680
681=cut
682*/
683
a0d0e21e 684HV*
864dbfa3 685Perl_gv_stashsv(pTHX_ SV *sv, I32 create)
a0d0e21e 686{
dc437b57 687 STRLEN len;
9d4ba2ae 688 const char * const ptr = SvPV_const(sv,len);
dc437b57 689 return gv_stashpvn(ptr, len, create);
a0d0e21e 690}
691
692
463ee0b2 693GV *
7a5fd60d 694Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) {
b7787f18 695 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
7a5fd60d 696}
697
698GV *
699Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, I32 sv_type) {
700 STRLEN len;
9d4ba2ae 701 const char * const nambeg = SvPV_const(name, len);
7a5fd60d 702 return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
703}
704
705GV *
706Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
707 I32 sv_type)
79072805 708{
08105a92 709 register const char *name = nambeg;
463ee0b2 710 register GV *gv = 0;
79072805 711 GV**gvp;
79072805 712 I32 len;
08105a92 713 register const char *namend;
463ee0b2 714 HV *stash = 0;
dd374669 715 const I32 add = flags & ~SVf_UTF8;
890ce7af 716
717 PERL_UNUSED_ARG(full_len);
79072805 718
c07a80fd 719 if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
720 name++;
721
79072805 722 for (namend = name; *namend; namend++) {
1d7c1841 723 if ((*namend == ':' && namend[1] == ':')
724 || (*namend == '\'' && namend[1]))
463ee0b2 725 {
463ee0b2 726 if (!stash)
3280af22 727 stash = PL_defstash;
dc437b57 728 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
a0d0e21e 729 return Nullgv;
463ee0b2 730
85e6fe83 731 len = namend - name;
732 if (len > 0) {
3c78fafa 733 char smallbuf[256];
62b57502 734 char *tmpbuf;
62b57502 735
25c09a70 736 if (len + 3 < sizeof (smallbuf))
3c78fafa 737 tmpbuf = smallbuf;
62b57502 738 else
a02a5408 739 Newx(tmpbuf, len+3, char);
a0d0e21e 740 Copy(name, tmpbuf, len, char);
741 tmpbuf[len++] = ':';
742 tmpbuf[len++] = ':';
743 tmpbuf[len] = '\0';
463ee0b2 744 gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
6fa846a0 745 gv = gvp ? *gvp : Nullgv;
3280af22 746 if (gv && gv != (GV*)&PL_sv_undef) {
6fa846a0 747 if (SvTYPE(gv) != SVt_PVGV)
0f303493 748 gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
6fa846a0 749 else
750 GvMULTI_on(gv);
751 }
3c78fafa 752 if (tmpbuf != smallbuf)
62b57502 753 Safefree(tmpbuf);
3280af22 754 if (!gv || gv == (GV*)&PL_sv_undef)
a0d0e21e 755 return Nullgv;
85e6fe83 756
463ee0b2 757 if (!(stash = GvHV(gv)))
758 stash = GvHV(gv) = newHV();
85e6fe83 759
bfcb3514 760 if (!HvNAME_get(stash))
6e3207c2 761 Perl_hv_name_set(aTHX_ stash, nambeg, namend - nambeg, 0);
463ee0b2 762 }
763
764 if (*namend == ':')
765 namend++;
766 namend++;
767 name = namend;
768 if (!*name)
3280af22 769 return gv ? gv : (GV*)*hv_fetch(PL_defstash, "main::", 6, TRUE);
79072805 770 }
79072805 771 }
a0d0e21e 772 len = namend - name;
463ee0b2 773
774 /* No stash in name, so see how we can default */
775
776 if (!stash) {
7e2040f0 777 if (isIDFIRST_lazy(name)) {
9607fc9c 778 bool global = FALSE;
779
18ea00d7 780 /* name is always \0 terminated, and initial \0 wouldn't return
781 true from isIDFIRST_lazy, so we know that name[1] is defined */
782 switch (name[1]) {
783 case '\0':
784 if (*name == '_')
9d116dd7 785 global = TRUE;
18ea00d7 786 break;
787 case 'N':
788 if (strEQ(name, "INC") || strEQ(name, "ENV"))
9d116dd7 789 global = TRUE;
18ea00d7 790 break;
791 case 'I':
792 if (strEQ(name, "SIG"))
9d116dd7 793 global = TRUE;
18ea00d7 794 break;
795 case 'T':
796 if (strEQ(name, "STDIN") || strEQ(name, "STDOUT") ||
797 strEQ(name, "STDERR"))
463ee0b2 798 global = TRUE;
18ea00d7 799 break;
800 case 'R':
801 if (strEQ(name, "ARGV") || strEQ(name, "ARGVOUT"))
802 global = TRUE;
803 break;
463ee0b2 804 }
9607fc9c 805
463ee0b2 806 if (global)
3280af22 807 stash = PL_defstash;
923e4eb5 808 else if (IN_PERL_COMPILETIME) {
3280af22 809 stash = PL_curstash;
810 if (add && (PL_hints & HINT_STRICT_VARS) &&
748a9306 811 sv_type != SVt_PVCV &&
812 sv_type != SVt_PVGV &&
4633a7c4 813 sv_type != SVt_PVFM &&
c07a80fd 814 sv_type != SVt_PVIO &&
70ec6265 815 !(len == 1 && sv_type == SVt_PV &&
816 (*name == 'a' || *name == 'b')) )
748a9306 817 {
4633a7c4 818 gvp = (GV**)hv_fetch(stash,name,len,0);
819 if (!gvp ||
3280af22 820 *gvp == (GV*)&PL_sv_undef ||
a5f75d66 821 SvTYPE(*gvp) != SVt_PVGV)
822 {
4633a7c4 823 stash = 0;
a5f75d66 824 }
155aba94 825 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
826 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
827 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
4633a7c4 828 {
cea2e8a9 829 Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
4633a7c4 830 sv_type == SVt_PVAV ? '@' :
831 sv_type == SVt_PVHV ? '%' : '$',
832 name);
8ebc5c01 833 if (GvCVu(*gvp))
cc507455 834 Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
a0d0e21e 835 stash = 0;
4633a7c4 836 }
a0d0e21e 837 }
85e6fe83 838 }
463ee0b2 839 else
1d7c1841 840 stash = CopSTASH(PL_curcop);
463ee0b2 841 }
842 else
3280af22 843 stash = PL_defstash;
463ee0b2 844 }
845
846 /* By this point we should have a stash and a name */
847
a0d0e21e 848 if (!stash) {
5a844595 849 if (add) {
9d4ba2ae 850 SV * const err = Perl_mess(aTHX_
5a844595 851 "Global symbol \"%s%s\" requires explicit package name",
852 (sv_type == SVt_PV ? "$"
853 : sv_type == SVt_PVAV ? "@"
854 : sv_type == SVt_PVHV ? "%"
608b3986 855 : ""), name);
856 if (USE_UTF8_IN_NAMES)
857 SvUTF8_on(err);
858 qerror(err);
d7aacf4e 859 stash = GvHV(gv_fetchpv("<none>::", GV_ADDMULTI, SVt_PVHV));
a0d0e21e 860 }
d7aacf4e 861 else
862 return Nullgv;
a0d0e21e 863 }
864
865 if (!SvREFCNT(stash)) /* symbol table under destruction */
866 return Nullgv;
867
79072805 868 gvp = (GV**)hv_fetch(stash,name,len,add);
3280af22 869 if (!gvp || *gvp == (GV*)&PL_sv_undef)
79072805 870 return Nullgv;
871 gv = *gvp;
872 if (SvTYPE(gv) == SVt_PVGV) {
a0d0e21e 873 if (add) {
a5f75d66 874 GvMULTI_on(gv);
a0d0e21e 875 gv_init_sv(gv, sv_type);
d2c93421 876 if (*name=='!' && sv_type == SVt_PVHV && len==1)
877 require_errno(gv);
a0d0e21e 878 }
79072805 879 return gv;
55d729e4 880 } else if (add & GV_NOINIT) {
881 return gv;
79072805 882 }
93a17b20 883
884 /* Adding a new symbol */
885
0453d815 886 if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
9014280d 887 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
55d729e4 888 gv_init(gv, stash, name, len, add & GV_ADDMULTI);
a0d0e21e 889 gv_init_sv(gv, sv_type);
93a17b20 890
a0288114 891 if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
7272584d 892 : (PL_dowarn & G_WARN_ON ) ) )
0453d815 893 GvMULTI_on(gv) ;
894
93a17b20 895 /* set up magic where warranted */
cc4c2da6 896 if (len > 1) {
9431620d 897#ifndef EBCDIC
cc4c2da6 898 if (*name > 'V' ) {
899 /* Nothing else to do.
91f565cb 900 The compiler will probably turn the switch statement into a
cc4c2da6 901 branch table. Make sure we avoid even that small overhead for
902 the common case of lower case variable names. */
9431620d 903 } else
904#endif
905 {
b464bac0 906 const char * const name2 = name + 1;
cc4c2da6 907 switch (*name) {
908 case 'A':
909 if (strEQ(name2, "RGV")) {
910 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
911 }
912 break;
913 case 'E':
914 if (strnEQ(name2, "XPORT", 5))
915 GvMULTI_on(gv);
916 break;
917 case 'I':
918 if (strEQ(name2, "SA")) {
9d4ba2ae 919 AV* const av = GvAVn(gv);
cc4c2da6 920 GvMULTI_on(gv);
921 sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
922 /* NOTE: No support for tied ISA */
923 if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
924 && AvFILLp(av) == -1)
925 {
e1ec3a88 926 const char *pname;
cc4c2da6 927 av_push(av, newSVpvn(pname = "NDBM_File",9));
928 gv_stashpvn(pname, 9, TRUE);
929 av_push(av, newSVpvn(pname = "DB_File",7));
930 gv_stashpvn(pname, 7, TRUE);
931 av_push(av, newSVpvn(pname = "GDBM_File",9));
932 gv_stashpvn(pname, 9, TRUE);
933 av_push(av, newSVpvn(pname = "SDBM_File",9));
934 gv_stashpvn(pname, 9, TRUE);
935 av_push(av, newSVpvn(pname = "ODBM_File",9));
936 gv_stashpvn(pname, 9, TRUE);
937 }
938 }
939 break;
940 case 'O':
941 if (strEQ(name2, "VERLOAD")) {
9d4ba2ae 942 HV* const hv = GvHVn(gv);
cc4c2da6 943 GvMULTI_on(gv);
944 hv_magic(hv, Nullgv, PERL_MAGIC_overload);
945 }
946 break;
947 case 'S':
948 if (strEQ(name2, "IG")) {
949 HV *hv;
950 I32 i;
951 if (!PL_psig_ptr) {
a02a5408 952 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
953 Newxz(PL_psig_name, SIG_SIZE, SV*);
954 Newxz(PL_psig_pend, SIG_SIZE, int);
cc4c2da6 955 }
956 GvMULTI_on(gv);
957 hv = GvHVn(gv);
958 hv_magic(hv, Nullgv, PERL_MAGIC_sig);
959 for (i = 1; i < SIG_SIZE; i++) {
9d4ba2ae 960 SV ** const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
cc4c2da6 961 if (init)
962 sv_setsv(*init, &PL_sv_undef);
963 PL_psig_ptr[i] = 0;
964 PL_psig_name[i] = 0;
965 PL_psig_pend[i] = 0;
966 }
967 }
968 break;
969 case 'V':
970 if (strEQ(name2, "ERSION"))
971 GvMULTI_on(gv);
972 break;
e5218da5 973 case '\003': /* $^CHILD_ERROR_NATIVE */
974 if (strEQ(name2, "HILD_ERROR_NATIVE"))
975 goto magicalize;
976 break;
cc4c2da6 977 case '\005': /* $^ENCODING */
978 if (strEQ(name2, "NCODING"))
979 goto magicalize;
980 break;
981 case '\017': /* $^OPEN */
982 if (strEQ(name2, "PEN"))
983 goto magicalize;
984 break;
985 case '\024': /* ${^TAINT} */
986 if (strEQ(name2, "AINT"))
987 goto ro_magicalize;
988 break;
7cebcbc0 989 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
a0288114 990 if (strEQ(name2, "NICODE"))
cc4c2da6 991 goto ro_magicalize;
a0288114 992 if (strEQ(name2, "TF8LOCALE"))
7cebcbc0 993 goto ro_magicalize;
cc4c2da6 994 break;
995 case '\027': /* $^WARNING_BITS */
996 if (strEQ(name2, "ARNING_BITS"))
997 goto magicalize;
998 break;
999 case '1':
1000 case '2':
1001 case '3':
1002 case '4':
1003 case '5':
1004 case '6':
1005 case '7':
1006 case '8':
1007 case '9':
85e6fe83 1008 {
cc4c2da6 1009 /* ensures variable is only digits */
1010 /* ${"1foo"} fails this test (and is thus writeable) */
1011 /* added by japhy, but borrowed from is_gv_magical */
1012 const char *end = name + len;
1013 while (--end > name) {
1014 if (!isDIGIT(*end)) return gv;
1015 }
1016 goto ro_magicalize;
1d7c1841 1017 }
dc437b57 1018 }
93a17b20 1019 }
392db708 1020 } else {
1021 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1022 be case '\0' in this switch statement (ie a default case) */
cc4c2da6 1023 switch (*name) {
1024 case '&':
1025 case '`':
1026 case '\'':
1027 if (
1028 sv_type == SVt_PVAV ||
1029 sv_type == SVt_PVHV ||
1030 sv_type == SVt_PVCV ||
1031 sv_type == SVt_PVFM ||
1032 sv_type == SVt_PVIO
1033 ) { break; }
1034 PL_sawampersand = TRUE;
1035 goto ro_magicalize;
1036
1037 case ':':
c69033f2 1038 sv_setpv(GvSVn(gv),PL_chopset);
cc4c2da6 1039 goto magicalize;
1040
1041 case '?':
ff0cee69 1042#ifdef COMPLEX_STATUS
c69033f2 1043 SvUPGRADE(GvSVn(gv), SVt_PVLV);
ff0cee69 1044#endif
cc4c2da6 1045 goto magicalize;
ff0cee69 1046
cc4c2da6 1047 case '!':
d2c93421 1048
cc4c2da6 1049 /* If %! has been used, automatically load Errno.pm.
1050 The require will itself set errno, so in order to
1051 preserve its value we have to set up the magic
1052 now (rather than going to magicalize)
1053 */
d2c93421 1054
c69033f2 1055 sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
d2c93421 1056
cc4c2da6 1057 if (sv_type == SVt_PVHV)
1058 require_errno(gv);
d2c93421 1059
6cef1e77 1060 break;
cc4c2da6 1061 case '-':
1062 {
9d4ba2ae 1063 AV* const av = GvAVn(gv);
14befaf4 1064 sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
03a27ae7 1065 SvREADONLY_on(av);
cc4c2da6 1066 goto magicalize;
1067 }
1068 case '*':
cc4c2da6 1069 case '#':
1070 if (sv_type == SVt_PV && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
1071 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
8ae1fe26 1072 "$%c is no longer supported", *name);
1073 break;
cc4c2da6 1074 case '|':
c69033f2 1075 sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
cc4c2da6 1076 goto magicalize;
1077
1078 case '+':
1079 {
9d4ba2ae 1080 AV* const av = GvAVn(gv);
14befaf4 1081 sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
03a27ae7 1082 SvREADONLY_on(av);
cc4c2da6 1083 /* FALL THROUGH */
e521374c 1084 }
cc4c2da6 1085 case '\023': /* $^S */
1086 case '1':
1087 case '2':
1088 case '3':
1089 case '4':
1090 case '5':
1091 case '6':
1092 case '7':
1093 case '8':
1094 case '9':
1095 ro_magicalize:
c69033f2 1096 SvREADONLY_on(GvSVn(gv));
cc4c2da6 1097 /* FALL THROUGH */
1098 case '[':
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 '\001': /* $^A */
1112 case '\003': /* $^C */
1113 case '\004': /* $^D */
1114 case '\005': /* $^E */
1115 case '\006': /* $^F */
1116 case '\010': /* $^H */
1117 case '\011': /* $^I, NOT \t in EBCDIC */
1118 case '\016': /* $^N */
1119 case '\017': /* $^O */
1120 case '\020': /* $^P */
1121 case '\024': /* $^T */
1122 case '\027': /* $^W */
1123 magicalize:
c69033f2 1124 sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
cc4c2da6 1125 break;
e521374c 1126
cc4c2da6 1127 case '\014': /* $^L */
c69033f2 1128 sv_setpvn(GvSVn(gv),"\f",1);
1129 PL_formfeed = GvSVn(gv);
463ee0b2 1130 break;
cc4c2da6 1131 case ';':
c69033f2 1132 sv_setpvn(GvSVn(gv),"\034",1);
463ee0b2 1133 break;
cc4c2da6 1134 case ']':
1135 {
c69033f2 1136 SV * const sv = GvSVn(gv);
d7aa5382 1137 if (!sv_derived_from(PL_patchlevel, "version"))
1138 (void *)upg_version(PL_patchlevel);
7d54d38e 1139 GvSV(gv) = vnumify(PL_patchlevel);
1140 SvREADONLY_on(GvSV(gv));
1141 SvREFCNT_dec(sv);
93a17b20 1142 }
1143 break;
cc4c2da6 1144 case '\026': /* $^V */
1145 {
c69033f2 1146 SV * const sv = GvSVn(gv);
f9be5ac8 1147 GvSV(gv) = new_version(PL_patchlevel);
1148 SvREADONLY_on(GvSV(gv));
1149 SvREFCNT_dec(sv);
16070b82 1150 }
1151 break;
cc4c2da6 1152 }
79072805 1153 }
93a17b20 1154 return gv;
79072805 1155}
1156
1157void
35a4481c 1158Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 1159{
35a4481c 1160 const char *name;
7423f6db 1161 STRLEN namelen;
35a4481c 1162 const HV * const hv = GvSTASH(gv);
43693395 1163 if (!hv) {
0c34ef67 1164 SvOK_off(sv);
43693395 1165 return;
1166 }
1167 sv_setpv(sv, prefix ? prefix : "");
a0288114 1168
bfcb3514 1169 name = HvNAME_get(hv);
7423f6db 1170 if (name) {
1171 namelen = HvNAMELEN_get(hv);
1172 } else {
e27ad1f2 1173 name = "__ANON__";
7423f6db 1174 namelen = 8;
1175 }
a0288114 1176
e27ad1f2 1177 if (keepmain || strNE(name, "main")) {
7423f6db 1178 sv_catpvn(sv,name,namelen);
6a7a3232 1179 sv_catpvn(sv,"::", 2);
43693395 1180 }
257984c0 1181 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
43693395 1182}
1183
1184void
35a4481c 1185Perl_gv_fullname3(pTHX_ SV *sv, const GV *gv, const char *prefix)
79072805 1186{
84e79d79 1187 gv_fullname4(sv, gv, prefix, TRUE);
79072805 1188}
1189
1190void
35a4481c 1191Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 1192{
35a4481c 1193 const GV *egv = GvEGV(gv);
43693395 1194 if (!egv)
1195 egv = gv;
1196 gv_fullname4(sv, egv, prefix, keepmain);
1197}
1198
1199void
35a4481c 1200Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix)
79072805 1201{
84e79d79 1202 gv_efullname4(sv, gv, prefix, TRUE);
f6aff53a 1203}
1204
35a4481c 1205/* compatibility with versions <= 5.003. */
f6aff53a 1206void
35a4481c 1207Perl_gv_fullname(pTHX_ SV *sv, const GV *gv)
f6aff53a 1208{
35a4481c 1209 gv_fullname3(sv, gv, sv == (const SV*)gv ? "*" : "");
f6aff53a 1210}
1211
35a4481c 1212/* compatibility with versions <= 5.003. */
f6aff53a 1213void
35a4481c 1214Perl_gv_efullname(pTHX_ SV *sv, const GV *gv)
f6aff53a 1215{
e1ec3a88 1216 gv_efullname3(sv, gv, sv == (const SV*)gv ? "*" : "");
79072805 1217}
1218
1219IO *
864dbfa3 1220Perl_newIO(pTHX)
79072805 1221{
8990e307 1222 GV *iogv;
b7787f18 1223 IO * const io = (IO*)NEWSV(0,0);
8990e307 1224
a0d0e21e 1225 sv_upgrade((SV *)io,SVt_PVIO);
8990e307 1226 SvREFCNT(io) = 1;
1227 SvOBJECT_on(io);
b464bac0 1228 /* Clear the stashcache because a new IO could overrule a package name */
081fc587 1229 hv_clear(PL_stashcache);
c9de509e 1230 iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
5f2d631d 1231 /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1232 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
c9de509e 1233 iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
b162af07 1234 SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
79072805 1235 return io;
1236}
1237
1238void
864dbfa3 1239Perl_gv_check(pTHX_ HV *stash)
79072805 1240{
79072805 1241 register I32 i;
463ee0b2 1242
8990e307 1243 if (!HvARRAY(stash))
1244 return;
a0d0e21e 1245 for (i = 0; i <= (I32) HvMAX(stash); i++) {
e1ec3a88 1246 const HE *entry;
dc437b57 1247 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
b7787f18 1248 register GV *gv;
1249 HV *hv;
dc437b57 1250 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
b862623f 1251 (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
a0d0e21e 1252 {
19b6c847 1253 if (hv != PL_defstash && hv != stash)
a0d0e21e 1254 gv_check(hv); /* nested package */
1255 }
dc437b57 1256 else if (isALPHA(*HeKEY(entry))) {
e1ec3a88 1257 const char *file;
dc437b57 1258 gv = (GV*)HeVAL(entry);
55d729e4 1259 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
463ee0b2 1260 continue;
1d7c1841 1261 file = GvFILE(gv);
1262 /* performance hack: if filename is absolute and it's a standard
1263 * module, don't bother warning */
1264 if (file
1265 && PERL_FILE_IS_ABSOLUTE(file)
6eb630b7 1266#ifdef MACOS_TRADITIONAL
1267 && (instr(file, ":lib:")
1268#else
1269 && (instr(file, "/lib/")
1270#endif
1271 || instr(file, ".pm")))
1d7c1841 1272 {
8990e307 1273 continue;
1d7c1841 1274 }
1275 CopLINE_set(PL_curcop, GvLINE(gv));
1276#ifdef USE_ITHREADS
dd374669 1277 CopFILE(PL_curcop) = (char *)file; /* set for warning */
1d7c1841 1278#else
1279 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1280#endif
9014280d 1281 Perl_warner(aTHX_ packWARN(WARN_ONCE),
599cee73 1282 "Name \"%s::%s\" used only once: possible typo",
bfcb3514 1283 HvNAME_get(stash), GvNAME(gv));
463ee0b2 1284 }
79072805 1285 }
1286 }
1287}
1288
1289GV *
e1ec3a88 1290Perl_newGVgen(pTHX_ const char *pack)
79072805 1291{
cea2e8a9 1292 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
46fc3d4c 1293 TRUE, SVt_PVGV);
79072805 1294}
1295
1296/* hopefully this is only called on local symbol table entries */
1297
1298GP*
864dbfa3 1299Perl_gp_ref(pTHX_ GP *gp)
79072805 1300{
1d7c1841 1301 if (!gp)
1302 return (GP*)NULL;
79072805 1303 gp->gp_refcnt++;
44a8e56a 1304 if (gp->gp_cv) {
1305 if (gp->gp_cvgen) {
1306 /* multi-named GPs cannot be used for method cache */
1307 SvREFCNT_dec(gp->gp_cv);
1308 gp->gp_cv = Nullcv;
1309 gp->gp_cvgen = 0;
1310 }
1311 else {
1312 /* Adding a new name to a subroutine invalidates method cache */
3280af22 1313 PL_sub_generation++;
44a8e56a 1314 }
1315 }
79072805 1316 return gp;
79072805 1317}
1318
1319void
864dbfa3 1320Perl_gp_free(pTHX_ GV *gv)
79072805 1321{
79072805 1322 GP* gp;
1323
1324 if (!gv || !(gp = GvGP(gv)))
1325 return;
f248d071 1326 if (gp->gp_refcnt == 0) {
1327 if (ckWARN_d(WARN_INTERNAL))
9014280d 1328 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc 1329 "Attempt to free unreferenced glob pointers"
1330 pTHX__FORMAT pTHX__VALUE);
79072805 1331 return;
1332 }
44a8e56a 1333 if (gp->gp_cv) {
1334 /* Deleting the name of a subroutine invalidates method cache */
3280af22 1335 PL_sub_generation++;
44a8e56a 1336 }
748a9306 1337 if (--gp->gp_refcnt > 0) {
1338 if (gp->gp_egv == gv)
1339 gp->gp_egv = 0;
79072805 1340 return;
748a9306 1341 }
79072805 1342
13207a71 1343 if (gp->gp_sv) SvREFCNT_dec(gp->gp_sv);
8926f269 1344 if (gp->gp_av) SvREFCNT_dec(gp->gp_av);
bfcb3514 1345 /* FIXME - another reference loop GV -> symtab -> GV ?
1346 Somehow gp->gp_hv can end up pointing at freed garbage. */
1347 if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
bfcb3514 1348 const char *hvname = HvNAME_get(gp->gp_hv);
1349 if (PL_stashcache && hvname)
7423f6db 1350 hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
1351 G_DISCARD);
bfcb3514 1352 SvREFCNT_dec(gp->gp_hv);
13207a71 1353 }
1354 if (gp->gp_io) SvREFCNT_dec(gp->gp_io);
1355 if (gp->gp_cv) SvREFCNT_dec(gp->gp_cv);
1356 if (gp->gp_form) SvREFCNT_dec(gp->gp_form);
748a9306 1357
79072805 1358 Safefree(gp);
1359 GvGP(gv) = 0;
1360}
1361
d460ef45 1362int
1363Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1364{
53c1dcc0 1365 AMT * const amtp = (AMT*)mg->mg_ptr;
1366 PERL_UNUSED_ARG(sv);
dd374669 1367
d460ef45 1368 if (amtp && AMT_AMAGIC(amtp)) {
1369 int i;
1370 for (i = 1; i < NofAMmeth; i++) {
53c1dcc0 1371 CV * const cv = amtp->table[i];
d460ef45 1372 if (cv != Nullcv) {
1373 SvREFCNT_dec((SV *) cv);
1374 amtp->table[i] = Nullcv;
1375 }
1376 }
1377 }
1378 return 0;
1379}
1380
a0d0e21e 1381/* Updates and caches the CV's */
1382
1383bool
864dbfa3 1384Perl_Gv_AMupdate(pTHX_ HV *stash)
a0d0e21e 1385{
53c1dcc0 1386 MAGIC* const mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1387 AMT * const amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
a6006777 1388 AMT amt;
a0d0e21e 1389
3280af22 1390 if (mg && amtp->was_ok_am == PL_amagic_generation
1391 && amtp->was_ok_sub == PL_sub_generation)
eb160463 1392 return (bool)AMT_OVERLOADED(amtp);
14befaf4 1393 sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
a0d0e21e 1394
bfcb3514 1395 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
a0d0e21e 1396
d460ef45 1397 Zero(&amt,1,AMT);
3280af22 1398 amt.was_ok_am = PL_amagic_generation;
1399 amt.was_ok_sub = PL_sub_generation;
a6006777 1400 amt.fallback = AMGfallNO;
1401 amt.flags = 0;
1402
a6006777 1403 {
32251b26 1404 int filled = 0, have_ovl = 0;
1405 int i, lim = 1;
a6006777 1406
22c35a8c 1407 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
a6006777 1408
89ffc314 1409 /* Try to find via inheritance. */
53c1dcc0 1410 GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1411 SV * const sv = gv ? GvSV(gv) : NULL;
1412 CV* cv;
89ffc314 1413
1414 if (!gv)
32251b26 1415 lim = DESTROY_amg; /* Skip overloading entries. */
c69033f2 1416#ifdef PERL_DONT_CREATE_GVSV
1417 else if (!sv) {
1418 /* Equivalent to !SvTRUE and !SvOK */
1419 }
1420#endif
89ffc314 1421 else if (SvTRUE(sv))
1422 amt.fallback=AMGfallYES;
1423 else if (SvOK(sv))
1424 amt.fallback=AMGfallNEVER;
a6006777 1425
32251b26 1426 for (i = 1; i < lim; i++)
1427 amt.table[i] = Nullcv;
1428 for (; i < NofAMmeth; i++) {
e1ec3a88 1429 const char *cooky = PL_AMG_names[i];
32251b26 1430 /* Human-readable form, for debugging: */
e1ec3a88 1431 const char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1432 const STRLEN l = strlen(cooky);
89ffc314 1433
a0288114 1434 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
bfcb3514 1435 cp, HvNAME_get(stash)) );
611c1e95 1436 /* don't fill the cache while looking up!
1437 Creation of inheritance stubs in intermediate packages may
1438 conflict with the logic of runtime method substitution.
1439 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1440 then we could have created stubs for "(+0" in A and C too.
1441 But if B overloads "bool", we may want to use it for
1442 numifying instead of C's "+0". */
1443 if (i >= DESTROY_amg)
1444 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1445 else /* Autoload taken care of below */
1446 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
46fc3d4c 1447 cv = 0;
89ffc314 1448 if (gv && (cv = GvCV(gv))) {
bfcb3514 1449 const char *hvname;
44a8e56a 1450 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
bfcb3514 1451 && strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
611c1e95 1452 /* This is a hack to support autoloading..., while
1453 knowing *which* methods were declared as overloaded. */
44a8e56a 1454 /* GvSV contains the name of the method. */
4ea42e7f 1455 GV *ngv = Nullgv;
c69033f2 1456 SV *gvsv = GvSV(gv);
a0288114 1457
1458 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1459 "\" for overloaded \"%s\" in package \"%.256s\"\n",
bfcb3514 1460 GvSV(gv), cp, hvname) );
c69033f2 1461 if (!gvsv || !SvPOK(gvsv)
1462 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
dc848c6f 1463 FALSE)))
1464 {
a0288114 1465 /* Can be an import stub (created by "can"). */
c69033f2 1466 const char * const name = (gvsv && SvPOK(gvsv)) ? SvPVX_const(gvsv) : "???";
a0288114 1467 Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1468 "in package \"%.256s\"",
35c1215d 1469 (GvCVGEN(gv) ? "Stub found while resolving"
1470 : "Can't resolve"),
bfcb3514 1471 name, cp, hvname);
44a8e56a 1472 }
dc848c6f 1473 cv = GvCV(gv = ngv);
44a8e56a 1474 }
b464bac0 1475 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
bfcb3514 1476 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
44a8e56a 1477 GvNAME(CvGV(cv))) );
1478 filled = 1;
32251b26 1479 if (i < DESTROY_amg)
1480 have_ovl = 1;
611c1e95 1481 } else if (gv) { /* Autoloaded... */
1482 cv = (CV*)gv;
1483 filled = 1;
44a8e56a 1484 }
a6006777 1485 amt.table[i]=(CV*)SvREFCNT_inc(cv);
a0d0e21e 1486 }
a0d0e21e 1487 if (filled) {
a6006777 1488 AMT_AMAGIC_on(&amt);
32251b26 1489 if (have_ovl)
1490 AMT_OVERLOADED_on(&amt);
14befaf4 1491 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1492 (char*)&amt, sizeof(AMT));
32251b26 1493 return have_ovl;
a0d0e21e 1494 }
1495 }
a6006777 1496 /* Here we have no table: */
9cbac4c7 1497 /* no_table: */
a6006777 1498 AMT_AMAGIC_off(&amt);
14befaf4 1499 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1500 (char*)&amt, sizeof(AMTS));
a0d0e21e 1501 return FALSE;
1502}
1503
32251b26 1504
1505CV*
1506Perl_gv_handler(pTHX_ HV *stash, I32 id)
1507{
3f8f4626 1508 MAGIC *mg;
32251b26 1509 AMT *amtp;
1510
bfcb3514 1511 if (!stash || !HvNAME_get(stash))
3f8f4626 1512 return Nullcv;
14befaf4 1513 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
32251b26 1514 if (!mg) {
1515 do_update:
1516 Gv_AMupdate(stash);
14befaf4 1517 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
32251b26 1518 }
1519 amtp = (AMT*)mg->mg_ptr;
1520 if ( amtp->was_ok_am != PL_amagic_generation
1521 || amtp->was_ok_sub != PL_sub_generation )
1522 goto do_update;
3ad83ce7 1523 if (AMT_AMAGIC(amtp)) {
b7787f18 1524 CV * const ret = amtp->table[id];
3ad83ce7 1525 if (ret && isGV(ret)) { /* Autoloading stab */
1526 /* Passing it through may have resulted in a warning
1527 "Inherited AUTOLOAD for a non-method deprecated", since
1528 our caller is going through a function call, not a method call.
1529 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
890ce7af 1530 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
3ad83ce7 1531
1532 if (gv && GvCV(gv))
1533 return GvCV(gv);
1534 }
1535 return ret;
1536 }
a0288114 1537
32251b26 1538 return Nullcv;
1539}
1540
1541
a0d0e21e 1542SV*
864dbfa3 1543Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
a0d0e21e 1544{
27da23d5 1545 dVAR;
b267980d 1546 MAGIC *mg;
9c5ffd7c 1547 CV *cv=NULL;
a0d0e21e 1548 CV **cvp=NULL, **ocvp=NULL;
9c5ffd7c 1549 AMT *amtp=NULL, *oamtp=NULL;
b464bac0 1550 int off = 0, off1, lr = 0, notfound = 0;
1551 int postpr = 0, force_cpy = 0;
1552 int assign = AMGf_assign & flags;
1553 const int assignshift = assign ? 1 : 0;
497b47a8 1554#ifdef DEBUGGING
1555 int fl=0;
497b47a8 1556#endif
25716404 1557 HV* stash=NULL;
a0d0e21e 1558 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
25716404 1559 && (stash = SvSTASH(SvRV(left)))
1560 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
b267980d 1561 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 1562 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
8ac85365 1563 : (CV **) NULL))
b267980d 1564 && ((cv = cvp[off=method+assignshift])
748a9306 1565 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1566 * usual method */
497b47a8 1567 (
1568#ifdef DEBUGGING
1569 fl = 1,
a0288114 1570#endif
497b47a8 1571 cv = cvp[off=method])))) {
a0d0e21e 1572 lr = -1; /* Call method for left argument */
1573 } else {
1574 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1575 int logic;
1576
1577 /* look for substituted methods */
ee239bfe 1578 /* In all the covered cases we should be called with assign==0. */
a0d0e21e 1579 switch (method) {
1580 case inc_amg:
ee239bfe 1581 force_cpy = 1;
1582 if ((cv = cvp[off=add_ass_amg])
1583 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
3280af22 1584 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e 1585 }
1586 break;
1587 case dec_amg:
ee239bfe 1588 force_cpy = 1;
1589 if ((cv = cvp[off = subtr_ass_amg])
1590 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
3280af22 1591 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e 1592 }
1593 break;
1594 case bool__amg:
1595 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1596 break;
1597 case numer_amg:
1598 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1599 break;
1600 case string_amg:
1601 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1602 break;
b7787f18 1603 case not_amg:
1604 (void)((cv = cvp[off=bool__amg])
1605 || (cv = cvp[off=numer_amg])
1606 || (cv = cvp[off=string_amg]));
1607 postpr = 1;
1608 break;
748a9306 1609 case copy_amg:
1610 {
76e3520e 1611 /*
1612 * SV* ref causes confusion with the interpreter variable of
1613 * the same name
1614 */
890ce7af 1615 SV* const tmpRef=SvRV(left);
76e3520e 1616 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
fc36a67e 1617 /*
1618 * Just to be extra cautious. Maybe in some
1619 * additional cases sv_setsv is safe, too.
1620 */
890ce7af 1621 SV* const newref = newSVsv(tmpRef);
748a9306 1622 SvOBJECT_on(newref);
b162af07 1623 SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
748a9306 1624 return newref;
1625 }
1626 }
1627 break;
a0d0e21e 1628 case abs_amg:
b267980d 1629 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
a0d0e21e 1630 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
890ce7af 1631 SV* const nullsv=sv_2mortal(newSViv(0));
a0d0e21e 1632 if (off1==lt_amg) {
890ce7af 1633 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e 1634 lt_amg,AMGf_noright);
1635 logic = SvTRUE(lessp);
1636 } else {
890ce7af 1637 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e 1638 ncmp_amg,AMGf_noright);
1639 logic = (SvNV(lessp) < 0);
1640 }
1641 if (logic) {
1642 if (off==subtr_amg) {
1643 right = left;
748a9306 1644 left = nullsv;
a0d0e21e 1645 lr = 1;
1646 }
1647 } else {
1648 return left;
1649 }
1650 }
1651 break;
1652 case neg_amg:
155aba94 1653 if ((cv = cvp[off=subtr_amg])) {
a0d0e21e 1654 right = left;
1655 left = sv_2mortal(newSViv(0));
1656 lr = 1;
1657 }
1658 break;
f216259d 1659 case int_amg:
f5284f61 1660 case iter_amg: /* XXXX Eventually should do to_gv. */
b267980d 1661 /* FAIL safe */
1662 return NULL; /* Delegate operation to standard mechanisms. */
1663 break;
f5284f61 1664 case to_sv_amg:
1665 case to_av_amg:
1666 case to_hv_amg:
1667 case to_gv_amg:
1668 case to_cv_amg:
1669 /* FAIL safe */
b267980d 1670 return left; /* Delegate operation to standard mechanisms. */
f5284f61 1671 break;
a0d0e21e 1672 default:
1673 goto not_found;
1674 }
1675 if (!cv) goto not_found;
1676 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
25716404 1677 && (stash = SvSTASH(SvRV(right)))
1678 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
b267980d 1679 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 1680 ? (amtp = (AMT*)mg->mg_ptr)->table
8ac85365 1681 : (CV **) NULL))
a0d0e21e 1682 && (cv = cvp[off=method])) { /* Method for right
1683 * argument found */
1684 lr=1;
b267980d 1685 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1686 && (cvp=ocvp) && (lr = -1))
a0d0e21e 1687 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1688 && !(flags & AMGf_unary)) {
1689 /* We look for substitution for
1690 * comparison operations and
fc36a67e 1691 * concatenation */
a0d0e21e 1692 if (method==concat_amg || method==concat_ass_amg
1693 || method==repeat_amg || method==repeat_ass_amg) {
1694 return NULL; /* Delegate operation to string conversion */
1695 }
1696 off = -1;
1697 switch (method) {
1698 case lt_amg:
1699 case le_amg:
1700 case gt_amg:
1701 case ge_amg:
1702 case eq_amg:
1703 case ne_amg:
1704 postpr = 1; off=ncmp_amg; break;
1705 case slt_amg:
1706 case sle_amg:
1707 case sgt_amg:
1708 case sge_amg:
1709 case seq_amg:
1710 case sne_amg:
1711 postpr = 1; off=scmp_amg; break;
1712 }
1713 if (off != -1) cv = cvp[off];
1714 if (!cv) {
1715 goto not_found;
1716 }
1717 } else {
a6006777 1718 not_found: /* No method found, either report or croak */
b267980d 1719 switch (method) {
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 */
1726 return left; /* Delegate operation to standard mechanisms. */
1727 break;
1728 }
a0d0e21e 1729 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1730 notfound = 1; lr = -1;
1731 } else if (cvp && (cv=cvp[nomethod_amg])) {
1732 notfound = 1; lr = 1;
1733 } else {
46fc3d4c 1734 SV *msg;
774d564b 1735 if (off==-1) off=method;
b267980d 1736 msg = sv_2mortal(Perl_newSVpvf(aTHX_
a0288114 1737 "Operation \"%s\": no method found,%sargument %s%s%s%s",
89ffc314 1738 AMG_id2name(method + assignshift),
e7ea3e70 1739 (flags & AMGf_unary ? " " : "\n\tleft "),
b267980d 1740 SvAMAGIC(left)?
a0d0e21e 1741 "in overloaded package ":
1742 "has no overloaded magic",
b267980d 1743 SvAMAGIC(left)?
bfcb3514 1744 HvNAME_get(SvSTASH(SvRV(left))):
a0d0e21e 1745 "",
b267980d 1746 SvAMAGIC(right)?
e7ea3e70 1747 ",\n\tright argument in overloaded package ":
b267980d 1748 (flags & AMGf_unary
e7ea3e70 1749 ? ""
1750 : ",\n\tright argument has no overloaded magic"),
b267980d 1751 SvAMAGIC(right)?
bfcb3514 1752 HvNAME_get(SvSTASH(SvRV(right))):
46fc3d4c 1753 ""));
a0d0e21e 1754 if (amtp && amtp->fallback >= AMGfallYES) {
b15aece3 1755 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
a0d0e21e 1756 } else {
894356b3 1757 Perl_croak(aTHX_ "%"SVf, msg);
a0d0e21e 1758 }
1759 return NULL;
1760 }
ee239bfe 1761 force_cpy = force_cpy || assign;
a0d0e21e 1762 }
1763 }
497b47a8 1764#ifdef DEBUGGING
a0d0e21e 1765 if (!notfound) {
497b47a8 1766 DEBUG_o(Perl_deb(aTHX_
a0288114 1767 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
497b47a8 1768 AMG_id2name(off),
1769 method+assignshift==off? "" :
a0288114 1770 " (initially \"",
497b47a8 1771 method+assignshift==off? "" :
1772 AMG_id2name(method+assignshift),
a0288114 1773 method+assignshift==off? "" : "\")",
497b47a8 1774 flags & AMGf_unary? "" :
1775 lr==1 ? " for right argument": " for left argument",
1776 flags & AMGf_unary? " for argument" : "",
bfcb3514 1777 stash ? HvNAME_get(stash) : "null",
497b47a8 1778 fl? ",\n\tassignment variant used": "") );
ee239bfe 1779 }
497b47a8 1780#endif
748a9306 1781 /* Since we use shallow copy during assignment, we need
1782 * to dublicate the contents, probably calling user-supplied
1783 * version of copy operator
1784 */
ee239bfe 1785 /* We need to copy in following cases:
1786 * a) Assignment form was called.
1787 * assignshift==1, assign==T, method + 1 == off
1788 * b) Increment or decrement, called directly.
1789 * assignshift==0, assign==0, method + 0 == off
1790 * c) Increment or decrement, translated to assignment add/subtr.
b267980d 1791 * assignshift==0, assign==T,
ee239bfe 1792 * force_cpy == T
1793 * d) Increment or decrement, translated to nomethod.
b267980d 1794 * assignshift==0, assign==0,
ee239bfe 1795 * force_cpy == T
1796 * e) Assignment form translated to nomethod.
1797 * assignshift==1, assign==T, method + 1 != off
1798 * force_cpy == T
1799 */
1800 /* off is method, method+assignshift, or a result of opcode substitution.
1801 * In the latter case assignshift==0, so only notfound case is important.
1802 */
1803 if (( (method + assignshift == off)
1804 && (assign || (method == inc_amg) || (method == dec_amg)))
1805 || force_cpy)
1806 RvDEEPCP(left);
a0d0e21e 1807 {
1808 dSP;
1809 BINOP myop;
1810 SV* res;
b7787f18 1811 const bool oldcatch = CATCH_GET;
a0d0e21e 1812
54310121 1813 CATCH_SET(TRUE);
a0d0e21e 1814 Zero(&myop, 1, BINOP);
1815 myop.op_last = (OP *) &myop;
1816 myop.op_next = Nullop;
54310121 1817 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
a0d0e21e 1818
e788e7d3 1819 PUSHSTACKi(PERLSI_OVERLOAD);
a0d0e21e 1820 ENTER;
462e5cf6 1821 SAVEOP();
533c011a 1822 PL_op = (OP *) &myop;
3280af22 1823 if (PERLDB_SUB && PL_curstash != PL_debstash)
533c011a 1824 PL_op->op_private |= OPpENTERSUB_DB;
a0d0e21e 1825 PUTBACK;
cea2e8a9 1826 pp_pushmark();
a0d0e21e 1827
924508f0 1828 EXTEND(SP, notfound + 5);
a0d0e21e 1829 PUSHs(lr>0? right: left);
1830 PUSHs(lr>0? left: right);
3280af22 1831 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
a0d0e21e 1832 if (notfound) {
89ffc314 1833 PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
a0d0e21e 1834 }
1835 PUSHs((SV*)cv);
1836 PUTBACK;
1837
155aba94 1838 if ((PL_op = Perl_pp_entersub(aTHX)))
cea2e8a9 1839 CALLRUNOPS(aTHX);
a0d0e21e 1840 LEAVE;
1841 SPAGAIN;
1842
1843 res=POPs;
ebafeae7 1844 PUTBACK;
d3acc0f7 1845 POPSTACK;
54310121 1846 CATCH_SET(oldcatch);
a0d0e21e 1847
a0d0e21e 1848 if (postpr) {
b7787f18 1849 int ans;
a0d0e21e 1850 switch (method) {
1851 case le_amg:
1852 case sle_amg:
1853 ans=SvIV(res)<=0; break;
1854 case lt_amg:
1855 case slt_amg:
1856 ans=SvIV(res)<0; break;
1857 case ge_amg:
1858 case sge_amg:
1859 ans=SvIV(res)>=0; break;
1860 case gt_amg:
1861 case sgt_amg:
1862 ans=SvIV(res)>0; break;
1863 case eq_amg:
1864 case seq_amg:
1865 ans=SvIV(res)==0; break;
1866 case ne_amg:
1867 case sne_amg:
1868 ans=SvIV(res)!=0; break;
1869 case inc_amg:
1870 case dec_amg:
bbce6d69 1871 SvSetSV(left,res); return left;
dc437b57 1872 case not_amg:
fe7ac86a 1873 ans=!SvTRUE(res); break;
b7787f18 1874 default:
1875 ans=0; break;
a0d0e21e 1876 }
54310121 1877 return boolSV(ans);
748a9306 1878 } else if (method==copy_amg) {
1879 if (!SvROK(res)) {
cea2e8a9 1880 Perl_croak(aTHX_ "Copy method did not return a reference");
748a9306 1881 }
1882 return SvREFCNT_inc(SvRV(res));
a0d0e21e 1883 } else {
1884 return res;
1885 }
1886 }
1887}
c9d5ac95 1888
1889/*
7fc63493 1890=for apidoc is_gv_magical_sv
c9d5ac95 1891
7a5fd60d 1892Returns C<TRUE> if given the name of a magical GV. Calls is_gv_magical.
1893
1894=cut
1895*/
1896
1897bool
1898Perl_is_gv_magical_sv(pTHX_ SV *name, U32 flags)
1899{
1900 STRLEN len;
b64e5050 1901 const char * const temp = SvPV_const(name, len);
7a5fd60d 1902 return is_gv_magical(temp, len, flags);
1903}
1904
1905/*
1906=for apidoc is_gv_magical
1907
c9d5ac95 1908Returns C<TRUE> if given the name of a magical GV.
1909
1910Currently only useful internally when determining if a GV should be
1911created even in rvalue contexts.
1912
1913C<flags> is not used at present but available for future extension to
1914allow selecting particular classes of magical variable.
1915
b9b0e72c 1916Currently assumes that C<name> is NUL terminated (as well as len being valid).
1917This assumption is met by all callers within the perl core, which all pass
1918pointers returned by SvPV.
1919
c9d5ac95 1920=cut
1921*/
1922bool
7fc63493 1923Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags)
c9d5ac95 1924{
9d4ba2ae 1925 PERL_UNUSED_ARG(flags);
1926
b9b0e72c 1927 if (len > 1) {
b464bac0 1928 const char * const name1 = name + 1;
b9b0e72c 1929 switch (*name) {
1930 case 'I':
9431620d 1931 if (len == 3 && name1[1] == 'S' && name[2] == 'A')
b9b0e72c 1932 goto yes;
1933 break;
1934 case 'O':
9431620d 1935 if (len == 8 && strEQ(name1, "VERLOAD"))
b9b0e72c 1936 goto yes;
1937 break;
1938 case 'S':
9431620d 1939 if (len == 3 && name[1] == 'I' && name[2] == 'G')
b9b0e72c 1940 goto yes;
1941 break;
1942 /* Using ${^...} variables is likely to be sufficiently rare that
1943 it seems sensible to avoid the space hit of also checking the
1944 length. */
1945 case '\017': /* ${^OPEN} */
9431620d 1946 if (strEQ(name1, "PEN"))
b9b0e72c 1947 goto yes;
1948 break;
1949 case '\024': /* ${^TAINT} */
9431620d 1950 if (strEQ(name1, "AINT"))
b9b0e72c 1951 goto yes;
1952 break;
1953 case '\025': /* ${^UNICODE} */
9431620d 1954 if (strEQ(name1, "NICODE"))
b9b0e72c 1955 goto yes;
a0288114 1956 if (strEQ(name1, "TF8LOCALE"))
7cebcbc0 1957 goto yes;
b9b0e72c 1958 break;
1959 case '\027': /* ${^WARNING_BITS} */
9431620d 1960 if (strEQ(name1, "ARNING_BITS"))
b9b0e72c 1961 goto yes;
1962 break;
1963 case '1':
1964 case '2':
1965 case '3':
1966 case '4':
1967 case '5':
1968 case '6':
1969 case '7':
1970 case '8':
1971 case '9':
c9d5ac95 1972 {
7fc63493 1973 const char *end = name + len;
c9d5ac95 1974 while (--end > name) {
1975 if (!isDIGIT(*end))
1976 return FALSE;
1977 }
b9b0e72c 1978 goto yes;
1979 }
1980 }
1981 } else {
1982 /* Because we're already assuming that name is NUL terminated
1983 below, we can treat an empty name as "\0" */
1984 switch (*name) {
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 '.':
1999 case '(':
2000 case ')':
2001 case '<':
2002 case '>':
2003 case ',':
2004 case '\\':
2005 case '/':
2006 case '|':
2007 case '+':
2008 case ';':
2009 case ']':
2010 case '\001': /* $^A */
2011 case '\003': /* $^C */
2012 case '\004': /* $^D */
2013 case '\005': /* $^E */
2014 case '\006': /* $^F */
2015 case '\010': /* $^H */
2016 case '\011': /* $^I, NOT \t in EBCDIC */
2017 case '\014': /* $^L */
2018 case '\016': /* $^N */
2019 case '\017': /* $^O */
2020 case '\020': /* $^P */
2021 case '\023': /* $^S */
2022 case '\024': /* $^T */
2023 case '\026': /* $^V */
2024 case '\027': /* $^W */
2025 case '1':
2026 case '2':
2027 case '3':
2028 case '4':
2029 case '5':
2030 case '6':
2031 case '7':
2032 case '8':
2033 case '9':
2034 yes:
2035 return TRUE;
2036 default:
2037 break;
c9d5ac95 2038 }
c9d5ac95 2039 }
2040 return FALSE;
2041}
66610fdd 2042
2043/*
2044 * Local variables:
2045 * c-indentation-style: bsd
2046 * c-basic-offset: 4
2047 * indent-tabs-mode: t
2048 * End:
2049 *
37442d52 2050 * ex: set ts=8 sts=4 sw=4 noet:
2051 */