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