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