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