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