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