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