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