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