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