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