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