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