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