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