[perl #8262] //g loops infinitely on tainted data
[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;
756cb477 132 SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
133
134 assert (!(proto && has_constant));
135
136 if (has_constant) {
137 SvRV_set(gv, NULL);
138 SvROK_off(gv);
139 }
463ee0b2 140
dc437b57 141 sv_upgrade((SV*)gv, SVt_PVGV);
55d729e4 142 if (SvLEN(gv)) {
143 if (proto) {
f880fe2f 144 SvPV_set(gv, NULL);
b162af07 145 SvLEN_set(gv, 0);
55d729e4 146 SvPOK_off(gv);
147 } else
94010e71 148 Safefree(SvPVX_mutable(gv));
55d729e4 149 }
a02a5408 150 Newxz(gp, 1, GP);
8990e307 151 GvGP(gv) = gp_ref(gp);
c69033f2 152#ifdef PERL_DONT_CREATE_GVSV
153 GvSV(gv) = 0;
154#else
463ee0b2 155 GvSV(gv) = NEWSV(72,0);
c69033f2 156#endif
1d7c1841 157 GvLINE(gv) = CopLINE(PL_curcop);
07409e01 158 /* XXX Ideally this cast would be replaced with a change to const char*
159 in the struct. */
160 GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : (char *) "";
005a453c 161 GvCVGEN(gv) = 0;
463ee0b2 162 GvEGV(gv) = gv;
14befaf4 163 sv_magic((SV*)gv, (SV*)gv, PERL_MAGIC_glob, Nullch, 0);
e15faf7d 164 GvSTASH(gv) = stash;
165 if (stash)
166 Perl_sv_add_backref(aTHX_ (SV*)stash, (SV*)gv);
a0d0e21e 167 GvNAME(gv) = savepvn(name, len);
463ee0b2 168 GvNAMELEN(gv) = len;
23ad5bf5 169 if (multi || doproto) /* doproto means it _was_ mentioned */
a5f75d66 170 GvMULTI_on(gv);
55d729e4 171 if (doproto) { /* Replicate part of newSUB here. */
57ff9a15 172 SvIOK_off(gv);
55d729e4 173 ENTER;
756cb477 174 if (has_constant) {
175 /* newCONSTSUB takes ownership of the reference from us. */
176 GvCV(gv) = newCONSTSUB(stash, name, has_constant);
177 } else {
178 /* XXX unsafe for threads if eval_owner isn't held */
179 (void) start_subparse(0,0); /* Create empty CV in compcv. */
180 GvCV(gv) = PL_compcv;
181 }
55d729e4 182 LEAVE;
183
3280af22 184 PL_sub_generation++;
65c50114 185 CvGV(GvCV(gv)) = gv;
e0d088d0 186 CvFILE_set_from_cop(GvCV(gv), PL_curcop);
3280af22 187 CvSTASH(GvCV(gv)) = PL_curstash;
55d729e4 188 if (proto) {
189 sv_setpv((SV*)GvCV(gv), proto);
190 Safefree(proto);
191 }
192 }
463ee0b2 193}
194
76e3520e 195STATIC void
cea2e8a9 196S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
a0d0e21e 197{
198 switch (sv_type) {
199 case SVt_PVIO:
200 (void)GvIOn(gv);
201 break;
202 case SVt_PVAV:
203 (void)GvAVn(gv);
204 break;
205 case SVt_PVHV:
206 (void)GvHVn(gv);
207 break;
c69033f2 208#ifdef PERL_DONT_CREATE_GVSV
209 case SVt_NULL:
210 case SVt_PVCV:
211 case SVt_PVFM:
212 break;
213 default:
214 (void)GvSVn(gv);
215#endif
a0d0e21e 216 }
217}
218
954c1994 219/*
220=for apidoc gv_fetchmeth
221
222Returns the glob with the given C<name> and a defined subroutine or
223C<NULL>. The glob lives in the given C<stash>, or in the stashes
07766739 224accessible via @ISA and UNIVERSAL::.
954c1994 225
226The argument C<level> should be either 0 or -1. If C<level==0>, as a
227side-effect creates a glob with the given C<name> in the given C<stash>
228which in the case of success contains an alias for the subroutine, and sets
b267980d 229up caching info for this glob. Similarly for all the searched stashes.
954c1994 230
231This function grants C<"SUPER"> token as a postfix of the stash name. The
232GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
4929bf7b 233visible to Perl code. So when calling C<call_sv>, you should not use
954c1994 234the GV directly; instead, you should use the method's CV, which can be
b267980d 235obtained from the GV with the C<GvCV> macro.
954c1994 236
237=cut
238*/
239
79072805 240GV *
864dbfa3 241Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
79072805 242{
243 AV* av;
463ee0b2 244 GV* topgv;
79072805 245 GV* gv;
463ee0b2 246 GV** gvp;
748a9306 247 CV* cv;
bfcb3514 248 const char *hvname;
a0d0e21e 249
af09ea45 250 /* UNIVERSAL methods should be callable without a stash */
251 if (!stash) {
252 level = -1; /* probably appropriate */
253 if(!(stash = gv_stashpvn("UNIVERSAL", 9, FALSE)))
254 return 0;
255 }
256
bfcb3514 257 hvname = HvNAME_get(stash);
258 if (!hvname)
e27ad1f2 259 Perl_croak(aTHX_
260 "Can't use anonymous symbol table for method lookup");
261
44a8e56a 262 if ((level > 100) || (level < -100))
cea2e8a9 263 Perl_croak(aTHX_ "Recursive inheritance detected while looking for method '%s' in package '%s'",
bfcb3514 264 name, hvname);
463ee0b2 265
bfcb3514 266 DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,hvname) );
44a8e56a 267
268 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
269 if (!gvp)
270 topgv = Nullgv;
271 else {
272 topgv = *gvp;
273 if (SvTYPE(topgv) != SVt_PVGV)
274 gv_init(topgv, stash, name, len, TRUE);
155aba94 275 if ((cv = GvCV(topgv))) {
44a8e56a 276 /* If genuine method or valid cache entry, use it */
3280af22 277 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == PL_sub_generation)
7a4c00b4 278 return topgv;
44a8e56a 279 /* Stale cached entry: junk it */
280 SvREFCNT_dec(cv);
281 GvCV(topgv) = cv = Nullcv;
282 GvCVGEN(topgv) = 0;
748a9306 283 }
3280af22 284 else if (GvCVGEN(topgv) == PL_sub_generation)
005a453c 285 return 0; /* cache indicates sub doesn't exist */
463ee0b2 286 }
79072805 287
9607fc9c 288 gvp = (GV**)hv_fetch(stash, "ISA", 3, FALSE);
7d49f689 289 av = (gvp && (gv = *gvp) && gv != (GV*)&PL_sv_undef) ? GvAV(gv) : NULL;
9607fc9c 290
fb73857a 291 /* create and re-create @.*::SUPER::ISA on demand */
292 if (!av || !SvMAGIC(av)) {
7423f6db 293 STRLEN packlen = HvNAMELEN_get(stash);
9607fc9c 294
bfcb3514 295 if (packlen >= 7 && strEQ(hvname + packlen - 7, "::SUPER")) {
9607fc9c 296 HV* basestash;
297
298 packlen -= 7;
bfcb3514 299 basestash = gv_stashpvn(hvname, packlen, TRUE);
9607fc9c 300 gvp = (GV**)hv_fetch(basestash, "ISA", 3, FALSE);
3280af22 301 if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
9607fc9c 302 gvp = (GV**)hv_fetch(stash, "ISA", 3, TRUE);
303 if (!gvp || !(gv = *gvp))
bfcb3514 304 Perl_croak(aTHX_ "Cannot create %s::ISA", hvname);
9607fc9c 305 if (SvTYPE(gv) != SVt_PVGV)
306 gv_init(gv, stash, "ISA", 3, TRUE);
307 SvREFCNT_dec(GvAV(gv));
308 GvAV(gv) = (AV*)SvREFCNT_inc(av);
309 }
310 }
311 }
312
313 if (av) {
79072805 314 SV** svp = AvARRAY(av);
93965878 315 /* NOTE: No support for tied ISA */
316 I32 items = AvFILLp(av) + 1;
79072805 317 while (items--) {
823a54a3 318 SV* const sv = *svp++;
319 HV* const basestash = gv_stashsv(sv, FALSE);
9bbf4081 320 if (!basestash) {
599cee73 321 if (ckWARN(WARN_MISC))
35c1215d 322 Perl_warner(aTHX_ packWARN(WARN_MISC), "Can't locate package %"SVf" for @%s::ISA",
bfcb3514 323 sv, hvname);
79072805 324 continue;
325 }
44a8e56a 326 gv = gv_fetchmeth(basestash, name, len,
327 (level >= 0) ? level + 1 : level - 1);
328 if (gv)
329 goto gotcha;
79072805 330 }
331 }
a0d0e21e 332
9607fc9c 333 /* if at top level, try UNIVERSAL */
334
44a8e56a 335 if (level == 0 || level == -1) {
823a54a3 336 HV* const lastchance = gv_stashpvn("UNIVERSAL", 9, FALSE);
9607fc9c 337
823a54a3 338 if (lastchance) {
155aba94 339 if ((gv = gv_fetchmeth(lastchance, name, len,
340 (level >= 0) ? level + 1 : level - 1)))
341 {
44a8e56a 342 gotcha:
dc848c6f 343 /*
344 * Cache method in topgv if:
345 * 1. topgv has no synonyms (else inheritance crosses wires)
346 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
347 */
348 if (topgv &&
349 GvREFCNT(topgv) == 1 &&
350 (cv = GvCV(gv)) &&
351 (CvROOT(cv) || CvXSUB(cv)))
352 {
155aba94 353 if ((cv = GvCV(topgv)))
44a8e56a 354 SvREFCNT_dec(cv);
355 GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
3280af22 356 GvCVGEN(topgv) = PL_sub_generation;
44a8e56a 357 }
a0d0e21e 358 return gv;
359 }
005a453c 360 else if (topgv && GvREFCNT(topgv) == 1) {
361 /* cache the fact that the method is not defined */
3280af22 362 GvCVGEN(topgv) = PL_sub_generation;
005a453c 363 }
a0d0e21e 364 }
365 }
366
79072805 367 return 0;
368}
369
954c1994 370/*
611c1e95 371=for apidoc gv_fetchmeth_autoload
372
373Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
374Returns a glob for the subroutine.
375
376For an autoloaded subroutine without a GV, will create a GV even
377if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
378of the result may be zero.
379
380=cut
381*/
382
383GV *
384Perl_gv_fetchmeth_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
385{
386 GV *gv = gv_fetchmeth(stash, name, len, level);
387
388 if (!gv) {
611c1e95 389 CV *cv;
390 GV **gvp;
391
392 if (!stash)
393 return Nullgv; /* UNIVERSAL::AUTOLOAD could cause trouble */
5c7983e5 394 if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
611c1e95 395 return Nullgv;
5c7983e5 396 if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
611c1e95 397 return Nullgv;
398 cv = GvCV(gv);
399 if (!(CvROOT(cv) || CvXSUB(cv)))
400 return Nullgv;
401 /* Have an autoload */
402 if (level < 0) /* Cannot do without a stub */
403 gv_fetchmeth(stash, name, len, 0);
404 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
405 if (!gvp)
406 return Nullgv;
407 return *gvp;
408 }
409 return gv;
410}
411
412/*
954c1994 413=for apidoc gv_fetchmethod_autoload
414
415Returns the glob which contains the subroutine to call to invoke the method
416on the C<stash>. In fact in the presence of autoloading this may be the
417glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
b267980d 418already setup.
954c1994 419
420The third parameter of C<gv_fetchmethod_autoload> determines whether
421AUTOLOAD lookup is performed if the given method is not present: non-zero
b267980d 422means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
954c1994 423Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
b267980d 424with a non-zero C<autoload> parameter.
954c1994 425
426These functions grant C<"SUPER"> token as a prefix of the method name. Note
427that if you want to keep the returned glob for a long time, you need to
428check for it being "AUTOLOAD", since at the later time the call may load a
429different subroutine due to $AUTOLOAD changing its value. Use the glob
b267980d 430created via a side effect to do this.
954c1994 431
432These functions have the same side-effects and as C<gv_fetchmeth> with
433C<level==0>. C<name> should be writable if contains C<':'> or C<'
434''>. The warning against passing the GV returned by C<gv_fetchmeth> to
b267980d 435C<call_sv> apply equally to these functions.
954c1994 436
437=cut
438*/
439
dc848c6f 440GV *
864dbfa3 441Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
dc848c6f 442{
08105a92 443 register const char *nend;
444 const char *nsplit = 0;
a0d0e21e 445 GV* gv;
0dae17bd 446 HV* ostash = stash;
447
448 if (stash && SvTYPE(stash) < SVt_PVHV)
5c284bb0 449 stash = NULL;
b267980d 450
463ee0b2 451 for (nend = name; *nend; nend++) {
9607fc9c 452 if (*nend == '\'')
a0d0e21e 453 nsplit = nend;
9607fc9c 454 else if (*nend == ':' && *(nend + 1) == ':')
455 nsplit = ++nend;
a0d0e21e 456 }
457 if (nsplit) {
9d4ba2ae 458 const char * const origname = name;
a0d0e21e 459 name = nsplit + 1;
a0d0e21e 460 if (*nsplit == ':')
461 --nsplit;
9607fc9c 462 if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
463 /* ->SUPER::method should really be looked up in original stash */
cea2e8a9 464 SV *tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
1d7c1841 465 CopSTASHPV(PL_curcop)));
af09ea45 466 /* __PACKAGE__::SUPER stash should be autovivified */
b15aece3 467 stash = gv_stashpvn(SvPVX_const(tmpstr), SvCUR(tmpstr), TRUE);
cea2e8a9 468 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
bfcb3514 469 origname, HvNAME_get(stash), name) );
4633a7c4 470 }
e189a56d 471 else {
af09ea45 472 /* don't autovifify if ->NoSuchStash::method */
473 stash = gv_stashpvn(origname, nsplit - origname, FALSE);
e189a56d 474
475 /* however, explicit calls to Pkg::SUPER::method may
476 happen, and may require autovivification to work */
477 if (!stash && (nsplit - origname) >= 7 &&
478 strnEQ(nsplit - 7, "::SUPER", 7) &&
479 gv_stashpvn(origname, nsplit - origname - 7, FALSE))
480 stash = gv_stashpvn(origname, nsplit - origname, TRUE);
481 }
0dae17bd 482 ostash = stash;
4633a7c4 483 }
484
9607fc9c 485 gv = gv_fetchmeth(stash, name, nend - name, 0);
a0d0e21e 486 if (!gv) {
2f6e0fe7 487 if (strEQ(name,"import") || strEQ(name,"unimport"))
3280af22 488 gv = (GV*)&PL_sv_yes;
dc848c6f 489 else if (autoload)
0dae17bd 490 gv = gv_autoload4(ostash, name, nend - name, TRUE);
463ee0b2 491 }
dc848c6f 492 else if (autoload) {
9d4ba2ae 493 CV* const cv = GvCV(gv);
09280a33 494 if (!CvROOT(cv) && !CvXSUB(cv)) {
495 GV* stubgv;
496 GV* autogv;
497
498 if (CvANON(cv))
499 stubgv = gv;
500 else {
501 stubgv = CvGV(cv);
502 if (GvCV(stubgv) != cv) /* orphaned import */
503 stubgv = gv;
504 }
505 autogv = gv_autoload4(GvSTASH(stubgv),
506 GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
dc848c6f 507 if (autogv)
508 gv = autogv;
509 }
510 }
44a8e56a 511
512 return gv;
513}
514
515GV*
864dbfa3 516Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
44a8e56a 517{
27da23d5 518 dVAR;
44a8e56a 519 GV* gv;
520 CV* cv;
521 HV* varstash;
522 GV* vargv;
523 SV* varsv;
e1ec3a88 524 const char *packname = "";
7423f6db 525 STRLEN packname_len;
44a8e56a 526
5c7983e5 527 if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
44a8e56a 528 return Nullgv;
0dae17bd 529 if (stash) {
530 if (SvTYPE(stash) < SVt_PVHV) {
e62f0680 531 packname = SvPV_const((SV*)stash, packname_len);
5c284bb0 532 stash = NULL;
0dae17bd 533 }
534 else {
bfcb3514 535 packname = HvNAME_get(stash);
7423f6db 536 packname_len = HvNAMELEN_get(stash);
0dae17bd 537 }
538 }
5c7983e5 539 if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
dc848c6f 540 return Nullgv;
541 cv = GvCV(gv);
542
adb5a9ae 543 if (!(CvROOT(cv) || CvXSUB(cv)))
ed850460 544 return Nullgv;
545
dc848c6f 546 /*
547 * Inheriting AUTOLOAD for non-methods works ... for now.
548 */
041457d9 549 if (!method && (GvCVGEN(gv) || GvSTASH(gv) != stash)
550 && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)
551 )
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))
51a37f80 671 hv_name_set(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))
51a37f80 761 hv_name_set(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++) {
551405c4 960 SV * const * 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_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
43693395 1186{
46c461b5 1187 const GV * const egv = GvEGV(gv);
1188 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
43693395 1189}
1190
79072805 1191IO *
864dbfa3 1192Perl_newIO(pTHX)
79072805 1193{
8990e307 1194 GV *iogv;
b7787f18 1195 IO * const io = (IO*)NEWSV(0,0);
8990e307 1196
a0d0e21e 1197 sv_upgrade((SV *)io,SVt_PVIO);
158623e7 1198 /* This used to read SvREFCNT(io) = 1;
1199 It's not clear why the reference count needed an explicit reset. NWC
1200 */
1201 assert (SvREFCNT(io) == 1);
8990e307 1202 SvOBJECT_on(io);
b464bac0 1203 /* Clear the stashcache because a new IO could overrule a package name */
081fc587 1204 hv_clear(PL_stashcache);
c9de509e 1205 iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
5f2d631d 1206 /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1207 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
c9de509e 1208 iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
b162af07 1209 SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
79072805 1210 return io;
1211}
1212
1213void
864dbfa3 1214Perl_gv_check(pTHX_ HV *stash)
79072805 1215{
79072805 1216 register I32 i;
463ee0b2 1217
8990e307 1218 if (!HvARRAY(stash))
1219 return;
a0d0e21e 1220 for (i = 0; i <= (I32) HvMAX(stash); i++) {
e1ec3a88 1221 const HE *entry;
dc437b57 1222 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
b7787f18 1223 register GV *gv;
1224 HV *hv;
dc437b57 1225 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
b862623f 1226 (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
a0d0e21e 1227 {
19b6c847 1228 if (hv != PL_defstash && hv != stash)
a0d0e21e 1229 gv_check(hv); /* nested package */
1230 }
dc437b57 1231 else if (isALPHA(*HeKEY(entry))) {
e1ec3a88 1232 const char *file;
dc437b57 1233 gv = (GV*)HeVAL(entry);
55d729e4 1234 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
463ee0b2 1235 continue;
1d7c1841 1236 file = GvFILE(gv);
1237 /* performance hack: if filename is absolute and it's a standard
1238 * module, don't bother warning */
6eb630b7 1239#ifdef MACOS_TRADITIONAL
551405c4 1240# define LIB_COMPONENT ":lib:"
6eb630b7 1241#else
551405c4 1242# define LIB_COMPONENT "/lib/"
6eb630b7 1243#endif
551405c4 1244 if (file
1245 && PERL_FILE_IS_ABSOLUTE(file)
1246 && (instr(file, LIB_COMPONENT) || instr(file, ".pm")))
1d7c1841 1247 {
8990e307 1248 continue;
1d7c1841 1249 }
1250 CopLINE_set(PL_curcop, GvLINE(gv));
1251#ifdef USE_ITHREADS
dd374669 1252 CopFILE(PL_curcop) = (char *)file; /* set for warning */
1d7c1841 1253#else
1254 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1255#endif
9014280d 1256 Perl_warner(aTHX_ packWARN(WARN_ONCE),
599cee73 1257 "Name \"%s::%s\" used only once: possible typo",
bfcb3514 1258 HvNAME_get(stash), GvNAME(gv));
463ee0b2 1259 }
79072805 1260 }
1261 }
1262}
1263
1264GV *
e1ec3a88 1265Perl_newGVgen(pTHX_ const char *pack)
79072805 1266{
cea2e8a9 1267 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
46fc3d4c 1268 TRUE, SVt_PVGV);
79072805 1269}
1270
1271/* hopefully this is only called on local symbol table entries */
1272
1273GP*
864dbfa3 1274Perl_gp_ref(pTHX_ GP *gp)
79072805 1275{
1d7c1841 1276 if (!gp)
1277 return (GP*)NULL;
79072805 1278 gp->gp_refcnt++;
44a8e56a 1279 if (gp->gp_cv) {
1280 if (gp->gp_cvgen) {
1281 /* multi-named GPs cannot be used for method cache */
1282 SvREFCNT_dec(gp->gp_cv);
1283 gp->gp_cv = Nullcv;
1284 gp->gp_cvgen = 0;
1285 }
1286 else {
1287 /* Adding a new name to a subroutine invalidates method cache */
3280af22 1288 PL_sub_generation++;
44a8e56a 1289 }
1290 }
79072805 1291 return gp;
79072805 1292}
1293
1294void
864dbfa3 1295Perl_gp_free(pTHX_ GV *gv)
79072805 1296{
79072805 1297 GP* gp;
1298
1299 if (!gv || !(gp = GvGP(gv)))
1300 return;
f248d071 1301 if (gp->gp_refcnt == 0) {
1302 if (ckWARN_d(WARN_INTERNAL))
9014280d 1303 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
472d47bc 1304 "Attempt to free unreferenced glob pointers"
1305 pTHX__FORMAT pTHX__VALUE);
79072805 1306 return;
1307 }
44a8e56a 1308 if (gp->gp_cv) {
1309 /* Deleting the name of a subroutine invalidates method cache */
3280af22 1310 PL_sub_generation++;
44a8e56a 1311 }
748a9306 1312 if (--gp->gp_refcnt > 0) {
1313 if (gp->gp_egv == gv)
1314 gp->gp_egv = 0;
79072805 1315 return;
748a9306 1316 }
79072805 1317
13207a71 1318 if (gp->gp_sv) SvREFCNT_dec(gp->gp_sv);
8926f269 1319 if (gp->gp_av) SvREFCNT_dec(gp->gp_av);
bfcb3514 1320 /* FIXME - another reference loop GV -> symtab -> GV ?
1321 Somehow gp->gp_hv can end up pointing at freed garbage. */
1322 if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
bfcb3514 1323 const char *hvname = HvNAME_get(gp->gp_hv);
1324 if (PL_stashcache && hvname)
7423f6db 1325 hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
1326 G_DISCARD);
bfcb3514 1327 SvREFCNT_dec(gp->gp_hv);
13207a71 1328 }
1329 if (gp->gp_io) SvREFCNT_dec(gp->gp_io);
1330 if (gp->gp_cv) SvREFCNT_dec(gp->gp_cv);
1331 if (gp->gp_form) SvREFCNT_dec(gp->gp_form);
748a9306 1332
79072805 1333 Safefree(gp);
1334 GvGP(gv) = 0;
1335}
1336
d460ef45 1337int
1338Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1339{
53c1dcc0 1340 AMT * const amtp = (AMT*)mg->mg_ptr;
1341 PERL_UNUSED_ARG(sv);
dd374669 1342
d460ef45 1343 if (amtp && AMT_AMAGIC(amtp)) {
1344 int i;
1345 for (i = 1; i < NofAMmeth; i++) {
53c1dcc0 1346 CV * const cv = amtp->table[i];
d460ef45 1347 if (cv != Nullcv) {
1348 SvREFCNT_dec((SV *) cv);
1349 amtp->table[i] = Nullcv;
1350 }
1351 }
1352 }
1353 return 0;
1354}
1355
a0d0e21e 1356/* Updates and caches the CV's */
1357
1358bool
864dbfa3 1359Perl_Gv_AMupdate(pTHX_ HV *stash)
a0d0e21e 1360{
53c1dcc0 1361 MAGIC* const mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1362 AMT * const amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
a6006777 1363 AMT amt;
a0d0e21e 1364
3280af22 1365 if (mg && amtp->was_ok_am == PL_amagic_generation
1366 && amtp->was_ok_sub == PL_sub_generation)
eb160463 1367 return (bool)AMT_OVERLOADED(amtp);
14befaf4 1368 sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
a0d0e21e 1369
bfcb3514 1370 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
a0d0e21e 1371
d460ef45 1372 Zero(&amt,1,AMT);
3280af22 1373 amt.was_ok_am = PL_amagic_generation;
1374 amt.was_ok_sub = PL_sub_generation;
a6006777 1375 amt.fallback = AMGfallNO;
1376 amt.flags = 0;
1377
a6006777 1378 {
32251b26 1379 int filled = 0, have_ovl = 0;
1380 int i, lim = 1;
a6006777 1381
22c35a8c 1382 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
a6006777 1383
89ffc314 1384 /* Try to find via inheritance. */
53c1dcc0 1385 GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1386 SV * const sv = gv ? GvSV(gv) : NULL;
1387 CV* cv;
89ffc314 1388
1389 if (!gv)
32251b26 1390 lim = DESTROY_amg; /* Skip overloading entries. */
c69033f2 1391#ifdef PERL_DONT_CREATE_GVSV
1392 else if (!sv) {
1393 /* Equivalent to !SvTRUE and !SvOK */
1394 }
1395#endif
89ffc314 1396 else if (SvTRUE(sv))
1397 amt.fallback=AMGfallYES;
1398 else if (SvOK(sv))
1399 amt.fallback=AMGfallNEVER;
a6006777 1400
32251b26 1401 for (i = 1; i < lim; i++)
1402 amt.table[i] = Nullcv;
1403 for (; i < NofAMmeth; i++) {
e1ec3a88 1404 const char *cooky = PL_AMG_names[i];
32251b26 1405 /* Human-readable form, for debugging: */
e1ec3a88 1406 const char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1407 const STRLEN l = strlen(cooky);
89ffc314 1408
a0288114 1409 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
bfcb3514 1410 cp, HvNAME_get(stash)) );
611c1e95 1411 /* don't fill the cache while looking up!
1412 Creation of inheritance stubs in intermediate packages may
1413 conflict with the logic of runtime method substitution.
1414 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1415 then we could have created stubs for "(+0" in A and C too.
1416 But if B overloads "bool", we may want to use it for
1417 numifying instead of C's "+0". */
1418 if (i >= DESTROY_amg)
1419 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1420 else /* Autoload taken care of below */
1421 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
46fc3d4c 1422 cv = 0;
89ffc314 1423 if (gv && (cv = GvCV(gv))) {
bfcb3514 1424 const char *hvname;
44a8e56a 1425 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
bfcb3514 1426 && strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
611c1e95 1427 /* This is a hack to support autoloading..., while
1428 knowing *which* methods were declared as overloaded. */
44a8e56a 1429 /* GvSV contains the name of the method. */
4ea42e7f 1430 GV *ngv = Nullgv;
c69033f2 1431 SV *gvsv = GvSV(gv);
a0288114 1432
1433 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1434 "\" for overloaded \"%s\" in package \"%.256s\"\n",
bfcb3514 1435 GvSV(gv), cp, hvname) );
c69033f2 1436 if (!gvsv || !SvPOK(gvsv)
1437 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
dc848c6f 1438 FALSE)))
1439 {
a0288114 1440 /* Can be an import stub (created by "can"). */
c69033f2 1441 const char * const name = (gvsv && SvPOK(gvsv)) ? SvPVX_const(gvsv) : "???";
a0288114 1442 Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1443 "in package \"%.256s\"",
35c1215d 1444 (GvCVGEN(gv) ? "Stub found while resolving"
1445 : "Can't resolve"),
bfcb3514 1446 name, cp, hvname);
44a8e56a 1447 }
dc848c6f 1448 cv = GvCV(gv = ngv);
44a8e56a 1449 }
b464bac0 1450 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
bfcb3514 1451 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
44a8e56a 1452 GvNAME(CvGV(cv))) );
1453 filled = 1;
32251b26 1454 if (i < DESTROY_amg)
1455 have_ovl = 1;
611c1e95 1456 } else if (gv) { /* Autoloaded... */
1457 cv = (CV*)gv;
1458 filled = 1;
44a8e56a 1459 }
a6006777 1460 amt.table[i]=(CV*)SvREFCNT_inc(cv);
a0d0e21e 1461 }
a0d0e21e 1462 if (filled) {
a6006777 1463 AMT_AMAGIC_on(&amt);
32251b26 1464 if (have_ovl)
1465 AMT_OVERLOADED_on(&amt);
14befaf4 1466 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1467 (char*)&amt, sizeof(AMT));
32251b26 1468 return have_ovl;
a0d0e21e 1469 }
1470 }
a6006777 1471 /* Here we have no table: */
9cbac4c7 1472 /* no_table: */
a6006777 1473 AMT_AMAGIC_off(&amt);
14befaf4 1474 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1475 (char*)&amt, sizeof(AMTS));
a0d0e21e 1476 return FALSE;
1477}
1478
32251b26 1479
1480CV*
1481Perl_gv_handler(pTHX_ HV *stash, I32 id)
1482{
3f8f4626 1483 MAGIC *mg;
32251b26 1484 AMT *amtp;
1485
bfcb3514 1486 if (!stash || !HvNAME_get(stash))
3f8f4626 1487 return Nullcv;
14befaf4 1488 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
32251b26 1489 if (!mg) {
1490 do_update:
1491 Gv_AMupdate(stash);
14befaf4 1492 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
32251b26 1493 }
1494 amtp = (AMT*)mg->mg_ptr;
1495 if ( amtp->was_ok_am != PL_amagic_generation
1496 || amtp->was_ok_sub != PL_sub_generation )
1497 goto do_update;
3ad83ce7 1498 if (AMT_AMAGIC(amtp)) {
b7787f18 1499 CV * const ret = amtp->table[id];
3ad83ce7 1500 if (ret && isGV(ret)) { /* Autoloading stab */
1501 /* Passing it through may have resulted in a warning
1502 "Inherited AUTOLOAD for a non-method deprecated", since
1503 our caller is going through a function call, not a method call.
1504 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
890ce7af 1505 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
3ad83ce7 1506
1507 if (gv && GvCV(gv))
1508 return GvCV(gv);
1509 }
1510 return ret;
1511 }
a0288114 1512
32251b26 1513 return Nullcv;
1514}
1515
1516
a0d0e21e 1517SV*
864dbfa3 1518Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
a0d0e21e 1519{
27da23d5 1520 dVAR;
b267980d 1521 MAGIC *mg;
9c5ffd7c 1522 CV *cv=NULL;
a0d0e21e 1523 CV **cvp=NULL, **ocvp=NULL;
9c5ffd7c 1524 AMT *amtp=NULL, *oamtp=NULL;
b464bac0 1525 int off = 0, off1, lr = 0, notfound = 0;
1526 int postpr = 0, force_cpy = 0;
1527 int assign = AMGf_assign & flags;
1528 const int assignshift = assign ? 1 : 0;
497b47a8 1529#ifdef DEBUGGING
1530 int fl=0;
497b47a8 1531#endif
25716404 1532 HV* stash=NULL;
a0d0e21e 1533 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
25716404 1534 && (stash = SvSTASH(SvRV(left)))
1535 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
b267980d 1536 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 1537 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
8ac85365 1538 : (CV **) NULL))
b267980d 1539 && ((cv = cvp[off=method+assignshift])
748a9306 1540 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1541 * usual method */
497b47a8 1542 (
1543#ifdef DEBUGGING
1544 fl = 1,
a0288114 1545#endif
497b47a8 1546 cv = cvp[off=method])))) {
a0d0e21e 1547 lr = -1; /* Call method for left argument */
1548 } else {
1549 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1550 int logic;
1551
1552 /* look for substituted methods */
ee239bfe 1553 /* In all the covered cases we should be called with assign==0. */
a0d0e21e 1554 switch (method) {
1555 case inc_amg:
ee239bfe 1556 force_cpy = 1;
1557 if ((cv = cvp[off=add_ass_amg])
1558 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
3280af22 1559 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e 1560 }
1561 break;
1562 case dec_amg:
ee239bfe 1563 force_cpy = 1;
1564 if ((cv = cvp[off = subtr_ass_amg])
1565 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
3280af22 1566 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e 1567 }
1568 break;
1569 case bool__amg:
1570 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1571 break;
1572 case numer_amg:
1573 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1574 break;
1575 case string_amg:
1576 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1577 break;
b7787f18 1578 case not_amg:
1579 (void)((cv = cvp[off=bool__amg])
1580 || (cv = cvp[off=numer_amg])
1581 || (cv = cvp[off=string_amg]));
1582 postpr = 1;
1583 break;
748a9306 1584 case copy_amg:
1585 {
76e3520e 1586 /*
1587 * SV* ref causes confusion with the interpreter variable of
1588 * the same name
1589 */
890ce7af 1590 SV* const tmpRef=SvRV(left);
76e3520e 1591 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
fc36a67e 1592 /*
1593 * Just to be extra cautious. Maybe in some
1594 * additional cases sv_setsv is safe, too.
1595 */
890ce7af 1596 SV* const newref = newSVsv(tmpRef);
748a9306 1597 SvOBJECT_on(newref);
b162af07 1598 SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
748a9306 1599 return newref;
1600 }
1601 }
1602 break;
a0d0e21e 1603 case abs_amg:
b267980d 1604 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
a0d0e21e 1605 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
890ce7af 1606 SV* const nullsv=sv_2mortal(newSViv(0));
a0d0e21e 1607 if (off1==lt_amg) {
890ce7af 1608 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e 1609 lt_amg,AMGf_noright);
1610 logic = SvTRUE(lessp);
1611 } else {
890ce7af 1612 SV* const lessp = amagic_call(left,nullsv,
a0d0e21e 1613 ncmp_amg,AMGf_noright);
1614 logic = (SvNV(lessp) < 0);
1615 }
1616 if (logic) {
1617 if (off==subtr_amg) {
1618 right = left;
748a9306 1619 left = nullsv;
a0d0e21e 1620 lr = 1;
1621 }
1622 } else {
1623 return left;
1624 }
1625 }
1626 break;
1627 case neg_amg:
155aba94 1628 if ((cv = cvp[off=subtr_amg])) {
a0d0e21e 1629 right = left;
1630 left = sv_2mortal(newSViv(0));
1631 lr = 1;
1632 }
1633 break;
f216259d 1634 case int_amg:
f5284f61 1635 case iter_amg: /* XXXX Eventually should do to_gv. */
b267980d 1636 /* FAIL safe */
1637 return NULL; /* Delegate operation to standard mechanisms. */
1638 break;
f5284f61 1639 case to_sv_amg:
1640 case to_av_amg:
1641 case to_hv_amg:
1642 case to_gv_amg:
1643 case to_cv_amg:
1644 /* FAIL safe */
b267980d 1645 return left; /* Delegate operation to standard mechanisms. */
f5284f61 1646 break;
a0d0e21e 1647 default:
1648 goto not_found;
1649 }
1650 if (!cv) goto not_found;
1651 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
25716404 1652 && (stash = SvSTASH(SvRV(right)))
1653 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
b267980d 1654 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 1655 ? (amtp = (AMT*)mg->mg_ptr)->table
8ac85365 1656 : (CV **) NULL))
a0d0e21e 1657 && (cv = cvp[off=method])) { /* Method for right
1658 * argument found */
1659 lr=1;
b267980d 1660 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1661 && (cvp=ocvp) && (lr = -1))
a0d0e21e 1662 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1663 && !(flags & AMGf_unary)) {
1664 /* We look for substitution for
1665 * comparison operations and
fc36a67e 1666 * concatenation */
a0d0e21e 1667 if (method==concat_amg || method==concat_ass_amg
1668 || method==repeat_amg || method==repeat_ass_amg) {
1669 return NULL; /* Delegate operation to string conversion */
1670 }
1671 off = -1;
1672 switch (method) {
1673 case lt_amg:
1674 case le_amg:
1675 case gt_amg:
1676 case ge_amg:
1677 case eq_amg:
1678 case ne_amg:
1679 postpr = 1; off=ncmp_amg; break;
1680 case slt_amg:
1681 case sle_amg:
1682 case sgt_amg:
1683 case sge_amg:
1684 case seq_amg:
1685 case sne_amg:
1686 postpr = 1; off=scmp_amg; break;
1687 }
1688 if (off != -1) cv = cvp[off];
1689 if (!cv) {
1690 goto not_found;
1691 }
1692 } else {
a6006777 1693 not_found: /* No method found, either report or croak */
b267980d 1694 switch (method) {
1695 case to_sv_amg:
1696 case to_av_amg:
1697 case to_hv_amg:
1698 case to_gv_amg:
1699 case to_cv_amg:
1700 /* FAIL safe */
1701 return left; /* Delegate operation to standard mechanisms. */
1702 break;
1703 }
a0d0e21e 1704 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1705 notfound = 1; lr = -1;
1706 } else if (cvp && (cv=cvp[nomethod_amg])) {
1707 notfound = 1; lr = 1;
1708 } else {
46fc3d4c 1709 SV *msg;
774d564b 1710 if (off==-1) off=method;
b267980d 1711 msg = sv_2mortal(Perl_newSVpvf(aTHX_
a0288114 1712 "Operation \"%s\": no method found,%sargument %s%s%s%s",
89ffc314 1713 AMG_id2name(method + assignshift),
e7ea3e70 1714 (flags & AMGf_unary ? " " : "\n\tleft "),
b267980d 1715 SvAMAGIC(left)?
a0d0e21e 1716 "in overloaded package ":
1717 "has no overloaded magic",
b267980d 1718 SvAMAGIC(left)?
bfcb3514 1719 HvNAME_get(SvSTASH(SvRV(left))):
a0d0e21e 1720 "",
b267980d 1721 SvAMAGIC(right)?
e7ea3e70 1722 ",\n\tright argument in overloaded package ":
b267980d 1723 (flags & AMGf_unary
e7ea3e70 1724 ? ""
1725 : ",\n\tright argument has no overloaded magic"),
b267980d 1726 SvAMAGIC(right)?
bfcb3514 1727 HvNAME_get(SvSTASH(SvRV(right))):
46fc3d4c 1728 ""));
a0d0e21e 1729 if (amtp && amtp->fallback >= AMGfallYES) {
b15aece3 1730 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
a0d0e21e 1731 } else {
894356b3 1732 Perl_croak(aTHX_ "%"SVf, msg);
a0d0e21e 1733 }
1734 return NULL;
1735 }
ee239bfe 1736 force_cpy = force_cpy || assign;
a0d0e21e 1737 }
1738 }
497b47a8 1739#ifdef DEBUGGING
a0d0e21e 1740 if (!notfound) {
497b47a8 1741 DEBUG_o(Perl_deb(aTHX_
a0288114 1742 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
497b47a8 1743 AMG_id2name(off),
1744 method+assignshift==off? "" :
a0288114 1745 " (initially \"",
497b47a8 1746 method+assignshift==off? "" :
1747 AMG_id2name(method+assignshift),
a0288114 1748 method+assignshift==off? "" : "\")",
497b47a8 1749 flags & AMGf_unary? "" :
1750 lr==1 ? " for right argument": " for left argument",
1751 flags & AMGf_unary? " for argument" : "",
bfcb3514 1752 stash ? HvNAME_get(stash) : "null",
497b47a8 1753 fl? ",\n\tassignment variant used": "") );
ee239bfe 1754 }
497b47a8 1755#endif
748a9306 1756 /* Since we use shallow copy during assignment, we need
1757 * to dublicate the contents, probably calling user-supplied
1758 * version of copy operator
1759 */
ee239bfe 1760 /* We need to copy in following cases:
1761 * a) Assignment form was called.
1762 * assignshift==1, assign==T, method + 1 == off
1763 * b) Increment or decrement, called directly.
1764 * assignshift==0, assign==0, method + 0 == off
1765 * c) Increment or decrement, translated to assignment add/subtr.
b267980d 1766 * assignshift==0, assign==T,
ee239bfe 1767 * force_cpy == T
1768 * d) Increment or decrement, translated to nomethod.
b267980d 1769 * assignshift==0, assign==0,
ee239bfe 1770 * force_cpy == T
1771 * e) Assignment form translated to nomethod.
1772 * assignshift==1, assign==T, method + 1 != off
1773 * force_cpy == T
1774 */
1775 /* off is method, method+assignshift, or a result of opcode substitution.
1776 * In the latter case assignshift==0, so only notfound case is important.
1777 */
1778 if (( (method + assignshift == off)
1779 && (assign || (method == inc_amg) || (method == dec_amg)))
1780 || force_cpy)
1781 RvDEEPCP(left);
a0d0e21e 1782 {
1783 dSP;
1784 BINOP myop;
1785 SV* res;
b7787f18 1786 const bool oldcatch = CATCH_GET;
a0d0e21e 1787
54310121 1788 CATCH_SET(TRUE);
a0d0e21e 1789 Zero(&myop, 1, BINOP);
1790 myop.op_last = (OP *) &myop;
1791 myop.op_next = Nullop;
54310121 1792 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
a0d0e21e 1793
e788e7d3 1794 PUSHSTACKi(PERLSI_OVERLOAD);
a0d0e21e 1795 ENTER;
462e5cf6 1796 SAVEOP();
533c011a 1797 PL_op = (OP *) &myop;
3280af22 1798 if (PERLDB_SUB && PL_curstash != PL_debstash)
533c011a 1799 PL_op->op_private |= OPpENTERSUB_DB;
a0d0e21e 1800 PUTBACK;
cea2e8a9 1801 pp_pushmark();
a0d0e21e 1802
924508f0 1803 EXTEND(SP, notfound + 5);
a0d0e21e 1804 PUSHs(lr>0? right: left);
1805 PUSHs(lr>0? left: right);
3280af22 1806 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
a0d0e21e 1807 if (notfound) {
89ffc314 1808 PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
a0d0e21e 1809 }
1810 PUSHs((SV*)cv);
1811 PUTBACK;
1812
155aba94 1813 if ((PL_op = Perl_pp_entersub(aTHX)))
cea2e8a9 1814 CALLRUNOPS(aTHX);
a0d0e21e 1815 LEAVE;
1816 SPAGAIN;
1817
1818 res=POPs;
ebafeae7 1819 PUTBACK;
d3acc0f7 1820 POPSTACK;
54310121 1821 CATCH_SET(oldcatch);
a0d0e21e 1822
a0d0e21e 1823 if (postpr) {
b7787f18 1824 int ans;
a0d0e21e 1825 switch (method) {
1826 case le_amg:
1827 case sle_amg:
1828 ans=SvIV(res)<=0; break;
1829 case lt_amg:
1830 case slt_amg:
1831 ans=SvIV(res)<0; break;
1832 case ge_amg:
1833 case sge_amg:
1834 ans=SvIV(res)>=0; break;
1835 case gt_amg:
1836 case sgt_amg:
1837 ans=SvIV(res)>0; break;
1838 case eq_amg:
1839 case seq_amg:
1840 ans=SvIV(res)==0; break;
1841 case ne_amg:
1842 case sne_amg:
1843 ans=SvIV(res)!=0; break;
1844 case inc_amg:
1845 case dec_amg:
bbce6d69 1846 SvSetSV(left,res); return left;
dc437b57 1847 case not_amg:
fe7ac86a 1848 ans=!SvTRUE(res); break;
b7787f18 1849 default:
1850 ans=0; break;
a0d0e21e 1851 }
54310121 1852 return boolSV(ans);
748a9306 1853 } else if (method==copy_amg) {
1854 if (!SvROK(res)) {
cea2e8a9 1855 Perl_croak(aTHX_ "Copy method did not return a reference");
748a9306 1856 }
1857 return SvREFCNT_inc(SvRV(res));
a0d0e21e 1858 } else {
1859 return res;
1860 }
1861 }
1862}
c9d5ac95 1863
1864/*
7fc63493 1865=for apidoc is_gv_magical_sv
c9d5ac95 1866
7a5fd60d 1867Returns C<TRUE> if given the name of a magical GV. Calls is_gv_magical.
1868
1869=cut
1870*/
1871
1872bool
1873Perl_is_gv_magical_sv(pTHX_ SV *name, U32 flags)
1874{
1875 STRLEN len;
b64e5050 1876 const char * const temp = SvPV_const(name, len);
7a5fd60d 1877 return is_gv_magical(temp, len, flags);
1878}
1879
1880/*
1881=for apidoc is_gv_magical
1882
c9d5ac95 1883Returns C<TRUE> if given the name of a magical GV.
1884
1885Currently only useful internally when determining if a GV should be
1886created even in rvalue contexts.
1887
1888C<flags> is not used at present but available for future extension to
1889allow selecting particular classes of magical variable.
1890
b9b0e72c 1891Currently assumes that C<name> is NUL terminated (as well as len being valid).
1892This assumption is met by all callers within the perl core, which all pass
1893pointers returned by SvPV.
1894
c9d5ac95 1895=cut
1896*/
1897bool
7fc63493 1898Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags)
c9d5ac95 1899{
9d4ba2ae 1900 PERL_UNUSED_ARG(flags);
1901
b9b0e72c 1902 if (len > 1) {
b464bac0 1903 const char * const name1 = name + 1;
b9b0e72c 1904 switch (*name) {
1905 case 'I':
9431620d 1906 if (len == 3 && name1[1] == 'S' && name[2] == 'A')
b9b0e72c 1907 goto yes;
1908 break;
1909 case 'O':
9431620d 1910 if (len == 8 && strEQ(name1, "VERLOAD"))
b9b0e72c 1911 goto yes;
1912 break;
1913 case 'S':
9431620d 1914 if (len == 3 && name[1] == 'I' && name[2] == 'G')
b9b0e72c 1915 goto yes;
1916 break;
1917 /* Using ${^...} variables is likely to be sufficiently rare that
1918 it seems sensible to avoid the space hit of also checking the
1919 length. */
1920 case '\017': /* ${^OPEN} */
9431620d 1921 if (strEQ(name1, "PEN"))
b9b0e72c 1922 goto yes;
1923 break;
1924 case '\024': /* ${^TAINT} */
9431620d 1925 if (strEQ(name1, "AINT"))
b9b0e72c 1926 goto yes;
1927 break;
1928 case '\025': /* ${^UNICODE} */
9431620d 1929 if (strEQ(name1, "NICODE"))
b9b0e72c 1930 goto yes;
a0288114 1931 if (strEQ(name1, "TF8LOCALE"))
7cebcbc0 1932 goto yes;
b9b0e72c 1933 break;
1934 case '\027': /* ${^WARNING_BITS} */
9431620d 1935 if (strEQ(name1, "ARNING_BITS"))
b9b0e72c 1936 goto yes;
1937 break;
1938 case '1':
1939 case '2':
1940 case '3':
1941 case '4':
1942 case '5':
1943 case '6':
1944 case '7':
1945 case '8':
1946 case '9':
c9d5ac95 1947 {
7fc63493 1948 const char *end = name + len;
c9d5ac95 1949 while (--end > name) {
1950 if (!isDIGIT(*end))
1951 return FALSE;
1952 }
b9b0e72c 1953 goto yes;
1954 }
1955 }
1956 } else {
1957 /* Because we're already assuming that name is NUL terminated
1958 below, we can treat an empty name as "\0" */
1959 switch (*name) {
1960 case '&':
1961 case '`':
1962 case '\'':
1963 case ':':
1964 case '?':
1965 case '!':
1966 case '-':
1967 case '#':
1968 case '[':
1969 case '^':
1970 case '~':
1971 case '=':
1972 case '%':
1973 case '.':
1974 case '(':
1975 case ')':
1976 case '<':
1977 case '>':
1978 case ',':
1979 case '\\':
1980 case '/':
1981 case '|':
1982 case '+':
1983 case ';':
1984 case ']':
1985 case '\001': /* $^A */
1986 case '\003': /* $^C */
1987 case '\004': /* $^D */
1988 case '\005': /* $^E */
1989 case '\006': /* $^F */
1990 case '\010': /* $^H */
1991 case '\011': /* $^I, NOT \t in EBCDIC */
1992 case '\014': /* $^L */
1993 case '\016': /* $^N */
1994 case '\017': /* $^O */
1995 case '\020': /* $^P */
1996 case '\023': /* $^S */
1997 case '\024': /* $^T */
1998 case '\026': /* $^V */
1999 case '\027': /* $^W */
2000 case '1':
2001 case '2':
2002 case '3':
2003 case '4':
2004 case '5':
2005 case '6':
2006 case '7':
2007 case '8':
2008 case '9':
2009 yes:
2010 return TRUE;
2011 default:
2012 break;
c9d5ac95 2013 }
c9d5ac95 2014 }
2015 return FALSE;
2016}
66610fdd 2017
2018/*
2019 * Local variables:
2020 * c-indentation-style: bsd
2021 * c-basic-offset: 4
2022 * indent-tabs-mode: t
2023 * End:
2024 *
37442d52 2025 * ex: set ts=8 sts=4 sw=4 noet:
2026 */