This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
More symbol scan logic from Alan Burlison.
[perl5.git] / gv.c
CommitLineData
a0d0e21e 1/* gv.c
79072805 2 *
4bb101f2
JH
3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, by Larry Wall and others
79072805
LW
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
LW
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
LW
18 */
19
ccfc67b7
JH
20/*
21=head1 GV Functions
22*/
23
79072805 24#include "EXTERN.h"
864dbfa3 25#define PERL_IN_GV_C
79072805
LW
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
LW
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
LW
45 return gv;
46}
47
48GV *
864dbfa3 49Perl_gv_IOadd(pTHX_ register GV *gv)
a0d0e21e
LW
50{
51 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
cea2e8a9 52 Perl_croak(aTHX_ "Bad symbol for filehandle");
5bd07a3d 53 if (!GvIOp(gv)) {
7fb37951
AMS
54#ifdef GV_UNIQUE_CHECK
55 if (GvUNIQUE(gv)) {
56 Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
5bd07a3d
DM
57 }
58#endif
a0d0e21e 59 GvIOp(gv) = newIO();
5bd07a3d 60 }
a0d0e21e
LW
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
LW
70 GV *gv;
71
1d7c1841
GS
72 if (!PL_defstash)
73 return Nullgv;
74
53d95988
CS
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
CS
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
GS
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
CS
91 if (tmpbuf != smallbuf)
92 Safefree(tmpbuf);
79072805
LW
93 return gv;
94}
95
463ee0b2 96void
864dbfa3 97Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
463ee0b2
LW
98{
99 register GP *gp;
55d729e4
GS
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
GS
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
GS
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
GS
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
GS
137 if (proto) {
138 sv_setpv((SV*)GvCV(gv), proto);
139 Safefree(proto);
140 }
141 }
463ee0b2
LW
142}
143
76e3520e 144STATIC void
cea2e8a9 145S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
a0d0e21e
LW
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
GS
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
GS
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
GS
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
GS
177
178=cut
179*/
180
79072805 181GV *
864dbfa3 182Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
79072805
LW
183{
184 AV* av;
463ee0b2 185 GV* topgv;
79072805 186 GV* gv;
463ee0b2 187 GV** gvp;
748a9306 188 CV* cv;
a0d0e21e 189
af09ea45
IK
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
AV
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
NIS
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
NC
262 Perl_warner(aTHX_ packWARN(WARN_MISC), "Can't locate package %"SVf" for @%s::ISA",
263 sv, HvNAME(stash));
79072805
LW
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
LW
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
GS
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
LW
298 return gv;
299 }
005a453c
JP
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
LW
304 }
305 }
306
79072805
LW
307 return 0;
308}
309
954c1994 310/*
611c1e95
IZ
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
GS
355=for apidoc gv_fetchmethod
356
6d0f518e 357See L<gv_fetchmethod_autoload>.
954c1994
GS
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
GS
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
GS
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
GS
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
GS
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
GS
392
393=cut
394*/
395
dc848c6f 396GV *
864dbfa3 397Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
dc848c6f 398{
08105a92
GS
399 register const char *nend;
400 const char *nsplit = 0;
a0d0e21e 401 GV* gv;
0dae17bd
GS
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
LW
412 }
413 if (nsplit) {
08105a92 414 const char *origname = name;
a0d0e21e 415 name = nsplit + 1;
a0d0e21e
LW
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
IK
428 /* don't autovifify if ->NoSuchStash::method */
429 stash = gv_stashpvn(origname, nsplit - origname, FALSE);
e189a56d
IK
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
LW
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
CS
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
JH
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
GS
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
JH
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
DM
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
DM
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
GS
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
LW
540 return gv;
541}
542
d2c93421
RH
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
AMS
556 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
557 newSVpvn("Errno",5), Nullsv);
d2c93421
RH
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
GS
566/*
567=for apidoc gv_stashpv
568
386d01d6
GS
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
GS
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
LW
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
LW
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
LW
610}
611
954c1994
GS
612/*
613=for apidoc gv_stashsv
614
386d01d6
GS
615Returns a pointer to the stash for a specified package, which must be a
616valid UTF-8 string. See C<gv_stashpv>.
954c1994
GS
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
LW
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
GS
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
LW
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
MB
660 else
661 New(601, tmpbuf, len+3, char);
a0d0e21e
LW
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
GS
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
LW
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
LW
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
LW
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
JH
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
LW
713 else if (*name == 'A' && (
714 strEQ(name, "ARGV") ||
9d116dd7 715 strEQ(name, "ARGVOUT")))
463ee0b2
LW
716 global = TRUE;
717 }
c99da370 718 else if (*name == '_' && !name[1])
463ee0b2 719 global = TRUE;
9607fc9c 720
463ee0b2 721 if (global)
3280af22
NIS
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
LW
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
LW
732 gvp = (GV**)hv_fetch(stash,name,len,0);
733 if (!gvp ||
3280af22 734 *gvp == (GV*)&PL_sv_undef ||
a5f75d66
AD
735 SvTYPE(*gvp) != SVt_PVGV)
736 {
4633a7c4 737 stash = 0;
a5f75d66 738 }
155aba94
GS
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
LW
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
LW
755 }
756 else
3280af22 757 stash = PL_defstash;
463ee0b2
LW
758 }
759
760 /* By this point we should have a stash and a name */
761
a0d0e21e 762 if (!stash) {
5a844595
GS
763 if (add) {
764 qerror(Perl_mess(aTHX_
765 "Global symbol \"%s%s\" requires explicit package name",
766 (sv_type == SVt_PV ? "$"
767 : sv_type == SVt_PVAV ? "@"
768 : sv_type == SVt_PVHV ? "%"
769 : ""), name));
d7aacf4e 770 stash = GvHV(gv_fetchpv("<none>::", GV_ADDMULTI, SVt_PVHV));
a0d0e21e 771 }
d7aacf4e
RGS
772 else
773 return Nullgv;
a0d0e21e
LW
774 }
775
776 if (!SvREFCNT(stash)) /* symbol table under destruction */
777 return Nullgv;
778
79072805 779 gvp = (GV**)hv_fetch(stash,name,len,add);
3280af22 780 if (!gvp || *gvp == (GV*)&PL_sv_undef)
79072805
LW
781 return Nullgv;
782 gv = *gvp;
783 if (SvTYPE(gv) == SVt_PVGV) {
a0d0e21e 784 if (add) {
a5f75d66 785 GvMULTI_on(gv);
a0d0e21e 786 gv_init_sv(gv, sv_type);
d2c93421
RH
787 if (*name=='!' && sv_type == SVt_PVHV && len==1)
788 require_errno(gv);
a0d0e21e 789 }
79072805 790 return gv;
55d729e4
GS
791 } else if (add & GV_NOINIT) {
792 return gv;
79072805 793 }
93a17b20
LW
794
795 /* Adding a new symbol */
796
0453d815 797 if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
9014280d 798 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
55d729e4 799 gv_init(gv, stash, name, len, add & GV_ADDMULTI);
a0d0e21e 800 gv_init_sv(gv, sv_type);
93a17b20 801
7272584d
PM
802 if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
803 : (PL_dowarn & G_WARN_ON ) ) )
0453d815
PM
804 GvMULTI_on(gv) ;
805
93a17b20
LW
806 /* set up magic where warranted */
807 switch (*name) {
a0d0e21e
LW
808 case 'A':
809 if (strEQ(name, "ARGV")) {
810 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
811 }
812 break;
a0d0e21e
LW
813 case 'E':
814 if (strnEQ(name, "EXPORT", 6))
a5f75d66 815 GvMULTI_on(gv);
a0d0e21e 816 break;
463ee0b2
LW
817 case 'I':
818 if (strEQ(name, "ISA")) {
819 AV* av = GvAVn(gv);
a5f75d66 820 GvMULTI_on(gv);
14befaf4 821 sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
93965878 822 /* NOTE: No support for tied ISA */
55d729e4
GS
823 if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
824 && AvFILLp(av) == -1)
85e6fe83 825 {
a0d0e21e 826 char *pname;
79cb57f6 827 av_push(av, newSVpvn(pname = "NDBM_File",9));
dc437b57 828 gv_stashpvn(pname, 9, TRUE);
79cb57f6 829 av_push(av, newSVpvn(pname = "DB_File",7));
dc437b57 830 gv_stashpvn(pname, 7, TRUE);
79cb57f6 831 av_push(av, newSVpvn(pname = "GDBM_File",9));
dc437b57 832 gv_stashpvn(pname, 9, TRUE);
79cb57f6 833 av_push(av, newSVpvn(pname = "SDBM_File",9));
dc437b57 834 gv_stashpvn(pname, 9, TRUE);
79cb57f6 835 av_push(av, newSVpvn(pname = "ODBM_File",9));
dc437b57 836 gv_stashpvn(pname, 9, TRUE);
85e6fe83 837 }
463ee0b2
LW
838 }
839 break;
a0d0e21e
LW
840 case 'O':
841 if (strEQ(name, "OVERLOAD")) {
842 HV* hv = GvHVn(gv);
a5f75d66 843 GvMULTI_on(gv);
14befaf4 844 hv_magic(hv, Nullgv, PERL_MAGIC_overload);
a0d0e21e
LW
845 }
846 break;
93a17b20
LW
847 case 'S':
848 if (strEQ(name, "SIG")) {
849 HV *hv;
dc437b57 850 I32 i;
1d7c1841 851 if (!PL_psig_ptr) {
0a8e0eff
NIS
852 Newz(73, PL_psig_ptr, SIG_SIZE, SV*);
853 Newz(73, PL_psig_name, SIG_SIZE, SV*);
854 Newz(73, PL_psig_pend, SIG_SIZE, int);
1d7c1841
GS
855 }
856 GvMULTI_on(gv);
857 hv = GvHVn(gv);
14befaf4 858 hv_magic(hv, Nullgv, PERL_MAGIC_sig);
76d3c696 859 for (i = 1; i < SIG_SIZE; i++) {
dc437b57 860 SV ** init;
1d7c1841
GS
861 init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
862 if (init)
863 sv_setsv(*init, &PL_sv_undef);
22c35a8c
GS
864 PL_psig_ptr[i] = 0;
865 PL_psig_name[i] = 0;
0a8e0eff 866 PL_psig_pend[i] = 0;
dc437b57 867 }
93a17b20
LW
868 }
869 break;
09bef843
SB
870 case 'V':
871 if (strEQ(name, "VERSION"))
872 GvMULTI_on(gv);
873 break;
93a17b20
LW
874
875 case '&':
93a17b20 876 case '`':
93a17b20 877 case '\'':
b4a9608f
JP
878 if (
879 len > 1 ||
880 sv_type == SVt_PVAV ||
881 sv_type == SVt_PVHV ||
882 sv_type == SVt_PVCV ||
b4a9608f
JP
883 sv_type == SVt_PVFM ||
884 sv_type == SVt_PVIO
885 ) { break; }
3280af22 886 PL_sawampersand = TRUE;
a0d0e21e 887 goto ro_magicalize;
93a17b20
LW
888
889 case ':':
463ee0b2
LW
890 if (len > 1)
891 break;
3280af22 892 sv_setpv(GvSV(gv),PL_chopset);
93a17b20
LW
893 goto magicalize;
894
ff0cee69 895 case '?':
896 if (len > 1)
897 break;
898#ifdef COMPLEX_STATUS
07f14f54 899 (void)SvUPGRADE(GvSV(gv), SVt_PVLV);
ff0cee69 900#endif
901 goto magicalize;
902
067391ea 903 case '!':
4318d5a0 904 if (len > 1)
067391ea 905 break;
d2c93421
RH
906
907 /* If %! has been used, automatically load Errno.pm.
908 The require will itself set errno, so in order to
909 preserve its value we have to set up the magic
910 now (rather than going to magicalize)
911 */
912
14befaf4 913 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
d2c93421
RH
914
915 if (sv_type == SVt_PVHV)
916 require_errno(gv);
917
918 break;
6cef1e77
IZ
919 case '-':
920 if (len > 1)
921 break;
922 else {
923 AV* av = GvAVn(gv);
14befaf4 924 sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
03a27ae7 925 SvREADONLY_on(av);
6cef1e77
IZ
926 }
927 goto magicalize;
93a17b20 928 case '#':
a0d0e21e 929 case '*':
12bcd1a6
PM
930 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && len == 1 && sv_type == SVt_PV)
931 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX), "Use of $%s is deprecated", name);
a0d0e21e
LW
932 /* FALL THROUGH */
933 case '[':
93a17b20
LW
934 case '^':
935 case '~':
936 case '=':
93a17b20
LW
937 case '%':
938 case '.':
93a17b20
LW
939 case '(':
940 case ')':
941 case '<':
942 case '>':
943 case ',':
944 case '\\':
945 case '/':
16070b82
GS
946 case '\001': /* $^A */
947 case '\003': /* $^C */
948 case '\004': /* $^D */
16070b82
GS
949 case '\006': /* $^F */
950 case '\010': /* $^H */
951 case '\011': /* $^I, NOT \t in EBCDIC */
a01268b5 952 case '\016': /* $^N */
16070b82 953 case '\020': /* $^P */
463ee0b2
LW
954 if (len > 1)
955 break;
956 goto magicalize;
d8ce0c9a
BH
957 case '|':
958 if (len > 1)
959 break;
960 sv_setiv(GvSV(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
961 goto magicalize;
0a378802
JH
962 case '\005': /* $^E && $^ENCODING */
963 if (len > 1 && strNE(name, "\005NCODING"))
964 break;
965 goto magicalize;
966
ac27b0f5
NIS
967 case '\017': /* $^O & $^OPEN */
968 if (len > 1 && strNE(name, "\017PEN"))
969 break;
970 goto magicalize;
16070b82 971 case '\023': /* $^S */
6cef1e77
IZ
972 if (len > 1)
973 break;
974 goto ro_magicalize;
eb27b65e 975 case '\024': /* $^T, ${^TAINT} */
7c36658b
MS
976 if (len == 1)
977 goto magicalize;
978 else if (strEQ(name, "\024AINT"))
979 goto ro_magicalize;
980 else
981 break;
fde18df1 982 case '\025':
a05d7ebb 983 if (len > 1 && strNE(name, "\025NICODE"))
fde18df1
JH
984 break;
985 goto ro_magicalize;
986
6a818117 987 case '\027': /* $^W & $^WARNING_BITS */
fde18df1
JH
988 if (len > 1
989 && strNE(name, "\027ARNING_BITS")
990 )
4438c4b7
JH
991 break;
992 goto magicalize;
463ee0b2 993
a0d0e21e 994 case '+':
6cef1e77
IZ
995 if (len > 1)
996 break;
997 else {
998 AV* av = GvAVn(gv);
14befaf4 999 sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
03a27ae7 1000 SvREADONLY_on(av);
6cef1e77
IZ
1001 }
1002 /* FALL THROUGH */
463ee0b2
LW
1003 case '1':
1004 case '2':
1005 case '3':
1006 case '4':
1007 case '5':
1008 case '6':
1009 case '7':
1010 case '8':
1011 case '9':
e521374c
JP
1012 /* ensures variable is only digits */
1013 /* ${"1foo"} fails this test (and is thus writeable) */
1014 /* added by japhy, but borrowed from is_gv_magical */
1015
1016 if (len > 1) {
1017 const char *end = name + len;
1018 while (--end > name) {
1019 if (!isDIGIT(*end)) return gv;
1020 }
1021 }
1022
a0d0e21e
LW
1023 ro_magicalize:
1024 SvREADONLY_on(GvSV(gv));
93a17b20 1025 magicalize:
14befaf4 1026 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
93a17b20
LW
1027 break;
1028
16070b82 1029 case '\014': /* $^L */
463ee0b2
LW
1030 if (len > 1)
1031 break;
93a17b20 1032 sv_setpv(GvSV(gv),"\f");
3280af22 1033 PL_formfeed = GvSV(gv);
93a17b20
LW
1034 break;
1035 case ';':
463ee0b2
LW
1036 if (len > 1)
1037 break;
93a17b20
LW
1038 sv_setpv(GvSV(gv),"\034");
1039 break;
463ee0b2
LW
1040 case ']':
1041 if (len == 1) {
f86702cc 1042 SV *sv = GvSV(gv);
5089c844 1043 (void)SvUPGRADE(sv, SVt_PVNV);
6a6ba966
SB
1044 Perl_sv_setpvf(aTHX_ sv,
1045#if defined(PERL_SUBVERSION) && (PERL_SUBVERSION > 0)
1046 "%8.6"
1047#else
1048 "%5.3"
1049#endif
1050 NVff,
1051 SvNVX(PL_patchlevel));
5089c844
GS
1052 SvNVX(sv) = SvNVX(PL_patchlevel);
1053 SvNOK_on(sv);
5089c844 1054 SvREADONLY_on(sv);
93a17b20
LW
1055 }
1056 break;
16070b82
GS
1057 case '\026': /* $^V */
1058 if (len == 1) {
1059 SV *sv = GvSV(gv);
1060 GvSV(gv) = SvREFCNT_inc(PL_patchlevel);
1061 SvREFCNT_dec(sv);
1062 }
1063 break;
79072805 1064 }
93a17b20 1065 return gv;
79072805
LW
1066}
1067
1068void
43693395
GS
1069Perl_gv_fullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1070{
e27ad1f2 1071 char *name;
43693395
GS
1072 HV *hv = GvSTASH(gv);
1073 if (!hv) {
1074 (void)SvOK_off(sv);
1075 return;
1076 }
1077 sv_setpv(sv, prefix ? prefix : "");
e27ad1f2
AV
1078
1079 if (!HvNAME(hv))
1080 name = "__ANON__";
1081 else
1082 name = HvNAME(hv);
1083 if (keepmain || strNE(name, "main")) {
1084 sv_catpv(sv,name);
43693395
GS
1085 sv_catpvn(sv,"::", 2);
1086 }
1087 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1088}
1089
1090void
864dbfa3 1091Perl_gv_fullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
79072805 1092{
84e79d79 1093 gv_fullname4(sv, gv, prefix, TRUE);
79072805
LW
1094}
1095
1096void
43693395
GS
1097Perl_gv_efullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1098{
1099 GV *egv = GvEGV(gv);
1100 if (!egv)
1101 egv = gv;
1102 gv_fullname4(sv, egv, prefix, keepmain);
1103}
1104
1105void
864dbfa3 1106Perl_gv_efullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
79072805 1107{
84e79d79 1108 gv_efullname4(sv, gv, prefix, TRUE);
f6aff53a 1109}
1110
1111/* XXX compatibility with versions <= 5.003. */
1112void
864dbfa3 1113Perl_gv_fullname(pTHX_ SV *sv, GV *gv)
f6aff53a 1114{
1115 gv_fullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1116}
1117
1118/* XXX compatibility with versions <= 5.003. */
1119void
864dbfa3 1120Perl_gv_efullname(pTHX_ SV *sv, GV *gv)
f6aff53a 1121{
1122 gv_efullname3(sv, gv, sv == (SV*)gv ? "*" : "");
79072805
LW
1123}
1124
1125IO *
864dbfa3 1126Perl_newIO(pTHX)
79072805
LW
1127{
1128 IO *io;
8990e307
LW
1129 GV *iogv;
1130
1131 io = (IO*)NEWSV(0,0);
a0d0e21e 1132 sv_upgrade((SV *)io,SVt_PVIO);
8990e307
LW
1133 SvREFCNT(io) = 1;
1134 SvOBJECT_on(io);
081fc587
AB
1135 /* Clear the stashcache because a new IO could overrule a
1136 package name */
1137 hv_clear(PL_stashcache);
c9de509e 1138 iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
5f2d631d
GS
1139 /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1140 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
c9de509e 1141 iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
8990e307 1142 SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
79072805
LW
1143 return io;
1144}
1145
1146void
864dbfa3 1147Perl_gv_check(pTHX_ HV *stash)
79072805
LW
1148{
1149 register HE *entry;
1150 register I32 i;
1151 register GV *gv;
463ee0b2
LW
1152 HV *hv;
1153
8990e307
LW
1154 if (!HvARRAY(stash))
1155 return;
a0d0e21e 1156 for (i = 0; i <= (I32) HvMAX(stash); i++) {
dc437b57 1157 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1158 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
b862623f 1159 (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
a0d0e21e 1160 {
19b6c847 1161 if (hv != PL_defstash && hv != stash)
a0d0e21e
LW
1162 gv_check(hv); /* nested package */
1163 }
dc437b57 1164 else if (isALPHA(*HeKEY(entry))) {
1d7c1841 1165 char *file;
dc437b57 1166 gv = (GV*)HeVAL(entry);
55d729e4 1167 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
463ee0b2 1168 continue;
1d7c1841
GS
1169 file = GvFILE(gv);
1170 /* performance hack: if filename is absolute and it's a standard
1171 * module, don't bother warning */
1172 if (file
1173 && PERL_FILE_IS_ABSOLUTE(file)
6eb630b7
CN
1174#ifdef MACOS_TRADITIONAL
1175 && (instr(file, ":lib:")
1176#else
1177 && (instr(file, "/lib/")
1178#endif
1179 || instr(file, ".pm")))
1d7c1841 1180 {
8990e307 1181 continue;
1d7c1841
GS
1182 }
1183 CopLINE_set(PL_curcop, GvLINE(gv));
1184#ifdef USE_ITHREADS
1185 CopFILE(PL_curcop) = file; /* set for warning */
1186#else
1187 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1188#endif
9014280d 1189 Perl_warner(aTHX_ packWARN(WARN_ONCE),
599cee73 1190 "Name \"%s::%s\" used only once: possible typo",
a0d0e21e 1191 HvNAME(stash), GvNAME(gv));
463ee0b2 1192 }
79072805
LW
1193 }
1194 }
1195}
1196
1197GV *
864dbfa3 1198Perl_newGVgen(pTHX_ char *pack)
79072805 1199{
cea2e8a9 1200 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
46fc3d4c 1201 TRUE, SVt_PVGV);
79072805
LW
1202}
1203
1204/* hopefully this is only called on local symbol table entries */
1205
1206GP*
864dbfa3 1207Perl_gp_ref(pTHX_ GP *gp)
79072805 1208{
1d7c1841
GS
1209 if (!gp)
1210 return (GP*)NULL;
79072805 1211 gp->gp_refcnt++;
44a8e56a 1212 if (gp->gp_cv) {
1213 if (gp->gp_cvgen) {
1214 /* multi-named GPs cannot be used for method cache */
1215 SvREFCNT_dec(gp->gp_cv);
1216 gp->gp_cv = Nullcv;
1217 gp->gp_cvgen = 0;
1218 }
1219 else {
1220 /* Adding a new name to a subroutine invalidates method cache */
3280af22 1221 PL_sub_generation++;
44a8e56a 1222 }
1223 }
79072805 1224 return gp;
79072805
LW
1225}
1226
1227void
864dbfa3 1228Perl_gp_free(pTHX_ GV *gv)
79072805 1229{
79072805
LW
1230 GP* gp;
1231
1232 if (!gv || !(gp = GvGP(gv)))
1233 return;
f248d071
GS
1234 if (gp->gp_refcnt == 0) {
1235 if (ckWARN_d(WARN_INTERNAL))
9014280d 1236 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
f248d071 1237 "Attempt to free unreferenced glob pointers");
79072805
LW
1238 return;
1239 }
44a8e56a 1240 if (gp->gp_cv) {
1241 /* Deleting the name of a subroutine invalidates method cache */
3280af22 1242 PL_sub_generation++;
44a8e56a 1243 }
748a9306
LW
1244 if (--gp->gp_refcnt > 0) {
1245 if (gp->gp_egv == gv)
1246 gp->gp_egv = 0;
79072805 1247 return;
748a9306 1248 }
79072805 1249
8990e307
LW
1250 SvREFCNT_dec(gp->gp_sv);
1251 SvREFCNT_dec(gp->gp_av);
7765e7d6 1252 if(gp->gp_hv && HvNAME(gp->gp_hv) && PL_stashcache)
7e8961ec 1253 hv_delete(PL_stashcache, HvNAME(gp->gp_hv), strlen(HvNAME(gp->gp_hv)), G_DISCARD);
8990e307 1254 SvREFCNT_dec(gp->gp_hv);
377b8fbc 1255 SvREFCNT_dec(gp->gp_io);
a6006777 1256 SvREFCNT_dec(gp->gp_cv);
748a9306
LW
1257 SvREFCNT_dec(gp->gp_form);
1258
79072805
LW
1259 Safefree(gp);
1260 GvGP(gv) = 0;
1261}
1262
d460ef45
NIS
1263int
1264Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1265{
1266 AMT *amtp = (AMT*)mg->mg_ptr;
1267 if (amtp && AMT_AMAGIC(amtp)) {
1268 int i;
1269 for (i = 1; i < NofAMmeth; i++) {
1270 CV *cv = amtp->table[i];
1271 if (cv != Nullcv) {
1272 SvREFCNT_dec((SV *) cv);
1273 amtp->table[i] = Nullcv;
1274 }
1275 }
1276 }
1277 return 0;
1278}
1279
a0d0e21e
LW
1280/* Updates and caches the CV's */
1281
1282bool
864dbfa3 1283Perl_Gv_AMupdate(pTHX_ HV *stash)
a0d0e21e 1284{
a0d0e21e
LW
1285 GV* gv;
1286 CV* cv;
14befaf4 1287 MAGIC* mg=mg_find((SV*)stash, PERL_MAGIC_overload_table);
8ac85365 1288 AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
a6006777 1289 AMT amt;
a0d0e21e 1290
3280af22
NIS
1291 if (mg && amtp->was_ok_am == PL_amagic_generation
1292 && amtp->was_ok_sub == PL_sub_generation)
eb160463 1293 return (bool)AMT_OVERLOADED(amtp);
14befaf4 1294 sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
a0d0e21e 1295
cea2e8a9 1296 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
a0d0e21e 1297
d460ef45 1298 Zero(&amt,1,AMT);
3280af22
NIS
1299 amt.was_ok_am = PL_amagic_generation;
1300 amt.was_ok_sub = PL_sub_generation;
a6006777 1301 amt.fallback = AMGfallNO;
1302 amt.flags = 0;
1303
a6006777 1304 {
32251b26
IZ
1305 int filled = 0, have_ovl = 0;
1306 int i, lim = 1;
a6006777 1307 SV* sv = NULL;
a6006777 1308
22c35a8c 1309 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
a6006777 1310
89ffc314
IZ
1311 /* Try to find via inheritance. */
1312 gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1313 if (gv)
1314 sv = GvSV(gv);
1315
1316 if (!gv)
32251b26 1317 lim = DESTROY_amg; /* Skip overloading entries. */
89ffc314
IZ
1318 else if (SvTRUE(sv))
1319 amt.fallback=AMGfallYES;
1320 else if (SvOK(sv))
1321 amt.fallback=AMGfallNEVER;
a6006777 1322
32251b26
IZ
1323 for (i = 1; i < lim; i++)
1324 amt.table[i] = Nullcv;
1325 for (; i < NofAMmeth; i++) {
c8ce92fc 1326 char *cooky = (char*)PL_AMG_names[i];
32251b26
IZ
1327 /* Human-readable form, for debugging: */
1328 char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
89ffc314
IZ
1329 STRLEN l = strlen(cooky);
1330
cea2e8a9 1331 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of `%s' in package `%.256s'\n",
44a8e56a 1332 cp, HvNAME(stash)) );
611c1e95
IZ
1333 /* don't fill the cache while looking up!
1334 Creation of inheritance stubs in intermediate packages may
1335 conflict with the logic of runtime method substitution.
1336 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1337 then we could have created stubs for "(+0" in A and C too.
1338 But if B overloads "bool", we may want to use it for
1339 numifying instead of C's "+0". */
1340 if (i >= DESTROY_amg)
1341 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1342 else /* Autoload taken care of below */
1343 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
46fc3d4c 1344 cv = 0;
89ffc314 1345 if (gv && (cv = GvCV(gv))) {
44a8e56a 1346 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1347 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
611c1e95
IZ
1348 /* This is a hack to support autoloading..., while
1349 knowing *which* methods were declared as overloaded. */
44a8e56a 1350 /* GvSV contains the name of the method. */
4ea42e7f 1351 GV *ngv = Nullgv;
44a8e56a 1352
84c133a0
RB
1353 DEBUG_o( Perl_deb(aTHX_ "Resolving method `%"SVf256\
1354 "' for overloaded `%s' in package `%.256s'\n",
35c1215d 1355 GvSV(gv), cp, HvNAME(stash)) );
b267980d 1356 if (!SvPOK(GvSV(gv))
dc848c6f 1357 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
1358 FALSE)))
1359 {
44a8e56a 1360 /* Can be an import stub (created by `can'). */
35c1215d
NC
1361 SV *gvsv = GvSV(gv);
1362 const char *name = SvPOK(gvsv) ? SvPVX(gvsv) : "???";
84c133a0
RB
1363 Perl_croak(aTHX_ "%s method `%.256s' overloading `%s' "\
1364 "in package `%.256s'",
35c1215d
NC
1365 (GvCVGEN(gv) ? "Stub found while resolving"
1366 : "Can't resolve"),
1367 name, cp, HvNAME(stash));
44a8e56a 1368 }
dc848c6f 1369 cv = GvCV(gv = ngv);
44a8e56a 1370 }
cea2e8a9 1371 DEBUG_o( Perl_deb(aTHX_ "Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
44a8e56a 1372 cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
1373 GvNAME(CvGV(cv))) );
1374 filled = 1;
32251b26
IZ
1375 if (i < DESTROY_amg)
1376 have_ovl = 1;
611c1e95
IZ
1377 } else if (gv) { /* Autoloaded... */
1378 cv = (CV*)gv;
1379 filled = 1;
44a8e56a 1380 }
a6006777 1381 amt.table[i]=(CV*)SvREFCNT_inc(cv);
a0d0e21e 1382 }
a0d0e21e 1383 if (filled) {
a6006777 1384 AMT_AMAGIC_on(&amt);
32251b26
IZ
1385 if (have_ovl)
1386 AMT_OVERLOADED_on(&amt);
14befaf4
DM
1387 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1388 (char*)&amt, sizeof(AMT));
32251b26 1389 return have_ovl;
a0d0e21e
LW
1390 }
1391 }
a6006777 1392 /* Here we have no table: */
9cbac4c7 1393 /* no_table: */
a6006777 1394 AMT_AMAGIC_off(&amt);
14befaf4
DM
1395 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1396 (char*)&amt, sizeof(AMTS));
a0d0e21e
LW
1397 return FALSE;
1398}
1399
32251b26
IZ
1400
1401CV*
1402Perl_gv_handler(pTHX_ HV *stash, I32 id)
1403{
3f8f4626 1404 MAGIC *mg;
32251b26 1405 AMT *amtp;
3ad83ce7 1406 CV *ret;
32251b26 1407
e27ad1f2 1408 if (!stash || !HvNAME(stash))
3f8f4626 1409 return Nullcv;
14befaf4 1410 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
32251b26
IZ
1411 if (!mg) {
1412 do_update:
1413 Gv_AMupdate(stash);
14befaf4 1414 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
32251b26
IZ
1415 }
1416 amtp = (AMT*)mg->mg_ptr;
1417 if ( amtp->was_ok_am != PL_amagic_generation
1418 || amtp->was_ok_sub != PL_sub_generation )
1419 goto do_update;
3ad83ce7
AMS
1420 if (AMT_AMAGIC(amtp)) {
1421 ret = amtp->table[id];
1422 if (ret && isGV(ret)) { /* Autoloading stab */
1423 /* Passing it through may have resulted in a warning
1424 "Inherited AUTOLOAD for a non-method deprecated", since
1425 our caller is going through a function call, not a method call.
1426 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1427 GV *gv = gv_fetchmethod(stash, (char*)PL_AMG_names[id]);
1428
1429 if (gv && GvCV(gv))
1430 return GvCV(gv);
1431 }
1432 return ret;
1433 }
1434
32251b26
IZ
1435 return Nullcv;
1436}
1437
1438
a0d0e21e 1439SV*
864dbfa3 1440Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
a0d0e21e 1441{
b267980d 1442 MAGIC *mg;
9c5ffd7c 1443 CV *cv=NULL;
a0d0e21e 1444 CV **cvp=NULL, **ocvp=NULL;
9c5ffd7c 1445 AMT *amtp=NULL, *oamtp=NULL;
497b47a8 1446 int off=0, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
ee239bfe 1447 int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
497b47a8
JH
1448#ifdef DEBUGGING
1449 int fl=0;
497b47a8 1450#endif
25716404 1451 HV* stash=NULL;
a0d0e21e 1452 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
25716404
GS
1453 && (stash = SvSTASH(SvRV(left)))
1454 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
b267980d 1455 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 1456 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
8ac85365 1457 : (CV **) NULL))
b267980d 1458 && ((cv = cvp[off=method+assignshift])
748a9306
LW
1459 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1460 * usual method */
497b47a8
JH
1461 (
1462#ifdef DEBUGGING
1463 fl = 1,
1464#endif
1465 cv = cvp[off=method])))) {
a0d0e21e
LW
1466 lr = -1; /* Call method for left argument */
1467 } else {
1468 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1469 int logic;
1470
1471 /* look for substituted methods */
ee239bfe 1472 /* In all the covered cases we should be called with assign==0. */
a0d0e21e
LW
1473 switch (method) {
1474 case inc_amg:
ee239bfe
IZ
1475 force_cpy = 1;
1476 if ((cv = cvp[off=add_ass_amg])
1477 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
3280af22 1478 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e
LW
1479 }
1480 break;
1481 case dec_amg:
ee239bfe
IZ
1482 force_cpy = 1;
1483 if ((cv = cvp[off = subtr_ass_amg])
1484 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
3280af22 1485 right = &PL_sv_yes; lr = -1; assign = 1;
a0d0e21e
LW
1486 }
1487 break;
1488 case bool__amg:
1489 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1490 break;
1491 case numer_amg:
1492 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1493 break;
1494 case string_amg:
1495 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1496 break;
dc437b57 1497 case not_amg:
b267980d 1498 (void)((cv = cvp[off=bool__amg])
dc437b57 1499 || (cv = cvp[off=numer_amg])
1500 || (cv = cvp[off=string_amg]));
1501 postpr = 1;
1502 break;
748a9306
LW
1503 case copy_amg:
1504 {
76e3520e
GS
1505 /*
1506 * SV* ref causes confusion with the interpreter variable of
1507 * the same name
1508 */
1509 SV* tmpRef=SvRV(left);
1510 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
fc36a67e 1511 /*
1512 * Just to be extra cautious. Maybe in some
1513 * additional cases sv_setsv is safe, too.
1514 */
76e3520e 1515 SV* newref = newSVsv(tmpRef);
748a9306 1516 SvOBJECT_on(newref);
76e3520e 1517 SvSTASH(newref) = (HV*)SvREFCNT_inc(SvSTASH(tmpRef));
748a9306
LW
1518 return newref;
1519 }
1520 }
1521 break;
a0d0e21e 1522 case abs_amg:
b267980d 1523 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
a0d0e21e 1524 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
748a9306 1525 SV* nullsv=sv_2mortal(newSViv(0));
a0d0e21e 1526 if (off1==lt_amg) {
748a9306 1527 SV* lessp = amagic_call(left,nullsv,
a0d0e21e
LW
1528 lt_amg,AMGf_noright);
1529 logic = SvTRUE(lessp);
1530 } else {
748a9306 1531 SV* lessp = amagic_call(left,nullsv,
a0d0e21e
LW
1532 ncmp_amg,AMGf_noright);
1533 logic = (SvNV(lessp) < 0);
1534 }
1535 if (logic) {
1536 if (off==subtr_amg) {
1537 right = left;
748a9306 1538 left = nullsv;
a0d0e21e
LW
1539 lr = 1;
1540 }
1541 } else {
1542 return left;
1543 }
1544 }
1545 break;
1546 case neg_amg:
155aba94 1547 if ((cv = cvp[off=subtr_amg])) {
a0d0e21e
LW
1548 right = left;
1549 left = sv_2mortal(newSViv(0));
1550 lr = 1;
1551 }
1552 break;
f216259d 1553 case int_amg:
f5284f61 1554 case iter_amg: /* XXXX Eventually should do to_gv. */
b267980d
NIS
1555 /* FAIL safe */
1556 return NULL; /* Delegate operation to standard mechanisms. */
1557 break;
f5284f61
IZ
1558 case to_sv_amg:
1559 case to_av_amg:
1560 case to_hv_amg:
1561 case to_gv_amg:
1562 case to_cv_amg:
1563 /* FAIL safe */
b267980d 1564 return left; /* Delegate operation to standard mechanisms. */
f5284f61 1565 break;
a0d0e21e
LW
1566 default:
1567 goto not_found;
1568 }
1569 if (!cv) goto not_found;
1570 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
25716404
GS
1571 && (stash = SvSTASH(SvRV(right)))
1572 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
b267980d 1573 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
a6006777 1574 ? (amtp = (AMT*)mg->mg_ptr)->table
8ac85365 1575 : (CV **) NULL))
a0d0e21e
LW
1576 && (cv = cvp[off=method])) { /* Method for right
1577 * argument found */
1578 lr=1;
b267980d
NIS
1579 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1580 && (cvp=ocvp) && (lr = -1))
a0d0e21e
LW
1581 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1582 && !(flags & AMGf_unary)) {
1583 /* We look for substitution for
1584 * comparison operations and
fc36a67e 1585 * concatenation */
a0d0e21e
LW
1586 if (method==concat_amg || method==concat_ass_amg
1587 || method==repeat_amg || method==repeat_ass_amg) {
1588 return NULL; /* Delegate operation to string conversion */
1589 }
1590 off = -1;
1591 switch (method) {
1592 case lt_amg:
1593 case le_amg:
1594 case gt_amg:
1595 case ge_amg:
1596 case eq_amg:
1597 case ne_amg:
1598 postpr = 1; off=ncmp_amg; break;
1599 case slt_amg:
1600 case sle_amg:
1601 case sgt_amg:
1602 case sge_amg:
1603 case seq_amg:
1604 case sne_amg:
1605 postpr = 1; off=scmp_amg; break;
1606 }
1607 if (off != -1) cv = cvp[off];
1608 if (!cv) {
1609 goto not_found;
1610 }
1611 } else {
a6006777 1612 not_found: /* No method found, either report or croak */
b267980d
NIS
1613 switch (method) {
1614 case to_sv_amg:
1615 case to_av_amg:
1616 case to_hv_amg:
1617 case to_gv_amg:
1618 case to_cv_amg:
1619 /* FAIL safe */
1620 return left; /* Delegate operation to standard mechanisms. */
1621 break;
1622 }
a0d0e21e
LW
1623 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1624 notfound = 1; lr = -1;
1625 } else if (cvp && (cv=cvp[nomethod_amg])) {
1626 notfound = 1; lr = 1;
1627 } else {
46fc3d4c 1628 SV *msg;
774d564b 1629 if (off==-1) off=method;
b267980d 1630 msg = sv_2mortal(Perl_newSVpvf(aTHX_
46fc3d4c 1631 "Operation `%s': no method found,%sargument %s%s%s%s",
89ffc314 1632 AMG_id2name(method + assignshift),
e7ea3e70 1633 (flags & AMGf_unary ? " " : "\n\tleft "),
b267980d 1634 SvAMAGIC(left)?
a0d0e21e
LW
1635 "in overloaded package ":
1636 "has no overloaded magic",
b267980d 1637 SvAMAGIC(left)?
a0d0e21e
LW
1638 HvNAME(SvSTASH(SvRV(left))):
1639 "",
b267980d 1640 SvAMAGIC(right)?
e7ea3e70 1641 ",\n\tright argument in overloaded package ":
b267980d 1642 (flags & AMGf_unary
e7ea3e70
IZ
1643 ? ""
1644 : ",\n\tright argument has no overloaded magic"),
b267980d 1645 SvAMAGIC(right)?
a0d0e21e 1646 HvNAME(SvSTASH(SvRV(right))):
46fc3d4c 1647 ""));
a0d0e21e 1648 if (amtp && amtp->fallback >= AMGfallYES) {
cea2e8a9 1649 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX(msg)) );
a0d0e21e 1650 } else {
894356b3 1651 Perl_croak(aTHX_ "%"SVf, msg);
a0d0e21e
LW
1652 }
1653 return NULL;
1654 }
ee239bfe 1655 force_cpy = force_cpy || assign;
a0d0e21e
LW
1656 }
1657 }
497b47a8 1658#ifdef DEBUGGING
a0d0e21e 1659 if (!notfound) {
497b47a8
JH
1660 DEBUG_o(Perl_deb(aTHX_
1661 "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1662 AMG_id2name(off),
1663 method+assignshift==off? "" :
1664 " (initially `",
1665 method+assignshift==off? "" :
1666 AMG_id2name(method+assignshift),
1667 method+assignshift==off? "" : "')",
1668 flags & AMGf_unary? "" :
1669 lr==1 ? " for right argument": " for left argument",
1670 flags & AMGf_unary? " for argument" : "",
25716404 1671 stash ? HvNAME(stash) : "null",
497b47a8 1672 fl? ",\n\tassignment variant used": "") );
ee239bfe 1673 }
497b47a8 1674#endif
748a9306
LW
1675 /* Since we use shallow copy during assignment, we need
1676 * to dublicate the contents, probably calling user-supplied
1677 * version of copy operator
1678 */
ee239bfe
IZ
1679 /* We need to copy in following cases:
1680 * a) Assignment form was called.
1681 * assignshift==1, assign==T, method + 1 == off
1682 * b) Increment or decrement, called directly.
1683 * assignshift==0, assign==0, method + 0 == off
1684 * c) Increment or decrement, translated to assignment add/subtr.
b267980d 1685 * assignshift==0, assign==T,
ee239bfe
IZ
1686 * force_cpy == T
1687 * d) Increment or decrement, translated to nomethod.
b267980d 1688 * assignshift==0, assign==0,
ee239bfe
IZ
1689 * force_cpy == T
1690 * e) Assignment form translated to nomethod.
1691 * assignshift==1, assign==T, method + 1 != off
1692 * force_cpy == T
1693 */
1694 /* off is method, method+assignshift, or a result of opcode substitution.
1695 * In the latter case assignshift==0, so only notfound case is important.
1696 */
1697 if (( (method + assignshift == off)
1698 && (assign || (method == inc_amg) || (method == dec_amg)))
1699 || force_cpy)
1700 RvDEEPCP(left);
a0d0e21e
LW
1701 {
1702 dSP;
1703 BINOP myop;
1704 SV* res;
54310121 1705 bool oldcatch = CATCH_GET;
a0d0e21e 1706
54310121 1707 CATCH_SET(TRUE);
a0d0e21e
LW
1708 Zero(&myop, 1, BINOP);
1709 myop.op_last = (OP *) &myop;
1710 myop.op_next = Nullop;
54310121 1711 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
a0d0e21e 1712
e788e7d3 1713 PUSHSTACKi(PERLSI_OVERLOAD);
a0d0e21e 1714 ENTER;
462e5cf6 1715 SAVEOP();
533c011a 1716 PL_op = (OP *) &myop;
3280af22 1717 if (PERLDB_SUB && PL_curstash != PL_debstash)
533c011a 1718 PL_op->op_private |= OPpENTERSUB_DB;
a0d0e21e 1719 PUTBACK;
cea2e8a9 1720 pp_pushmark();
a0d0e21e 1721
924508f0 1722 EXTEND(SP, notfound + 5);
a0d0e21e
LW
1723 PUSHs(lr>0? right: left);
1724 PUSHs(lr>0? left: right);
3280af22 1725 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
a0d0e21e 1726 if (notfound) {
89ffc314 1727 PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
a0d0e21e
LW
1728 }
1729 PUSHs((SV*)cv);
1730 PUTBACK;
1731
155aba94 1732 if ((PL_op = Perl_pp_entersub(aTHX)))
cea2e8a9 1733 CALLRUNOPS(aTHX);
a0d0e21e
LW
1734 LEAVE;
1735 SPAGAIN;
1736
1737 res=POPs;
ebafeae7 1738 PUTBACK;
d3acc0f7 1739 POPSTACK;
54310121 1740 CATCH_SET(oldcatch);
a0d0e21e 1741
a0d0e21e 1742 if (postpr) {
9c5ffd7c 1743 int ans=0;
a0d0e21e
LW
1744 switch (method) {
1745 case le_amg:
1746 case sle_amg:
1747 ans=SvIV(res)<=0; break;
1748 case lt_amg:
1749 case slt_amg:
1750 ans=SvIV(res)<0; break;
1751 case ge_amg:
1752 case sge_amg:
1753 ans=SvIV(res)>=0; break;
1754 case gt_amg:
1755 case sgt_amg:
1756 ans=SvIV(res)>0; break;
1757 case eq_amg:
1758 case seq_amg:
1759 ans=SvIV(res)==0; break;
1760 case ne_amg:
1761 case sne_amg:
1762 ans=SvIV(res)!=0; break;
1763 case inc_amg:
1764 case dec_amg:
bbce6d69 1765 SvSetSV(left,res); return left;
dc437b57 1766 case not_amg:
fe7ac86a 1767 ans=!SvTRUE(res); break;
a0d0e21e 1768 }
54310121 1769 return boolSV(ans);
748a9306
LW
1770 } else if (method==copy_amg) {
1771 if (!SvROK(res)) {
cea2e8a9 1772 Perl_croak(aTHX_ "Copy method did not return a reference");
748a9306
LW
1773 }
1774 return SvREFCNT_inc(SvRV(res));
a0d0e21e
LW
1775 } else {
1776 return res;
1777 }
1778 }
1779}
c9d5ac95
GS
1780
1781/*
1782=for apidoc is_gv_magical
1783
1784Returns C<TRUE> if given the name of a magical GV.
1785
1786Currently only useful internally when determining if a GV should be
1787created even in rvalue contexts.
1788
1789C<flags> is not used at present but available for future extension to
1790allow selecting particular classes of magical variable.
1791
1792=cut
1793*/
1794bool
1795Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags)
1796{
1797 if (!len)
1798 return FALSE;
1799
1800 switch (*name) {
1801 case 'I':
1802 if (len == 3 && strEQ(name, "ISA"))
1803 goto yes;
1804 break;
1805 case 'O':
1806 if (len == 8 && strEQ(name, "OVERLOAD"))
1807 goto yes;
1808 break;
1809 case 'S':
1810 if (len == 3 && strEQ(name, "SIG"))
1811 goto yes;
1812 break;
ac27b0f5
NIS
1813 case '\017': /* $^O & $^OPEN */
1814 if (len == 1
563aca73 1815 || (len == 4 && strEQ(name, "\017PEN")))
ac27b0f5
NIS
1816 {
1817 goto yes;
1818 }
1819 break;
fde18df1 1820 case '\025':
a05d7ebb 1821 if (len > 1 && strEQ(name, "\025NICODE"))
fde18df1 1822 goto yes;
c9d5ac95
GS
1823 case '\027': /* $^W & $^WARNING_BITS */
1824 if (len == 1
1825 || (len == 12 && strEQ(name, "\027ARNING_BITS"))
fde18df1 1826 )
c9d5ac95
GS
1827 {
1828 goto yes;
1829 }
1830 break;
1831
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 '.':
1847 case '(':
1848 case ')':
1849 case '<':
1850 case '>':
1851 case ',':
1852 case '\\':
1853 case '/':
1854 case '|':
1855 case '+':
1856 case ';':
1857 case ']':
1858 case '\001': /* $^A */
1859 case '\003': /* $^C */
1860 case '\004': /* $^D */
1861 case '\005': /* $^E */
1862 case '\006': /* $^F */
1863 case '\010': /* $^H */
1864 case '\011': /* $^I, NOT \t in EBCDIC */
1865 case '\014': /* $^L */
a01268b5 1866 case '\016': /* $^N */
c9d5ac95
GS
1867 case '\020': /* $^P */
1868 case '\023': /* $^S */
c9d5ac95
GS
1869 case '\026': /* $^V */
1870 if (len == 1)
1871 goto yes;
1872 break;
eb27b65e
AMS
1873 case '\024': /* $^T, ${^TAINT} */
1874 if (len == 1 || strEQ(name, "\024AINT"))
1875 goto yes;
1876 break;
c9d5ac95
GS
1877 case '1':
1878 case '2':
1879 case '3':
1880 case '4':
1881 case '5':
1882 case '6':
1883 case '7':
1884 case '8':
1885 case '9':
1886 if (len > 1) {
1887 char *end = name + len;
1888 while (--end > name) {
1889 if (!isDIGIT(*end))
1890 return FALSE;
1891 }
1892 }
1893 yes:
1894 return TRUE;
1895 default:
1896 break;
1897 }
1898 return FALSE;
1899}