This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
File-Glob/bsd_glob.c: use PerlEnv_getenv()
[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
24A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
25It is a structure that holds a pointer to a scalar, an array, a hash etc,
26corresponding to $foo, @foo, %foo.
27
28GVs are usually found as values in stashes (symbol table hashes) where
29Perl stores its global variables.
30
31=cut
32*/
33
34#include "EXTERN.h"
35#define PERL_IN_GV_C
36#include "perl.h"
37#include "overload.inc"
38#include "keywords.h"
39#include "feature.h"
40
41static const char S_autoload[] = "AUTOLOAD";
42#define S_autolen (sizeof("AUTOLOAD")-1)
43
44GV *
45Perl_gv_add_by_type(pTHX_ GV *gv, svtype type)
46{
47 SV **where;
48
49 if (
50 !gv
51 || (
52 SvTYPE((const SV *)gv) != SVt_PVGV
53 && SvTYPE((const SV *)gv) != SVt_PVLV
54 )
55 ) {
56 const char *what;
57 if (type == SVt_PVIO) {
58 /*
59 * if it walks like a dirhandle, then let's assume that
60 * this is a dirhandle.
61 */
62 what = OP_IS_DIRHOP(PL_op->op_type) ?
63 "dirhandle" : "filehandle";
64 } else if (type == SVt_PVHV) {
65 what = "hash";
66 } else {
67 what = type == SVt_PVAV ? "array" : "scalar";
68 }
69 /* diag_listed_as: Bad symbol for filehandle */
70 Perl_croak(aTHX_ "Bad symbol for %s", what);
71 }
72
73 if (type == SVt_PVHV) {
74 where = (SV **)&GvHV(gv);
75 } else if (type == SVt_PVAV) {
76 where = (SV **)&GvAV(gv);
77 } else if (type == SVt_PVIO) {
78 where = (SV **)&GvIOp(gv);
79 } else {
80 where = &GvSV(gv);
81 }
82
83 if (!*where)
84 {
85 *where = newSV_type(type);
86 if (type == SVt_PVAV
87 && memEQs(GvNAME(gv), GvNAMELEN(gv), "ISA"))
88 sv_magic(*where, (SV *)gv, PERL_MAGIC_isa, NULL, 0);
89 }
90 return gv;
91}
92
93GV *
94Perl_gv_fetchfile(pTHX_ const char *name)
95{
96 PERL_ARGS_ASSERT_GV_FETCHFILE;
97 return gv_fetchfile_flags(name, strlen(name), 0);
98}
99
100GV *
101Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen,
102 const U32 flags)
103{
104 char smallbuf[128];
105 char *tmpbuf;
106 const STRLEN tmplen = namelen + 2;
107 GV *gv;
108
109 PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS;
110 PERL_UNUSED_ARG(flags);
111
112 if (!PL_defstash)
113 return NULL;
114
115 if (tmplen <= sizeof smallbuf)
116 tmpbuf = smallbuf;
117 else
118 Newx(tmpbuf, tmplen, char);
119 /* This is where the debugger's %{"::_<$filename"} hash is created */
120 tmpbuf[0] = '_';
121 tmpbuf[1] = '<';
122 memcpy(tmpbuf + 2, name, namelen);
123 gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
124 if (!isGV(gv)) {
125 gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
126#ifdef PERL_DONT_CREATE_GVSV
127 GvSV(gv) = newSVpvn(name, namelen);
128#else
129 sv_setpvn(GvSV(gv), name, namelen);
130#endif
131 }
132 if (PERLDB_LINE_OR_SAVESRC && !GvAV(gv))
133 hv_magic(GvHVn(gv), GvAVn(gv), PERL_MAGIC_dbfile);
134 if (tmpbuf != smallbuf)
135 Safefree(tmpbuf);
136 return gv;
137}
138
139/*
140=for apidoc gv_const_sv
141
142If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
143inlining, or C<gv> is a placeholder reference that would be promoted to such
144a typeglob, then returns the value returned by the sub. Otherwise, returns
145C<NULL>.
146
147=cut
148*/
149
150SV *
151Perl_gv_const_sv(pTHX_ GV *gv)
152{
153 PERL_ARGS_ASSERT_GV_CONST_SV;
154 PERL_UNUSED_CONTEXT;
155
156 if (SvTYPE(gv) == SVt_PVGV)
157 return cv_const_sv(GvCVu(gv));
158 return SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVAV && SvTYPE(SvRV(gv)) != SVt_PVCV ? SvRV(gv) : NULL;
159}
160
161GP *
162Perl_newGP(pTHX_ GV *const gv)
163{
164 GP *gp;
165 U32 hash;
166 const char *file;
167 STRLEN len;
168#ifndef USE_ITHREADS
169 GV *filegv;
170#endif
171 dVAR;
172
173 PERL_ARGS_ASSERT_NEWGP;
174 Newxz(gp, 1, GP);
175 gp->gp_egv = gv; /* allow compiler to reuse gv after this */
176#ifndef PERL_DONT_CREATE_GVSV
177 gp->gp_sv = newSV(0);
178#endif
179
180 /* PL_curcop may be null here. E.g.,
181 INIT { bless {} and exit }
182 frees INIT before looking up DESTROY (and creating *DESTROY)
183 */
184 if (PL_curcop) {
185 gp->gp_line = CopLINE(PL_curcop); /* 0 otherwise Newxz */
186#ifdef USE_ITHREADS
187 if (CopFILE(PL_curcop)) {
188 file = CopFILE(PL_curcop);
189 len = strlen(file);
190 }
191#else
192 filegv = CopFILEGV(PL_curcop);
193 if (filegv) {
194 file = GvNAME(filegv)+2;
195 len = GvNAMELEN(filegv)-2;
196 }
197#endif
198 else goto no_file;
199 }
200 else {
201 no_file:
202 file = "";
203 len = 0;
204 }
205
206 PERL_HASH(hash, file, len);
207 gp->gp_file_hek = share_hek(file, len, hash);
208 gp->gp_refcnt = 1;
209
210 return gp;
211}
212
213/* Assign CvGV(cv) = gv, handling weak references.
214 * See also S_anonymise_cv_maybe */
215
216void
217Perl_cvgv_set(pTHX_ CV* cv, GV* gv)
218{
219 GV * const oldgv = CvNAMED(cv) ? NULL : SvANY(cv)->xcv_gv_u.xcv_gv;
220 HEK *hek;
221 PERL_ARGS_ASSERT_CVGV_SET;
222
223 if (oldgv == gv)
224 return;
225
226 if (oldgv) {
227 if (CvCVGV_RC(cv)) {
228 SvREFCNT_dec_NN(oldgv);
229 CvCVGV_RC_off(cv);
230 }
231 else {
232 sv_del_backref(MUTABLE_SV(oldgv), MUTABLE_SV(cv));
233 }
234 }
235 else if ((hek = CvNAME_HEK(cv))) {
236 unshare_hek(hek);
237 CvLEXICAL_off(cv);
238 }
239
240 CvNAMED_off(cv);
241 SvANY(cv)->xcv_gv_u.xcv_gv = gv;
242 assert(!CvCVGV_RC(cv));
243
244 if (!gv)
245 return;
246
247 if (isGV_with_GP(gv) && GvGP(gv) && (GvCV(gv) == cv || GvFORM(gv) == cv))
248 Perl_sv_add_backref(aTHX_ MUTABLE_SV(gv), MUTABLE_SV(cv));
249 else {
250 CvCVGV_RC_on(cv);
251 SvREFCNT_inc_simple_void_NN(gv);
252 }
253}
254
255/* Convert CvSTASH + CvNAME_HEK into a GV. Conceptually, all subs have a
256 GV, but for efficiency that GV may not in fact exist. This function,
257 called by CvGV, reifies it. */
258
259GV *
260Perl_cvgv_from_hek(pTHX_ CV *cv)
261{
262 GV *gv;
263 SV **svp;
264 PERL_ARGS_ASSERT_CVGV_FROM_HEK;
265 assert(SvTYPE(cv) == SVt_PVCV);
266 if (!CvSTASH(cv)) return NULL;
267 ASSUME(CvNAME_HEK(cv));
268 svp = hv_fetchhek(CvSTASH(cv), CvNAME_HEK(cv), 0);
269 gv = MUTABLE_GV(svp && *svp ? *svp : newSV(0));
270 if (!isGV(gv))
271 gv_init_pvn(gv, CvSTASH(cv), HEK_KEY(CvNAME_HEK(cv)),
272 HEK_LEN(CvNAME_HEK(cv)),
273 SVf_UTF8 * !!HEK_UTF8(CvNAME_HEK(cv)));
274 if (!CvNAMED(cv)) { /* gv_init took care of it */
275 assert (SvANY(cv)->xcv_gv_u.xcv_gv == gv);
276 return gv;
277 }
278 unshare_hek(CvNAME_HEK(cv));
279 CvNAMED_off(cv);
280 SvANY(cv)->xcv_gv_u.xcv_gv = gv;
281 if (svp && *svp) SvREFCNT_inc_simple_void_NN(gv);
282 CvCVGV_RC_on(cv);
283 return gv;
284}
285
286/* Assign CvSTASH(cv) = st, handling weak references. */
287
288void
289Perl_cvstash_set(pTHX_ CV *cv, HV *st)
290{
291 HV *oldst = CvSTASH(cv);
292 PERL_ARGS_ASSERT_CVSTASH_SET;
293 if (oldst == st)
294 return;
295 if (oldst)
296 sv_del_backref(MUTABLE_SV(oldst), MUTABLE_SV(cv));
297 SvANY(cv)->xcv_stash = st;
298 if (st)
299 Perl_sv_add_backref(aTHX_ MUTABLE_SV(st), MUTABLE_SV(cv));
300}
301
302/*
303=for apidoc gv_init_pvn
304
305Converts a scalar into a typeglob. This is an incoercible typeglob;
306assigning a reference to it will assign to one of its slots, instead of
307overwriting it as happens with typeglobs created by C<SvSetSV>. Converting
308any scalar that is C<SvOK()> may produce unpredictable results and is reserved
309for perl's internal use.
310
311C<gv> is the scalar to be converted.
312
313C<stash> is the parent stash/package, if any.
314
315C<name> and C<len> give the name. The name must be unqualified;
316that is, it must not include the package name. If C<gv> is a
317stash element, it is the caller's responsibility to ensure that the name
318passed to this function matches the name of the element. If it does not
319match, perl's internal bookkeeping will get out of sync.
320
321C<flags> can be set to C<SVf_UTF8> if C<name> is a UTF-8 string, or
322the return value of SvUTF8(sv). It can also take the
323C<GV_ADDMULTI> flag, which means to pretend that the GV has been
324seen before (i.e., suppress "Used once" warnings).
325
326=for apidoc Amnh||GV_ADDMULTI
327
328=for apidoc gv_init
329
330The old form of C<gv_init_pvn()>. It does not work with UTF-8 strings, as it
331has no flags parameter. If the C<multi> parameter is set, the
332C<GV_ADDMULTI> flag will be passed to C<gv_init_pvn()>.
333
334=for apidoc gv_init_pv
335
336Same as C<gv_init_pvn()>, but takes a nul-terminated string for the name
337instead of separate char * and length parameters.
338
339=for apidoc gv_init_sv
340
341Same as C<gv_init_pvn()>, but takes an SV * for the name instead of separate
342char * and length parameters. C<flags> is currently unused.
343
344=cut
345*/
346
347void
348Perl_gv_init_sv(pTHX_ GV *gv, HV *stash, SV* namesv, U32 flags)
349{
350 char *namepv;
351 STRLEN namelen;
352 PERL_ARGS_ASSERT_GV_INIT_SV;
353 namepv = SvPV(namesv, namelen);
354 if (SvUTF8(namesv))
355 flags |= SVf_UTF8;
356 gv_init_pvn(gv, stash, namepv, namelen, flags);
357}
358
359void
360Perl_gv_init_pv(pTHX_ GV *gv, HV *stash, const char *name, U32 flags)
361{
362 PERL_ARGS_ASSERT_GV_INIT_PV;
363 gv_init_pvn(gv, stash, name, strlen(name), flags);
364}
365
366void
367Perl_gv_init_pvn(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, U32 flags)
368{
369 const U32 old_type = SvTYPE(gv);
370 const bool doproto = old_type > SVt_NULL;
371 char * const proto = (doproto && SvPOK(gv))
372 ? ((void)(SvIsCOW(gv) && (sv_force_normal((SV *)gv), 0)), SvPVX(gv))
373 : NULL;
374 const STRLEN protolen = proto ? SvCUR(gv) : 0;
375 const U32 proto_utf8 = proto ? SvUTF8(gv) : 0;
376 SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
377 const U32 exported_constant = has_constant ? SvPCS_IMPORTED(gv) : 0;
378 const bool really_sub =
379 has_constant && SvTYPE(has_constant) == SVt_PVCV;
380 COP * const old = PL_curcop;
381
382 PERL_ARGS_ASSERT_GV_INIT_PVN;
383 assert (!(proto && has_constant));
384
385 if (has_constant) {
386 /* The constant has to be a scalar, array or subroutine. */
387 switch (SvTYPE(has_constant)) {
388 case SVt_PVHV:
389 case SVt_PVFM:
390 case SVt_PVIO:
391 Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
392 sv_reftype(has_constant, 0));
393 NOT_REACHED; /* NOTREACHED */
394 break;
395
396 default: NOOP;
397 }
398 SvRV_set(gv, NULL);
399 SvROK_off(gv);
400 }
401
402
403 if (old_type < SVt_PVGV) {
404 if (old_type >= SVt_PV)
405 SvCUR_set(gv, 0);
406 sv_upgrade(MUTABLE_SV(gv), SVt_PVGV);
407 }
408 if (SvLEN(gv)) {
409 if (proto) {
410 SvPV_set(gv, NULL);
411 SvLEN_set(gv, 0);
412 SvPOK_off(gv);
413 } else
414 Safefree(SvPVX_mutable(gv));
415 }
416 SvIOK_off(gv);
417 isGV_with_GP_on(gv);
418
419 if (really_sub && !CvISXSUB(has_constant) && CvSTART(has_constant)
420 && ( CvSTART(has_constant)->op_type == OP_NEXTSTATE
421 || CvSTART(has_constant)->op_type == OP_DBSTATE))
422 PL_curcop = (COP *)CvSTART(has_constant);
423 GvGP_set(gv, Perl_newGP(aTHX_ gv));
424 PL_curcop = old;
425 GvSTASH(gv) = stash;
426 if (stash)
427 Perl_sv_add_backref(aTHX_ MUTABLE_SV(stash), MUTABLE_SV(gv));
428 gv_name_set(gv, name, len, GV_ADD | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ));
429 if (flags & GV_ADDMULTI || doproto) /* doproto means it */
430 GvMULTI_on(gv); /* _was_ mentioned */
431 if (really_sub) {
432 /* Not actually a constant. Just a regular sub. */
433 CV * const cv = (CV *)has_constant;
434 GvCV_set(gv,cv);
435 if (CvNAMED(cv) && CvSTASH(cv) == stash && (
436 CvNAME_HEK(cv) == GvNAME_HEK(gv)
437 || ( HEK_LEN(CvNAME_HEK(cv)) == HEK_LEN(GvNAME_HEK(gv))
438 && HEK_FLAGS(CvNAME_HEK(cv)) != HEK_FLAGS(GvNAME_HEK(gv))
439 && HEK_UTF8(CvNAME_HEK(cv)) == HEK_UTF8(GvNAME_HEK(gv))
440 && memEQ(HEK_KEY(CvNAME_HEK(cv)), GvNAME(gv), GvNAMELEN(gv))
441 )
442 ))
443 CvGV_set(cv,gv);
444 }
445 else if (doproto) {
446 CV *cv;
447 if (has_constant) {
448 /* newCONSTSUB takes ownership of the reference from us. */
449 cv = newCONSTSUB_flags(stash, name, len, flags, has_constant);
450 /* In case op.c:S_process_special_blocks stole it: */
451 if (!GvCV(gv))
452 GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv));
453 assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */
454 /* If this reference was a copy of another, then the subroutine
455 must have been "imported", by a Perl space assignment to a GV
456 from a reference to CV. */
457 if (exported_constant)
458 GvIMPORTED_CV_on(gv);
459 CvSTASH_set(cv, PL_curstash); /* XXX Why is this needed? */
460 } else {
461 cv = newSTUB(gv,1);
462 }
463 if (proto) {
464 sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen,
465 SV_HAS_TRAILING_NUL);
466 if ( proto_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
467 }
468 }
469}
470
471STATIC void
472S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type)
473{
474 PERL_ARGS_ASSERT_GV_INIT_SVTYPE;
475
476 switch (sv_type) {
477 case SVt_PVIO:
478 (void)GvIOn(gv);
479 break;
480 case SVt_PVAV:
481 (void)GvAVn(gv);
482 break;
483 case SVt_PVHV:
484 (void)GvHVn(gv);
485 break;
486#ifdef PERL_DONT_CREATE_GVSV
487 case SVt_NULL:
488 case SVt_PVCV:
489 case SVt_PVFM:
490 case SVt_PVGV:
491 break;
492 default:
493 if(GvSVn(gv)) {
494 /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13
495 If we just cast GvSVn(gv) to void, it ignores evaluating it for
496 its side effect */
497 }
498#endif
499 }
500}
501
502static void core_xsub(pTHX_ CV* cv);
503
504static GV *
505S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
506 const char * const name, const STRLEN len)
507{
508 const int code = keyword(name, len, 1);
509 static const char file[] = __FILE__;
510 CV *cv, *oldcompcv = NULL;
511 int opnum = 0;
512 bool ampable = TRUE; /* &{}-able */
513 COP *oldcurcop = NULL;
514 yy_parser *oldparser = NULL;
515 I32 oldsavestack_ix = 0;
516
517 assert(gv || stash);
518 assert(name);
519
520 if (!code) return NULL; /* Not a keyword */
521 switch (code < 0 ? -code : code) {
522 /* no support for \&CORE::infix;
523 no support for funcs that do not parse like funcs */
524 case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD:
525 case KEY_BEGIN : case KEY_CHECK : case KEY_cmp:
526 case KEY_default : case KEY_DESTROY:
527 case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif :
528 case KEY_END : case KEY_eq : case KEY_eval :
529 case KEY_for : case KEY_foreach: case KEY_format: case KEY_ge :
530 case KEY_given : case KEY_goto : case KEY_grep : case KEY_gt :
531 case KEY_if : case KEY_isa : case KEY_INIT : case KEY_last :
532 case KEY_le : case KEY_local : case KEY_lt : case KEY_m :
533 case KEY_map : case KEY_my:
534 case KEY_ne : case KEY_next : case KEY_no: case KEY_or: case KEY_our:
535 case KEY_package: case KEY_print: case KEY_printf:
536 case KEY_q : case KEY_qq : case KEY_qr : case KEY_qw :
537 case KEY_qx : case KEY_redo : case KEY_require: case KEY_return:
538 case KEY_s : case KEY_say : case KEY_sort :
539 case KEY_state: case KEY_sub :
540 case KEY_tr : case KEY_UNITCHECK: case KEY_unless:
541 case KEY_until: case KEY_use : case KEY_when : case KEY_while :
542 case KEY_x : case KEY_xor : case KEY_y :
543 return NULL;
544 case KEY_chdir:
545 case KEY_chomp: case KEY_chop: case KEY_defined: case KEY_delete:
546 case KEY_eof : case KEY_exec: case KEY_exists :
547 case KEY_lstat:
548 case KEY_split:
549 case KEY_stat:
550 case KEY_system:
551 case KEY_truncate: case KEY_unlink:
552 ampable = FALSE;
553 }
554 if (!gv) {
555 gv = (GV *)newSV(0);
556 gv_init(gv, stash, name, len, TRUE);
557 }
558 GvMULTI_on(gv);
559 if (ampable) {
560 ENTER;
561 oldcurcop = PL_curcop;
562 oldparser = PL_parser;
563 lex_start(NULL, NULL, 0);
564 oldcompcv = PL_compcv;
565 PL_compcv = NULL; /* Prevent start_subparse from setting
566 CvOUTSIDE. */
567 oldsavestack_ix = start_subparse(FALSE,0);
568 cv = PL_compcv;
569 }
570 else {
571 /* Avoid calling newXS, as it calls us, and things start to
572 get hairy. */
573 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
574 GvCV_set(gv,cv);
575 GvCVGEN(gv) = 0;
576 CvISXSUB_on(cv);
577 CvXSUB(cv) = core_xsub;
578 PoisonPADLIST(cv);
579 }
580 CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE
581 from PL_curcop. */
582 /* XSUBs can't be perl lang/perl5db.pl debugged
583 if (PERLDB_LINE_OR_SAVESRC)
584 (void)gv_fetchfile(file); */
585 CvFILE(cv) = (char *)file;
586 /* XXX This is inefficient, as doing things this order causes
587 a prototype check in newATTRSUB. But we have to do
588 it this order as we need an op number before calling
589 new ATTRSUB. */
590 (void)core_prototype((SV *)cv, name, code, &opnum);
591 if (stash)
592 (void)hv_store(stash,name,len,(SV *)gv,0);
593 if (ampable) {
594#ifdef DEBUGGING
595 CV *orig_cv = cv;
596#endif
597 CvLVALUE_on(cv);
598 /* newATTRSUB will free the CV and return NULL if we're still
599 compiling after a syntax error */
600 if ((cv = newATTRSUB_x(
601 oldsavestack_ix, (OP *)gv,
602 NULL,NULL,
603 coresub_op(
604 opnum
605 ? newSVuv((UV)opnum)
606 : newSVpvn(name,len),
607 code, opnum
608 ),
609 TRUE
610 )) != NULL) {
611 assert(GvCV(gv) == orig_cv);
612 if (opnum != OP_VEC && opnum != OP_SUBSTR && opnum != OP_POS
613 && opnum != OP_UNDEF && opnum != OP_KEYS)
614 CvLVALUE_off(cv); /* Now *that* was a neat trick. */
615 }
616 LEAVE;
617 PL_parser = oldparser;
618 PL_curcop = oldcurcop;
619 PL_compcv = oldcompcv;
620 }
621 if (cv) {
622 SV *opnumsv = newSViv(
623 (opnum == OP_ENTEREVAL && len == 9 && memEQ(name, "evalbytes", 9)) ?
624 (OP_ENTEREVAL | (1<<16))
625 : opnum ? opnum : (((I32)name[2]) << 16));
626 cv_set_call_checker_flags(cv, Perl_ck_entersub_args_core, opnumsv, 0);
627 SvREFCNT_dec_NN(opnumsv);
628 }
629
630 return gv;
631}
632
633/*
634=for apidoc gv_fetchmeth
635
636Like L</gv_fetchmeth_pvn>, but lacks a flags parameter.
637
638=for apidoc gv_fetchmeth_sv
639
640Exactly like L</gv_fetchmeth_pvn>, but takes the name string in the form
641of an SV instead of a string/length pair.
642
643=cut
644*/
645
646GV *
647Perl_gv_fetchmeth_sv(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
648{
649 char *namepv;
650 STRLEN namelen;
651 PERL_ARGS_ASSERT_GV_FETCHMETH_SV;
652 if (LIKELY(SvPOK_nog(namesv))) /* common case */
653 return gv_fetchmeth_internal(stash, namesv, NULL, 0, level,
654 flags | SvUTF8(namesv));
655 namepv = SvPV(namesv, namelen);
656 if (SvUTF8(namesv)) flags |= SVf_UTF8;
657 return gv_fetchmeth_pvn(stash, namepv, namelen, level, flags);
658}
659
660/*
661=for apidoc gv_fetchmeth_pv
662
663Exactly like L</gv_fetchmeth_pvn>, but takes a nul-terminated string
664instead of a string/length pair.
665
666=cut
667*/
668
669GV *
670Perl_gv_fetchmeth_pv(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
671{
672 PERL_ARGS_ASSERT_GV_FETCHMETH_PV;
673 return gv_fetchmeth_internal(stash, NULL, name, strlen(name), level, flags);
674}
675
676/*
677=for apidoc gv_fetchmeth_pvn
678
679Returns the glob with the given C<name> and a defined subroutine or
680C<NULL>. The glob lives in the given C<stash>, or in the stashes
681accessible via C<@ISA> and C<UNIVERSAL::>.
682
683The argument C<level> should be either 0 or -1. If C<level==0>, as a
684side-effect creates a glob with the given C<name> in the given C<stash>
685which in the case of success contains an alias for the subroutine, and sets
686up caching info for this glob.
687
688The only significant values for C<flags> are C<GV_SUPER> and C<SVf_UTF8>.
689
690C<GV_SUPER> indicates that we want to look up the method in the superclasses
691of the C<stash>.
692
693The
694GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
695visible to Perl code. So when calling C<call_sv>, you should not use
696the GV directly; instead, you should use the method's CV, which can be
697obtained from the GV with the C<GvCV> macro.
698
699=for apidoc Amnh||GV_SUPER
700
701=cut
702*/
703
704/* NOTE: No support for tied ISA */
705
706PERL_STATIC_INLINE GV*
707S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len, I32 level, U32 flags)
708{
709 GV** gvp;
710 HE* he;
711 AV* linear_av;
712 SV** linear_svp;
713 SV* linear_sv;
714 HV* cstash, *cachestash;
715 GV* candidate = NULL;
716 CV* cand_cv = NULL;
717 GV* topgv = NULL;
718 const char *hvname;
719 STRLEN hvnamelen;
720 I32 create = (level >= 0) ? HV_FETCH_LVALUE : 0;
721 I32 items;
722 U32 topgen_cmp;
723 U32 is_utf8 = flags & SVf_UTF8;
724
725 /* UNIVERSAL methods should be callable without a stash */
726 if (!stash) {
727 create = 0; /* probably appropriate */
728 if(!(stash = gv_stashpvs("UNIVERSAL", 0)))
729 return 0;
730 }
731
732 assert(stash);
733
734 hvname = HvNAME_get(stash);
735 hvnamelen = HvNAMELEN_get(stash);
736 if (!hvname)
737 Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
738
739 assert(hvname);
740 assert(name || meth);
741
742 DEBUG_o( Perl_deb(aTHX_ "Looking for %smethod %s in package %s\n",
743 flags & GV_SUPER ? "SUPER " : "",
744 name ? name : SvPV_nolen(meth), hvname) );
745
746 topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation;
747
748 if (flags & GV_SUPER) {
749 if (!HvAUX(stash)->xhv_mro_meta->super)
750 HvAUX(stash)->xhv_mro_meta->super = newHV();
751 cachestash = HvAUX(stash)->xhv_mro_meta->super;
752 }
753 else cachestash = stash;
754
755 /* check locally for a real method or a cache entry */
756 he = (HE*)hv_common(
757 cachestash, meth, name, len, is_utf8 ? HVhek_UTF8 : 0, create, NULL, 0
758 );
759 if (he) gvp = (GV**)&HeVAL(he);
760 else gvp = NULL;
761
762 if(gvp) {
763 topgv = *gvp;
764 have_gv:
765 assert(topgv);
766 if (SvTYPE(topgv) != SVt_PVGV)
767 {
768 if (!name)
769 name = SvPV_nomg(meth, len);
770 gv_init_pvn(topgv, stash, name, len, GV_ADDMULTI|is_utf8);
771 }
772 if ((cand_cv = GvCV(topgv))) {
773 /* If genuine method or valid cache entry, use it */
774 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == topgen_cmp) {
775 return topgv;
776 }
777 else {
778 /* stale cache entry, junk it and move on */
779 SvREFCNT_dec_NN(cand_cv);
780 GvCV_set(topgv, NULL);
781 cand_cv = NULL;
782 GvCVGEN(topgv) = 0;
783 }
784 }
785 else if (GvCVGEN(topgv) == topgen_cmp) {
786 /* cache indicates no such method definitively */
787 return 0;
788 }
789 else if (stash == cachestash
790 && len > 1 /* shortest is uc */
791 && memEQs(hvname, HvNAMELEN_get(stash), "CORE")
792 && S_maybe_add_coresub(aTHX_ NULL,topgv,name,len))
793 goto have_gv;
794 }
795
796 linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */
797 linear_svp = AvARRAY(linear_av) + 1; /* skip over self */
798 items = AvFILLp(linear_av); /* no +1, to skip over self */
799 while (items--) {
800 linear_sv = *linear_svp++;
801 assert(linear_sv);
802 cstash = gv_stashsv(linear_sv, 0);
803
804 if (!cstash) {
805 if ( ckWARN(WARN_SYNTAX)) {
806 if( /* these are loaded from Perl_Gv_AMupdate() one way or another */
807 ( len && name[0] == '(' ) /* overload.pm related, in particular "()" */
808 || ( memEQs( name, len, "DESTROY") )
809 ) {
810 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
811 "Can't locate package %" SVf " for @%" HEKf "::ISA",
812 SVfARG(linear_sv),
813 HEKfARG(HvNAME_HEK(stash)));
814
815 } else if( memEQs( name, len, "AUTOLOAD") ) {
816 /* gobble this warning */
817 } else {
818 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
819 "While trying to resolve method call %.*s->%.*s()"
820 " can not locate package \"%" SVf "\" yet it is mentioned in @%.*s::ISA"
821 " (perhaps you forgot to load \"%" SVf "\"?)",
822 (int) hvnamelen, hvname,
823 (int) len, name,
824 SVfARG(linear_sv),
825 (int) hvnamelen, hvname,
826 SVfARG(linear_sv));
827 }
828 }
829 continue;
830 }
831
832 assert(cstash);
833
834 gvp = (GV**)hv_common(
835 cstash, meth, name, len, is_utf8 ? HVhek_UTF8 : 0, HV_FETCH_JUST_SV, NULL, 0
836 );
837 if (!gvp) {
838 if (len > 1 && HvNAMELEN_get(cstash) == 4) {
839 const char *hvname = HvNAME(cstash); assert(hvname);
840 if (strBEGINs(hvname, "CORE")
841 && (candidate =
842 S_maybe_add_coresub(aTHX_ cstash,NULL,name,len)
843 ))
844 goto have_candidate;
845 }
846 continue;
847 }
848 else candidate = *gvp;
849 have_candidate:
850 assert(candidate);
851 if (SvTYPE(candidate) != SVt_PVGV)
852 gv_init_pvn(candidate, cstash, name, len, GV_ADDMULTI|is_utf8);
853 if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
854 /*
855 * Found real method, cache method in topgv if:
856 * 1. topgv has no synonyms (else inheritance crosses wires)
857 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
858 */
859 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
860 CV *old_cv = GvCV(topgv);
861 SvREFCNT_dec(old_cv);
862 SvREFCNT_inc_simple_void_NN(cand_cv);
863 GvCV_set(topgv, cand_cv);
864 GvCVGEN(topgv) = topgen_cmp;
865 }
866 return candidate;
867 }
868 }
869
870 /* Check UNIVERSAL without caching */
871 if(level == 0 || level == -1) {
872 candidate = gv_fetchmeth_internal(NULL, meth, name, len, 1,
873 flags &~GV_SUPER);
874 if(candidate) {
875 cand_cv = GvCV(candidate);
876 if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) {
877 CV *old_cv = GvCV(topgv);
878 SvREFCNT_dec(old_cv);
879 SvREFCNT_inc_simple_void_NN(cand_cv);
880 GvCV_set(topgv, cand_cv);
881 GvCVGEN(topgv) = topgen_cmp;
882 }
883 return candidate;
884 }
885 }
886
887 if (topgv && GvREFCNT(topgv) == 1) {
888 /* cache the fact that the method is not defined */
889 GvCVGEN(topgv) = topgen_cmp;
890 }
891
892 return 0;
893}
894
895GV *
896Perl_gv_fetchmeth_pvn(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
897{
898 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN;
899 return gv_fetchmeth_internal(stash, NULL, name, len, level, flags);
900}
901
902/*
903=for apidoc gv_fetchmeth_autoload
904
905This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
906parameter.
907
908=for apidoc gv_fetchmeth_sv_autoload
909
910Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
911of an SV instead of a string/length pair.
912
913=cut
914*/
915
916GV *
917Perl_gv_fetchmeth_sv_autoload(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags)
918{
919 char *namepv;
920 STRLEN namelen;
921 PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD;
922 namepv = SvPV(namesv, namelen);
923 if (SvUTF8(namesv))
924 flags |= SVf_UTF8;
925 return gv_fetchmeth_pvn_autoload(stash, namepv, namelen, level, flags);
926}
927
928/*
929=for apidoc gv_fetchmeth_pv_autoload
930
931Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
932instead of a string/length pair.
933
934=cut
935*/
936
937GV *
938Perl_gv_fetchmeth_pv_autoload(pTHX_ HV *stash, const char *name, I32 level, U32 flags)
939{
940 PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD;
941 return gv_fetchmeth_pvn_autoload(stash, name, strlen(name), level, flags);
942}
943
944/*
945=for apidoc gv_fetchmeth_pvn_autoload
946
947Same as C<gv_fetchmeth_pvn()>, but looks for autoloaded subroutines too.
948Returns a glob for the subroutine.
949
950For an autoloaded subroutine without a GV, will create a GV even
951if C<level < 0>. For an autoloaded subroutine without a stub, C<GvCV()>
952of the result may be zero.
953
954Currently, the only significant value for C<flags> is C<SVf_UTF8>.
955
956=cut
957*/
958
959GV *
960Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level, U32 flags)
961{
962 GV *gv = gv_fetchmeth_pvn(stash, name, len, level, flags);
963
964 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD;
965
966 if (!gv) {
967 CV *cv;
968 GV **gvp;
969
970 if (!stash)
971 return NULL; /* UNIVERSAL::AUTOLOAD could cause trouble */
972 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
973 return NULL;
974 if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags)))
975 return NULL;
976 cv = GvCV(gv);
977 if (!(CvROOT(cv) || CvXSUB(cv)))
978 return NULL;
979 /* Have an autoload */
980 if (level < 0) /* Cannot do without a stub */
981 gv_fetchmeth_pvn(stash, name, len, 0, flags);
982 gvp = (GV**)hv_fetch(stash, name,
983 (flags & SVf_UTF8) ? -(I32)len : (I32)len, (level >= 0));
984 if (!gvp)
985 return NULL;
986 return *gvp;
987 }
988 return gv;
989}
990
991/*
992=for apidoc gv_fetchmethod_autoload
993
994Returns the glob which contains the subroutine to call to invoke the method
995on the C<stash>. In fact in the presence of autoloading this may be the
996glob for "AUTOLOAD". In this case the corresponding variable C<$AUTOLOAD> is
997already setup.
998
999The third parameter of C<gv_fetchmethod_autoload> determines whether
1000AUTOLOAD lookup is performed if the given method is not present: non-zero
1001means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
1002Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
1003with a non-zero C<autoload> parameter.
1004
1005These functions grant C<"SUPER"> token
1006as a prefix of the method name. Note
1007that if you want to keep the returned glob for a long time, you need to
1008check for it being "AUTOLOAD", since at the later time the call may load a
1009different subroutine due to C<$AUTOLOAD> changing its value. Use the glob
1010created as a side effect to do this.
1011
1012These functions have the same side-effects as C<gv_fetchmeth> with
1013C<level==0>. The warning against passing the GV returned by
1014C<gv_fetchmeth> to C<call_sv> applies equally to these functions.
1015
1016=cut
1017*/
1018
1019GV *
1020Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
1021{
1022 PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
1023
1024 return gv_fetchmethod_flags(stash, name, autoload ? GV_AUTOLOAD : 0);
1025}
1026
1027GV *
1028Perl_gv_fetchmethod_sv_flags(pTHX_ HV *stash, SV *namesv, U32 flags)
1029{
1030 char *namepv;
1031 STRLEN namelen;
1032 PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS;
1033 namepv = SvPV(namesv, namelen);
1034 if (SvUTF8(namesv))
1035 flags |= SVf_UTF8;
1036 return gv_fetchmethod_pvn_flags(stash, namepv, namelen, flags);
1037}
1038
1039GV *
1040Perl_gv_fetchmethod_pv_flags(pTHX_ HV *stash, const char *name, U32 flags)
1041{
1042 PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS;
1043 return gv_fetchmethod_pvn_flags(stash, name, strlen(name), flags);
1044}
1045
1046GV *
1047Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN len, U32 flags)
1048{
1049 const char * const origname = name;
1050 const char * const name_end = name + len;
1051 const char *last_separator = NULL;
1052 GV* gv;
1053 HV* ostash = stash;
1054 SV *const error_report = MUTABLE_SV(stash);
1055 const U32 autoload = flags & GV_AUTOLOAD;
1056 const U32 do_croak = flags & GV_CROAK;
1057 const U32 is_utf8 = flags & SVf_UTF8;
1058
1059 PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS;
1060
1061 if (SvTYPE(stash) < SVt_PVHV)
1062 stash = NULL;
1063 else {
1064 /* The only way stash can become NULL later on is if last_separator is set,
1065 which in turn means that there is no need for a SVt_PVHV case
1066 the error reporting code. */
1067 }
1068
1069 {
1070 /* check if the method name is fully qualified or
1071 * not, and separate the package name from the actual
1072 * method name.
1073 *
1074 * leaves last_separator pointing to the beginning of the
1075 * last package separator (either ' or ::) or 0
1076 * if none was found.
1077 *
1078 * leaves name pointing at the beginning of the
1079 * method name.
1080 */
1081 const char *name_cursor = name;
1082 const char * const name_em1 = name_end - 1; /* name_end minus 1 */
1083 for (name_cursor = name; name_cursor < name_end ; name_cursor++) {
1084 if (*name_cursor == '\'') {
1085 last_separator = name_cursor;
1086 name = name_cursor + 1;
1087 }
1088 else if (name_cursor < name_em1 && *name_cursor == ':' && name_cursor[1] == ':') {
1089 last_separator = name_cursor++;
1090 name = name_cursor + 1;
1091 }
1092 }
1093 }
1094
1095 /* did we find a separator? */
1096 if (last_separator) {
1097 STRLEN sep_len= last_separator - origname;
1098 if ( memEQs(origname, sep_len, "SUPER")) {
1099 /* ->SUPER::method should really be looked up in original stash */
1100 stash = CopSTASH(PL_curcop);
1101 flags |= GV_SUPER;
1102 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
1103 origname, HvENAME_get(stash), name) );
1104 }
1105 else if ( sep_len >= 7 &&
1106 strBEGINs(last_separator - 7, "::SUPER")) {
1107 /* don't autovifify if ->NoSuchStash::SUPER::method */
1108 stash = gv_stashpvn(origname, sep_len - 7, is_utf8);
1109 if (stash) flags |= GV_SUPER;
1110 }
1111 else {
1112 /* don't autovifify if ->NoSuchStash::method */
1113 stash = gv_stashpvn(origname, sep_len, is_utf8);
1114 }
1115 ostash = stash;
1116 }
1117
1118 gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags);
1119 if (!gv) {
1120 /* This is the special case that exempts Foo->import and
1121 Foo->unimport from being an error even if there's no
1122 import/unimport subroutine */
1123 if (strEQ(name,"import") || strEQ(name,"unimport")) {
1124 gv = (GV*)sv_2mortal((SV*)newCONSTSUB_flags(NULL,
1125 NULL, 0, 0, NULL));
1126 } else if (autoload)
1127 gv = gv_autoload_pvn(
1128 ostash, name, name_end - name, GV_AUTOLOAD_ISMETHOD|flags
1129 );
1130 if (!gv && do_croak) {
1131 /* Right now this is exclusively for the benefit of S_method_common
1132 in pp_hot.c */
1133 if (stash) {
1134 /* If we can't find an IO::File method, it might be a call on
1135 * a filehandle. If IO:File has not been loaded, try to
1136 * require it first instead of croaking */
1137 const char *stash_name = HvNAME_get(stash);
1138 if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File")
1139 && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL,
1140 STR_WITH_LEN("IO/File.pm"), 0,
1141 HV_FETCH_ISEXISTS, NULL, 0)
1142 ) {
1143 require_pv("IO/File.pm");
1144 gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags);
1145 if (gv)
1146 return gv;
1147 }
1148 Perl_croak(aTHX_
1149 "Can't locate object method \"%" UTF8f
1150 "\" via package \"%" HEKf "\"",
1151 UTF8fARG(is_utf8, name_end - name, name),
1152 HEKfARG(HvNAME_HEK(stash)));
1153 }
1154 else {
1155 SV* packnamesv;
1156
1157 if (last_separator) {
1158 packnamesv = newSVpvn_flags(origname, last_separator - origname,
1159 SVs_TEMP | is_utf8);
1160 } else {
1161 packnamesv = error_report;
1162 }
1163
1164 Perl_croak(aTHX_
1165 "Can't locate object method \"%" UTF8f
1166 "\" via package \"%" SVf "\""
1167 " (perhaps you forgot to load \"%" SVf "\"?)",
1168 UTF8fARG(is_utf8, name_end - name, name),
1169 SVfARG(packnamesv), SVfARG(packnamesv));
1170 }
1171 }
1172 }
1173 else if (autoload) {
1174 CV* const cv = GvCV(gv);
1175 if (!CvROOT(cv) && !CvXSUB(cv)) {
1176 GV* stubgv;
1177 GV* autogv;
1178
1179 if (CvANON(cv) || CvLEXICAL(cv))
1180 stubgv = gv;
1181 else {
1182 stubgv = CvGV(cv);
1183 if (GvCV(stubgv) != cv) /* orphaned import */
1184 stubgv = gv;
1185 }
1186 autogv = gv_autoload_pvn(GvSTASH(stubgv),
1187 GvNAME(stubgv), GvNAMELEN(stubgv),
1188 GV_AUTOLOAD_ISMETHOD
1189 | (GvNAMEUTF8(stubgv) ? SVf_UTF8 : 0));
1190 if (autogv)
1191 gv = autogv;
1192 }
1193 }
1194
1195 return gv;
1196}
1197
1198GV*
1199Perl_gv_autoload_sv(pTHX_ HV *stash, SV* namesv, U32 flags)
1200{
1201 char *namepv;
1202 STRLEN namelen;
1203 PERL_ARGS_ASSERT_GV_AUTOLOAD_SV;
1204 namepv = SvPV(namesv, namelen);
1205 if (SvUTF8(namesv))
1206 flags |= SVf_UTF8;
1207 return gv_autoload_pvn(stash, namepv, namelen, flags);
1208}
1209
1210GV*
1211Perl_gv_autoload_pv(pTHX_ HV *stash, const char *namepv, U32 flags)
1212{
1213 PERL_ARGS_ASSERT_GV_AUTOLOAD_PV;
1214 return gv_autoload_pvn(stash, namepv, strlen(namepv), flags);
1215}
1216
1217GV*
1218Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
1219{
1220 GV* gv;
1221 CV* cv;
1222 HV* varstash;
1223 GV* vargv;
1224 SV* varsv;
1225 SV *packname = NULL;
1226 U32 is_utf8 = flags & SVf_UTF8 ? SVf_UTF8 : 0;
1227
1228 PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN;
1229
1230 if (len == S_autolen && memEQ(name, S_autoload, S_autolen))
1231 return NULL;
1232 if (stash) {
1233 if (SvTYPE(stash) < SVt_PVHV) {
1234 STRLEN packname_len = 0;
1235 const char * const packname_ptr = SvPV_const(MUTABLE_SV(stash), packname_len);
1236 packname = newSVpvn_flags(packname_ptr, packname_len,
1237 SVs_TEMP | SvUTF8(stash));
1238 stash = NULL;
1239 }
1240 else
1241 packname = sv_2mortal(newSVhek(HvNAME_HEK(stash)));
1242 if (flags & GV_SUPER) sv_catpvs(packname, "::SUPER");
1243 }
1244 if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE,
1245 is_utf8 | (flags & GV_SUPER))))
1246 return NULL;
1247 cv = GvCV(gv);
1248
1249 if (!(CvROOT(cv) || CvXSUB(cv)))
1250 return NULL;
1251
1252 /*
1253 * Inheriting AUTOLOAD for non-methods no longer works
1254 */
1255 if (
1256 !(flags & GV_AUTOLOAD_ISMETHOD)
1257 && (GvCVGEN(gv) || GvSTASH(gv) != stash)
1258 )
1259 Perl_croak(aTHX_ "Use of inherited AUTOLOAD for non-method %" SVf
1260 "::%" UTF8f "() is no longer allowed",
1261 SVfARG(packname),
1262 UTF8fARG(is_utf8, len, name));
1263
1264 if (CvISXSUB(cv)) {
1265 /* Instead of forcing the XSUB do another lookup for $AUTOLOAD
1266 * and split that value on the last '::', pass along the same data
1267 * via the SvPVX field in the CV, and the stash in CvSTASH.
1268 *
1269 * Due to an unfortunate accident of history, the SvPVX field
1270 * serves two purposes. It is also used for the subroutine's pro-
1271 * type. Since SvPVX has been documented as returning the sub name
1272 * for a long time, but not as returning the prototype, we have
1273 * to preserve the SvPVX AUTOLOAD behaviour and put the prototype
1274 * elsewhere.
1275 *
1276 * We put the prototype in the same allocated buffer, but after
1277 * the sub name. The SvPOK flag indicates the presence of a proto-
1278 * type. The CvAUTOLOAD flag indicates the presence of a sub name.
1279 * If both flags are on, then SvLEN is used to indicate the end of
1280 * the prototype (artificially lower than what is actually allo-
1281 * cated), at the risk of having to reallocate a few bytes unneces-
1282 * sarily--but that should happen very rarely, if ever.
1283 *
1284 * We use SvUTF8 for both prototypes and sub names, so if one is
1285 * UTF8, the other must be upgraded.
1286 */
1287 CvSTASH_set(cv, stash);
1288 if (SvPOK(cv)) { /* Ouch! */
1289 SV * const tmpsv = newSVpvn_flags(name, len, is_utf8);
1290 STRLEN ulen;
1291 const char *proto = CvPROTO(cv);
1292 assert(proto);
1293 if (SvUTF8(cv))
1294 sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2);
1295 ulen = SvCUR(tmpsv);
1296 SvCUR_set(tmpsv, SvCUR(tmpsv) + 1); /* include null in string */
1297 sv_catpvn_flags(
1298 tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv)
1299 );
1300 SvTEMP_on(tmpsv); /* Allow theft */
1301 sv_setsv_nomg((SV *)cv, tmpsv);
1302 SvTEMP_off(tmpsv);
1303 SvREFCNT_dec_NN(tmpsv);
1304 SvLEN_set(cv, SvCUR(cv) + 1);
1305 SvCUR_set(cv, ulen);
1306 }
1307 else {
1308 sv_setpvn((SV *)cv, name, len);
1309 SvPOK_off(cv);
1310 if (is_utf8)
1311 SvUTF8_on(cv);
1312 else SvUTF8_off(cv);
1313 }
1314 CvAUTOLOAD_on(cv);
1315 }
1316
1317 /*
1318 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
1319 * The subroutine's original name may not be "AUTOLOAD", so we don't
1320 * use that, but for lack of anything better we will use the sub's
1321 * original package to look up $AUTOLOAD.
1322 */
1323 varstash = CvNAMED(cv) ? CvSTASH(cv) : GvSTASH(CvGV(cv));
1324 vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
1325 ENTER;
1326
1327 if (!isGV(vargv)) {
1328 gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0);
1329#ifdef PERL_DONT_CREATE_GVSV
1330 GvSV(vargv) = newSV(0);
1331#endif
1332 }
1333 LEAVE;
1334 varsv = GvSVn(vargv);
1335 SvTAINTED_off(varsv); /* previous $AUTOLOAD taint is obsolete */
1336 /* XXX: this process is not careful to avoid extra magic gets and sets; tied $AUTOLOAD will get noise */
1337 sv_setsv(varsv, packname);
1338 sv_catpvs(varsv, "::");
1339 /* Ensure SvSETMAGIC() is called if necessary. In particular, to clear
1340 tainting if $FOO::AUTOLOAD was previously tainted, but is not now. */
1341 sv_catpvn_flags(
1342 varsv, name, len,
1343 SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES)
1344 );
1345 if (is_utf8)
1346 SvUTF8_on(varsv);
1347 return gv;
1348}
1349
1350
1351/* require_tie_mod() internal routine for requiring a module
1352 * that implements the logic of automatic ties like %! and %-
1353 * It loads the module and then calls the _tie_it subroutine
1354 * with the passed gv as an argument.
1355 *
1356 * The "gv" parameter should be the glob.
1357 * "varname" holds the 1-char name of the var, used for error messages.
1358 * "namesv" holds the module name. Its refcount will be decremented.
1359 * "flags": if flag & 1 then save the scalar before loading.
1360 * For the protection of $! to work (it is set by this routine)
1361 * the sv slot must already be magicalized.
1362 */
1363STATIC void
1364S_require_tie_mod(pTHX_ GV *gv, const char varname, const char * name,
1365 STRLEN len, const U32 flags)
1366{
1367 const SV * const target = varname == '[' ? GvSV(gv) : (SV *)GvHV(gv);
1368
1369 PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
1370
1371 /* If it is not tied */
1372 if (!target || !SvRMAGICAL(target)
1373 || !mg_find(target,
1374 varname == '[' ? PERL_MAGIC_tiedscalar : PERL_MAGIC_tied))
1375 {
1376 HV *stash;
1377 GV **gvp;
1378 dSP;
1379
1380 PUSHSTACKi(PERLSI_MAGIC);
1381 ENTER;
1382
1383#define GET_HV_FETCH_TIE_FUNC \
1384 ( (gvp = (GV **)hv_fetchs(stash, "_tie_it", 0)) \
1385 && *gvp \
1386 && ( (isGV(*gvp) && GvCV(*gvp)) \
1387 || (SvROK(*gvp) && SvTYPE(SvRV(*gvp)) == SVt_PVCV) ) \
1388 )
1389
1390 /* Load the module if it is not loaded. */
1391 if (!(stash = gv_stashpvn(name, len, 0))
1392 || ! GET_HV_FETCH_TIE_FUNC)
1393 {
1394 SV * const module = newSVpvn(name, len);
1395 const char type = varname == '[' ? '$' : '%';
1396 if ( flags & 1 )
1397 save_scalar(gv);
1398 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL);
1399 assert(sp == PL_stack_sp);
1400 stash = gv_stashpvn(name, len, 0);
1401 if (!stash)
1402 Perl_croak(aTHX_ "panic: Can't use %c%c because %s is not available",
1403 type, varname, name);
1404 else if (! GET_HV_FETCH_TIE_FUNC)
1405 Perl_croak(aTHX_ "panic: Can't use %c%c because %s does not define _tie_it",
1406 type, varname, name);
1407 }
1408 /* Now call the tie function. It should be in *gvp. */
1409 assert(gvp); assert(*gvp);
1410 PUSHMARK(SP);
1411 XPUSHs((SV *)gv);
1412 PUTBACK;
1413 call_sv((SV *)*gvp, G_VOID|G_DISCARD);
1414 LEAVE;
1415 POPSTACK;
1416 }
1417}
1418
1419/* add a require_tie_mod_s - the _s suffix is similar to pvs type suffixes,
1420 * IOW it means we do STR_WITH_LEN() ourselves and the user should pass in
1421 * a true string WITHOUT a len.
1422 */
1423#define require_tie_mod_s(gv, varname, name, flags) \
1424 S_require_tie_mod(aTHX_ gv, varname, STR_WITH_LEN(name), flags)
1425
1426/*
1427=for apidoc gv_stashpv
1428
1429Returns a pointer to the stash for a specified package. Uses C<strlen> to
1430determine the length of C<name>, then calls C<gv_stashpvn()>.
1431
1432=cut
1433*/
1434
1435HV*
1436Perl_gv_stashpv(pTHX_ const char *name, I32 create)
1437{
1438 PERL_ARGS_ASSERT_GV_STASHPV;
1439 return gv_stashpvn(name, strlen(name), create);
1440}
1441
1442/*
1443=for apidoc gv_stashpvn
1444
1445Returns a pointer to the stash for a specified package. The C<namelen>
1446parameter indicates the length of the C<name>, in bytes. C<flags> is passed
1447to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
1448created if it does not already exist. If the package does not exist and
1449C<flags> is 0 (or any other setting that does not create packages) then C<NULL>
1450is returned.
1451
1452Flags may be one of:
1453
1454 GV_ADD
1455 SVf_UTF8
1456 GV_NOADD_NOINIT
1457 GV_NOINIT
1458 GV_NOEXPAND
1459 GV_ADDMG
1460
1461The most important of which are probably C<GV_ADD> and C<SVf_UTF8>.
1462
1463Note, use of C<gv_stashsv> instead of C<gv_stashpvn> where possible is strongly
1464recommended for performance reasons.
1465
1466=for apidoc Amnh||GV_ADD
1467=for apidoc Amnh||GV_NOADD_NOINIT
1468=for apidoc Amnh||GV_NOINIT
1469=for apidoc Amnh||GV_NOEXPAND
1470=for apidoc Amnh||GV_ADDMG
1471=for apidoc Amnh||SVf_UTF8
1472
1473=cut
1474*/
1475
1476/*
1477gv_stashpvn_internal
1478
1479Perform the internal bits of gv_stashsvpvn_cached. You could think of this
1480as being one half of the logic. Not to be called except from gv_stashsvpvn_cached().
1481
1482*/
1483
1484PERL_STATIC_INLINE HV*
1485S_gv_stashpvn_internal(pTHX_ const char *name, U32 namelen, I32 flags)
1486{
1487 char smallbuf[128];
1488 char *tmpbuf;
1489 HV *stash;
1490 GV *tmpgv;
1491 U32 tmplen = namelen + 2;
1492
1493 PERL_ARGS_ASSERT_GV_STASHPVN_INTERNAL;
1494
1495 if (tmplen <= sizeof smallbuf)
1496 tmpbuf = smallbuf;
1497 else
1498 Newx(tmpbuf, tmplen, char);
1499 Copy(name, tmpbuf, namelen, char);
1500 tmpbuf[namelen] = ':';
1501 tmpbuf[namelen+1] = ':';
1502 tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV);
1503 if (tmpbuf != smallbuf)
1504 Safefree(tmpbuf);
1505 if (!tmpgv || !isGV_with_GP(tmpgv))
1506 return NULL;
1507 stash = GvHV(tmpgv);
1508 if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL;
1509 assert(stash);
1510 if (!HvNAME_get(stash)) {
1511 hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 );
1512
1513 /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */
1514 /* If the containing stash has multiple effective
1515 names, see that this one gets them, too. */
1516 if (HvAUX(GvSTASH(tmpgv))->xhv_name_count)
1517 mro_package_moved(stash, NULL, tmpgv, 1);
1518 }
1519 return stash;
1520}
1521
1522/*
1523gv_stashsvpvn_cached
1524
1525Returns a pointer to the stash for a specified package, possibly
1526cached. Implements both C<gv_stashpvn> and C<gv_stashsv>.
1527
1528Requires one of either namesv or namepv to be non-null.
1529
1530See C<L</gv_stashpvn>> for details on "flags".
1531
1532Note the sv interface is strongly preferred for performance reasons.
1533
1534*/
1535
1536#define PERL_ARGS_ASSERT_GV_STASHSVPVN_CACHED \
1537 assert(namesv || name)
1538
1539HV*
1540Perl_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char *name, U32 namelen, I32 flags)
1541{
1542 HV* stash;
1543 HE* he;
1544
1545 PERL_ARGS_ASSERT_GV_STASHSVPVN_CACHED;
1546
1547 he = (HE *)hv_common(
1548 PL_stashcache, namesv, name, namelen,
1549 (flags & SVf_UTF8) ? HVhek_UTF8 : 0, 0, NULL, 0
1550 );
1551
1552 if (he) {
1553 SV *sv = HeVAL(he);
1554 HV *hv;
1555 assert(SvIOK(sv));
1556 hv = INT2PTR(HV*, SvIVX(sv));
1557 assert(SvTYPE(hv) == SVt_PVHV);
1558 return hv;
1559 }
1560 else if (flags & GV_CACHE_ONLY) return NULL;
1561
1562 if (namesv) {
1563 if (SvOK(namesv)) { /* prevent double uninit warning */
1564 STRLEN len;
1565 name = SvPV_const(namesv, len);
1566 namelen = len;
1567 flags |= SvUTF8(namesv);
1568 } else {
1569 name = ""; namelen = 0;
1570 }
1571 }
1572 stash = gv_stashpvn_internal(name, namelen, flags);
1573
1574 if (stash && namelen) {
1575 SV* const ref = newSViv(PTR2IV(stash));
1576 (void)hv_store(PL_stashcache, name,
1577 (flags & SVf_UTF8) ? -(I32)namelen : (I32)namelen, ref, 0);
1578 }
1579
1580 return stash;
1581}
1582
1583HV*
1584Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)
1585{
1586 PERL_ARGS_ASSERT_GV_STASHPVN;
1587 return gv_stashsvpvn_cached(NULL, name, namelen, flags);
1588}
1589
1590/*
1591=for apidoc gv_stashsv
1592
1593Returns a pointer to the stash for a specified package. See
1594C<L</gv_stashpvn>>.
1595
1596Note this interface is strongly preferred over C<gv_stashpvn> for performance
1597reasons.
1598
1599=cut
1600*/
1601
1602HV*
1603Perl_gv_stashsv(pTHX_ SV *sv, I32 flags)
1604{
1605 PERL_ARGS_ASSERT_GV_STASHSV;
1606 return gv_stashsvpvn_cached(sv, NULL, 0, flags);
1607}
1608
1609
1610GV *
1611Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) {
1612 PERL_ARGS_ASSERT_GV_FETCHPV;
1613 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
1614}
1615
1616GV *
1617Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) {
1618 STRLEN len;
1619 const char * const nambeg =
1620 SvPV_flags_const(name, len, flags & GV_NO_SVGMAGIC ? 0 : SV_GMAGIC);
1621 PERL_ARGS_ASSERT_GV_FETCHSV;
1622 return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
1623}
1624
1625PERL_STATIC_INLINE void
1626S_gv_magicalize_isa(pTHX_ GV *gv)
1627{
1628 AV* av;
1629
1630 PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA;
1631
1632 av = GvAVn(gv);
1633 GvMULTI_on(gv);
1634 sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa,
1635 NULL, 0);
1636}
1637
1638/* This function grabs name and tries to split a stash and glob
1639 * from its contents. TODO better description, comments
1640 *
1641 * If the function returns TRUE and 'name == name_end', then
1642 * 'gv' can be directly returned to the caller of gv_fetchpvn_flags
1643 */
1644PERL_STATIC_INLINE bool
1645S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name,
1646 STRLEN *len, const char *nambeg, STRLEN full_len,
1647 const U32 is_utf8, const I32 add)
1648{
1649 char *tmpfullbuf = NULL; /* only malloc one big chunk of memory when the smallbuff is not large enough */
1650 const char *name_cursor;
1651 const char *const name_end = nambeg + full_len;
1652 const char *const name_em1 = name_end - 1;
1653 char smallbuf[64]; /* small buffer to avoid a malloc when possible */
1654
1655 PERL_ARGS_ASSERT_PARSE_GV_STASH_NAME;
1656
1657 if ( full_len > 2
1658 && **name == '*'
1659 && isIDFIRST_lazy_if_safe(*name + 1, name_end, is_utf8))
1660 {
1661 /* accidental stringify on a GV? */
1662 (*name)++;
1663 }
1664
1665 for (name_cursor = *name; name_cursor < name_end; name_cursor++) {
1666 if (name_cursor < name_em1 &&
1667 ((*name_cursor == ':' && name_cursor[1] == ':')
1668 || *name_cursor == '\''))
1669 {
1670 if (!*stash)
1671 *stash = PL_defstash;
1672 if (!*stash || !SvREFCNT(*stash)) /* symbol table under destruction */
1673 goto notok;
1674
1675 *len = name_cursor - *name;
1676 if (name_cursor > nambeg) { /* Skip for initial :: or ' */
1677 const char *key;
1678 GV**gvp;
1679 if (*name_cursor == ':') {
1680 key = *name;
1681 *len += 2;
1682 }
1683 else { /* using ' for package separator */
1684 /* use our pre-allocated buffer when possible to save a malloc */
1685 char *tmpbuf;
1686 if ( *len+2 <= sizeof smallbuf)
1687 tmpbuf = smallbuf;
1688 else {
1689 /* only malloc once if needed */
1690 if (tmpfullbuf == NULL) /* only malloc&free once, a little more than needed */
1691 Newx(tmpfullbuf, full_len+2, char);
1692 tmpbuf = tmpfullbuf;
1693 }
1694 Copy(*name, tmpbuf, *len, char);
1695 tmpbuf[(*len)++] = ':';
1696 tmpbuf[(*len)++] = ':';
1697 key = tmpbuf;
1698 }
1699 gvp = (GV**)hv_fetch(*stash, key, is_utf8 ? -((I32)*len) : (I32)*len, add);
1700 *gv = gvp ? *gvp : NULL;
1701 if (!*gv || *gv == (const GV *)&PL_sv_undef) {
1702 goto notok;
1703 }
1704 /* here we know that *gv && *gv != &PL_sv_undef */
1705 if (SvTYPE(*gv) != SVt_PVGV)
1706 gv_init_pvn(*gv, *stash, key, *len, (add & GV_ADDMULTI)|is_utf8);
1707 else
1708 GvMULTI_on(*gv);
1709
1710 if (!(*stash = GvHV(*gv))) {
1711 *stash = GvHV(*gv) = newHV();
1712 if (!HvNAME_get(*stash)) {
1713 if (GvSTASH(*gv) == PL_defstash && *len == 6
1714 && strBEGINs(*name, "CORE"))
1715 hv_name_sets(*stash, "CORE", 0);
1716 else
1717 hv_name_set(
1718 *stash, nambeg, name_cursor-nambeg, is_utf8
1719 );
1720 /* If the containing stash has multiple effective
1721 names, see that this one gets them, too. */
1722 if (HvAUX(GvSTASH(*gv))->xhv_name_count)
1723 mro_package_moved(*stash, NULL, *gv, 1);
1724 }
1725 }
1726 else if (!HvNAME_get(*stash))
1727 hv_name_set(*stash, nambeg, name_cursor - nambeg, is_utf8);
1728 }
1729
1730 if (*name_cursor == ':')
1731 name_cursor++;
1732 *name = name_cursor+1;
1733 if (*name == name_end) {
1734 if (!*gv) {
1735 *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE));
1736 if (SvTYPE(*gv) != SVt_PVGV) {
1737 gv_init_pvn(*gv, PL_defstash, "main::", 6,
1738 GV_ADDMULTI);
1739 GvHV(*gv) =
1740 MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash));
1741 }
1742 }
1743 goto ok;
1744 }
1745 }
1746 }
1747 *len = name_cursor - *name;
1748 ok:
1749 Safefree(tmpfullbuf); /* free our tmpfullbuf if it was used */
1750 return TRUE;
1751 notok:
1752 Safefree(tmpfullbuf); /* free our tmpfullbuf if it was used */
1753 return FALSE;
1754}
1755
1756
1757/* Checks if an unqualified name is in the main stash */
1758PERL_STATIC_INLINE bool
1759S_gv_is_in_main(pTHX_ const char *name, STRLEN len, const U32 is_utf8)
1760{
1761 PERL_ARGS_ASSERT_GV_IS_IN_MAIN;
1762
1763 /* If it's an alphanumeric variable */
1764 if ( len && isIDFIRST_lazy_if_safe(name, name + len, is_utf8) ) {
1765 /* Some "normal" variables are always in main::,
1766 * like INC or STDOUT.
1767 */
1768 switch (len) {
1769 case 1:
1770 if (*name == '_')
1771 return TRUE;
1772 break;
1773 case 3:
1774 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
1775 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
1776 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
1777 return TRUE;
1778 break;
1779 case 4:
1780 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1781 && name[3] == 'V')
1782 return TRUE;
1783 break;
1784 case 5:
1785 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
1786 && name[3] == 'I' && name[4] == 'N')
1787 return TRUE;
1788 break;
1789 case 6:
1790 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
1791 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
1792 ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
1793 return TRUE;
1794 break;
1795 case 7:
1796 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
1797 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
1798 && name[6] == 'T')
1799 return TRUE;
1800 break;
1801 }
1802 }
1803 /* *{""}, or a special variable like $@ */
1804 else
1805 return TRUE;
1806
1807 return FALSE;
1808}
1809
1810
1811/* This function is called if parse_gv_stash_name() failed to
1812 * find a stash, or if GV_NOTQUAL or an empty name was passed
1813 * to gv_fetchpvn_flags.
1814 *
1815 * It returns FALSE if the default stash can't be found nor created,
1816 * which might happen during global destruction.
1817 */
1818PERL_STATIC_INLINE bool
1819S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len,
1820 const U32 is_utf8, const I32 add,
1821 const svtype sv_type)
1822{
1823 PERL_ARGS_ASSERT_FIND_DEFAULT_STASH;
1824
1825 /* No stash in name, so see how we can default */
1826
1827 if ( gv_is_in_main(name, len, is_utf8) ) {
1828 *stash = PL_defstash;
1829 }
1830 else {
1831 if (IN_PERL_COMPILETIME) {
1832 *stash = PL_curstash;
1833 if (add && (PL_hints & HINT_STRICT_VARS) &&
1834 sv_type != SVt_PVCV &&
1835 sv_type != SVt_PVGV &&
1836 sv_type != SVt_PVFM &&
1837 sv_type != SVt_PVIO &&
1838 !(len == 1 && sv_type == SVt_PV &&
1839 (*name == 'a' || *name == 'b')) )
1840 {
1841 GV**gvp = (GV**)hv_fetch(*stash,name,is_utf8 ? -(I32)len : (I32)len,0);
1842 if (!gvp || *gvp == (const GV *)&PL_sv_undef ||
1843 SvTYPE(*gvp) != SVt_PVGV)
1844 {
1845 *stash = NULL;
1846 }
1847 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
1848 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
1849 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
1850 {
1851 /* diag_listed_as: Variable "%s" is not imported%s */
1852 Perl_ck_warner_d(
1853 aTHX_ packWARN(WARN_MISC),
1854 "Variable \"%c%" UTF8f "\" is not imported",
1855 sv_type == SVt_PVAV ? '@' :
1856 sv_type == SVt_PVHV ? '%' : '$',
1857 UTF8fARG(is_utf8, len, name));
1858 if (GvCVu(*gvp))
1859 Perl_ck_warner_d(
1860 aTHX_ packWARN(WARN_MISC),
1861 "\t(Did you mean &%" UTF8f " instead?)\n",
1862 UTF8fARG(is_utf8, len, name)
1863 );
1864 *stash = NULL;
1865 }
1866 }
1867 }
1868 else {
1869 /* Use the current op's stash */
1870 *stash = CopSTASH(PL_curcop);
1871 }
1872 }
1873
1874 if (!*stash) {
1875 if (add && !PL_in_clean_all) {
1876 GV *gv;
1877 qerror(Perl_mess(aTHX_
1878 "Global symbol \"%s%" UTF8f
1879 "\" requires explicit package name (did you forget to "
1880 "declare \"my %s%" UTF8f "\"?)",
1881 (sv_type == SVt_PV ? "$"
1882 : sv_type == SVt_PVAV ? "@"
1883 : sv_type == SVt_PVHV ? "%"
1884 : ""), UTF8fARG(is_utf8, len, name),
1885 (sv_type == SVt_PV ? "$"
1886 : sv_type == SVt_PVAV ? "@"
1887 : sv_type == SVt_PVHV ? "%"
1888 : ""), UTF8fARG(is_utf8, len, name)));
1889 /* To maintain the output of errors after the strict exception
1890 * above, and to keep compat with older releases, rather than
1891 * placing the variables in the pad, we place
1892 * them in the <none>:: stash.
1893 */
1894 gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
1895 if (!gv) {
1896 /* symbol table under destruction */
1897 return FALSE;
1898 }
1899 *stash = GvHV(gv);
1900 }
1901 else
1902 return FALSE;
1903 }
1904
1905 if (!SvREFCNT(*stash)) /* symbol table under destruction */
1906 return FALSE;
1907
1908 return TRUE;
1909}
1910
1911/* gv_magicalize only turns on the SVf_READONLY flag, not SVf_PROTECT. So
1912 redefine SvREADONLY_on for that purpose. We don’t use it later on in
1913 this file. */
1914#undef SvREADONLY_on
1915#define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)
1916
1917/* gv_magicalize() is called by gv_fetchpvn_flags when creating
1918 * a new GV.
1919 * Note that it does not insert the GV into the stash prior to
1920 * magicalization, which some variables require need in order
1921 * to work (like %+, %-, %!), so callers must take care of
1922 * that.
1923 *
1924 * It returns true if the gv did turn out to be magical one; i.e.,
1925 * if gv_magicalize actually did something.
1926 */
1927PERL_STATIC_INLINE bool
1928S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
1929 const svtype sv_type)
1930{
1931 SSize_t paren;
1932
1933 PERL_ARGS_ASSERT_GV_MAGICALIZE;
1934
1935 if (stash != PL_defstash) { /* not the main stash */
1936 /* We only have to check for a few names here: a, b, EXPORT, ISA
1937 and VERSION. All the others apply only to the main stash or to
1938 CORE (which is checked right after this). */
1939 if (len) {
1940 switch (*name) {
1941 case 'E':
1942 if (
1943 len >= 6 && name[1] == 'X' &&
1944 (memEQs(name, len, "EXPORT")
1945 ||memEQs(name, len, "EXPORT_OK")
1946 ||memEQs(name, len, "EXPORT_FAIL")
1947 ||memEQs(name, len, "EXPORT_TAGS"))
1948 )
1949 GvMULTI_on(gv);
1950 break;
1951 case 'I':
1952 if (memEQs(name, len, "ISA"))
1953 gv_magicalize_isa(gv);
1954 break;
1955 case 'V':
1956 if (memEQs(name, len, "VERSION"))
1957 GvMULTI_on(gv);
1958 break;
1959 case 'a':
1960 if (stash == PL_debstash && memEQs(name, len, "args")) {
1961 GvMULTI_on(gv_AVadd(gv));
1962 break;
1963 }
1964 /* FALLTHROUGH */
1965 case 'b':
1966 if (len == 1 && sv_type == SVt_PV)
1967 GvMULTI_on(gv);
1968 /* FALLTHROUGH */
1969 default:
1970 goto try_core;
1971 }
1972 goto ret;
1973 }
1974 try_core:
1975 if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
1976 /* Avoid null warning: */
1977 const char * const stashname = HvNAME(stash); assert(stashname);
1978 if (strBEGINs(stashname, "CORE"))
1979 S_maybe_add_coresub(aTHX_ 0, gv, name, len);
1980 }
1981 }
1982 else if (len > 1) {
1983#ifndef EBCDIC
1984 if (*name > 'V' ) {
1985 NOOP;
1986 /* Nothing else to do.
1987 The compiler will probably turn the switch statement into a
1988 branch table. Make sure we avoid even that small overhead for
1989 the common case of lower case variable names. (On EBCDIC
1990 platforms, we can't just do:
1991 if (NATIVE_TO_ASCII(*name) > NATIVE_TO_ASCII('V') ) {
1992 because cases like '\027' in the switch statement below are
1993 C1 (non-ASCII) controls on those platforms, so the remapping
1994 would make them larger than 'V')
1995 */
1996 } else
1997#endif
1998 {
1999 switch (*name) {
2000 case 'A':
2001 if (memEQs(name, len, "ARGV")) {
2002 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
2003 }
2004 else if (memEQs(name, len, "ARGVOUT")) {
2005 GvMULTI_on(gv);
2006 }
2007 break;
2008 case 'E':
2009 if (
2010 len >= 6 && name[1] == 'X' &&
2011 (memEQs(name, len, "EXPORT")
2012 ||memEQs(name, len, "EXPORT_OK")
2013 ||memEQs(name, len, "EXPORT_FAIL")
2014 ||memEQs(name, len, "EXPORT_TAGS"))
2015 )
2016 GvMULTI_on(gv);
2017 break;
2018 case 'I':
2019 if (memEQs(name, len, "ISA")) {
2020 gv_magicalize_isa(gv);
2021 }
2022 break;
2023 case 'S':
2024 if (memEQs(name, len, "SIG")) {
2025 HV *hv;
2026 I32 i;
2027 if (!PL_psig_name) {
2028 Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
2029 Newxz(PL_psig_pend, SIG_SIZE, int);
2030 PL_psig_ptr = PL_psig_name + SIG_SIZE;
2031 } else {
2032 /* I think that the only way to get here is to re-use an
2033 embedded perl interpreter, where the previous
2034 use didn't clean up fully because
2035 PL_perl_destruct_level was 0. I'm not sure that we
2036 "support" that, in that I suspect in that scenario
2037 there are sufficient other garbage values left in the
2038 interpreter structure that something else will crash
2039 before we get here. I suspect that this is one of
2040 those "doctor, it hurts when I do this" bugs. */
2041 Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
2042 Zero(PL_psig_pend, SIG_SIZE, int);
2043 }
2044 GvMULTI_on(gv);
2045 hv = GvHVn(gv);
2046 hv_magic(hv, NULL, PERL_MAGIC_sig);
2047 for (i = 1; i < SIG_SIZE; i++) {
2048 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
2049 if (init)
2050 sv_setsv(*init, &PL_sv_undef);
2051 }
2052 }
2053 break;
2054 case 'V':
2055 if (memEQs(name, len, "VERSION"))
2056 GvMULTI_on(gv);
2057 break;
2058 case '\003': /* $^CHILD_ERROR_NATIVE */
2059 if (memEQs(name, len, "\003HILD_ERROR_NATIVE"))
2060 goto magicalize;
2061 /* @{^CAPTURE} %{^CAPTURE} */
2062 if (memEQs(name, len, "\003APTURE")) {
2063 AV* const av = GvAVn(gv);
2064 const Size_t n = *name;
2065
2066 sv_magic(MUTABLE_SV(av), (SV*)n, PERL_MAGIC_regdata, NULL, 0);
2067 SvREADONLY_on(av);
2068
2069 require_tie_mod_s(gv, '+', "Tie::Hash::NamedCapture",0);
2070
2071 } else /* %{^CAPTURE_ALL} */
2072 if (memEQs(name, len, "\003APTURE_ALL")) {
2073 require_tie_mod_s(gv, '-', "Tie::Hash::NamedCapture",0);
2074 }
2075 break;
2076 case '\005': /* $^ENCODING */
2077 if (memEQs(name, len, "\005NCODING"))
2078 goto magicalize;
2079 break;
2080 case '\007': /* $^GLOBAL_PHASE */
2081 if (memEQs(name, len, "\007LOBAL_PHASE"))
2082 goto ro_magicalize;
2083 break;
2084 case '\014': /* $^LAST_FH */
2085 if (memEQs(name, len, "\014AST_FH"))
2086 goto ro_magicalize;
2087 break;
2088 case '\015': /* $^MATCH */
2089 if (memEQs(name, len, "\015ATCH")) {
2090 paren = RX_BUFF_IDX_CARET_FULLMATCH;
2091 goto storeparen;
2092 }
2093 break;
2094 case '\017': /* $^OPEN */
2095 if (memEQs(name, len, "\017PEN"))
2096 goto magicalize;
2097 break;
2098 case '\020': /* $^PREMATCH $^POSTMATCH */
2099 if (memEQs(name, len, "\020REMATCH")) {
2100 paren = RX_BUFF_IDX_CARET_PREMATCH;
2101 goto storeparen;
2102 }
2103 if (memEQs(name, len, "\020OSTMATCH")) {
2104 paren = RX_BUFF_IDX_CARET_POSTMATCH;
2105 goto storeparen;
2106 }
2107 break;
2108 case '\023':
2109 if (memEQs(name, len, "\023AFE_LOCALES"))
2110 goto ro_magicalize;
2111 break;
2112 case '\024': /* ${^TAINT} */
2113 if (memEQs(name, len, "\024AINT"))
2114 goto ro_magicalize;
2115 break;
2116 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
2117 if (memEQs(name, len, "\025NICODE"))
2118 goto ro_magicalize;
2119 if (memEQs(name, len, "\025TF8LOCALE"))
2120 goto ro_magicalize;
2121 if (memEQs(name, len, "\025TF8CACHE"))
2122 goto magicalize;
2123 break;
2124 case '\027': /* $^WARNING_BITS */
2125 if (memEQs(name, len, "\027ARNING_BITS"))
2126 goto magicalize;
2127#ifdef WIN32
2128 else if (memEQs(name, len, "\027IN32_SLOPPY_STAT"))
2129 goto magicalize;
2130#endif
2131 break;
2132 case '1':
2133 case '2':
2134 case '3':
2135 case '4':
2136 case '5':
2137 case '6':
2138 case '7':
2139 case '8':
2140 case '9':
2141 {
2142 /* Ensures that we have an all-digit variable, ${"1foo"} fails
2143 this test */
2144 UV uv;
2145 if (!grok_atoUV(name, &uv, NULL) || uv > I32_MAX)
2146 goto ret;
2147 /* XXX why are we using a SSize_t? */
2148 paren = (SSize_t)(I32)uv;
2149 goto storeparen;
2150 }
2151 }
2152 }
2153 } else {
2154 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
2155 be case '\0' in this switch statement (ie a default case) */
2156 switch (*name) {
2157 case '&': /* $& */
2158 paren = RX_BUFF_IDX_FULLMATCH;
2159 goto sawampersand;
2160 case '`': /* $` */
2161 paren = RX_BUFF_IDX_PREMATCH;
2162 goto sawampersand;
2163 case '\'': /* $' */
2164 paren = RX_BUFF_IDX_POSTMATCH;
2165 sawampersand:
2166#ifdef PERL_SAWAMPERSAND
2167 if (!(
2168 sv_type == SVt_PVAV ||
2169 sv_type == SVt_PVHV ||
2170 sv_type == SVt_PVCV ||
2171 sv_type == SVt_PVFM ||
2172 sv_type == SVt_PVIO
2173 )) { PL_sawampersand |=
2174 (*name == '`')
2175 ? SAWAMPERSAND_LEFT
2176 : (*name == '&')
2177 ? SAWAMPERSAND_MIDDLE
2178 : SAWAMPERSAND_RIGHT;
2179 }
2180#endif
2181 goto storeparen;
2182 case '1': /* $1 */
2183 case '2': /* $2 */
2184 case '3': /* $3 */
2185 case '4': /* $4 */
2186 case '5': /* $5 */
2187 case '6': /* $6 */
2188 case '7': /* $7 */
2189 case '8': /* $8 */
2190 case '9': /* $9 */
2191 paren = *name - '0';
2192
2193 storeparen:
2194 /* Flag the capture variables with a NULL mg_ptr
2195 Use mg_len for the array index to lookup. */
2196 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, NULL, paren);
2197 break;
2198
2199 case ':': /* $: */
2200 sv_setpv(GvSVn(gv),PL_chopset);
2201 goto magicalize;
2202
2203 case '?': /* $? */
2204#ifdef COMPLEX_STATUS
2205 SvUPGRADE(GvSVn(gv), SVt_PVLV);
2206#endif
2207 goto magicalize;
2208
2209 case '!': /* $! */
2210 GvMULTI_on(gv);
2211 /* If %! has been used, automatically load Errno.pm. */
2212
2213 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
2214
2215 /* magicalization must be done before require_tie_mod_s is called */
2216 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
2217 require_tie_mod_s(gv, '!', "Errno", 1);
2218
2219 break;
2220 case '-': /* $-, %-, @- */
2221 case '+': /* $+, %+, @+ */
2222 GvMULTI_on(gv); /* no used once warnings here */
2223 { /* $- $+ */
2224 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
2225 if (*name == '+')
2226 SvREADONLY_on(GvSVn(gv));
2227 }
2228 { /* %- %+ */
2229 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
2230 require_tie_mod_s(gv, *name, "Tie::Hash::NamedCapture",0);
2231 }
2232 { /* @- @+ */
2233 AV* const av = GvAVn(gv);
2234 const Size_t n = *name;
2235
2236 sv_magic(MUTABLE_SV(av), (SV*)n, PERL_MAGIC_regdata, NULL, 0);
2237 SvREADONLY_on(av);
2238 }
2239 break;
2240 case '*': /* $* */
2241 case '#': /* $# */
2242 if (sv_type == SVt_PV)
2243 /* diag_listed_as: $* is no longer supported as of Perl 5.30 */
2244 Perl_croak(aTHX_ "$%c is no longer supported as of Perl 5.30", *name);
2245 break;
2246 case '\010': /* $^H */
2247 {
2248 HV *const hv = GvHVn(gv);
2249 hv_magic(hv, NULL, PERL_MAGIC_hints);
2250 }
2251 goto magicalize;
2252 case '\023': /* $^S */
2253 ro_magicalize:
2254 SvREADONLY_on(GvSVn(gv));
2255 /* FALLTHROUGH */
2256 case '0': /* $0 */
2257 case '^': /* $^ */
2258 case '~': /* $~ */
2259 case '=': /* $= */
2260 case '%': /* $% */
2261 case '.': /* $. */
2262 case '(': /* $( */
2263 case ')': /* $) */
2264 case '<': /* $< */
2265 case '>': /* $> */
2266 case '\\': /* $\ */
2267 case '/': /* $/ */
2268 case '|': /* $| */
2269 case '$': /* $$ */
2270 case '[': /* $[ */
2271 case '\001': /* $^A */
2272 case '\003': /* $^C */
2273 case '\004': /* $^D */
2274 case '\005': /* $^E */
2275 case '\006': /* $^F */
2276 case '\011': /* $^I, NOT \t in EBCDIC */
2277 case '\016': /* $^N */
2278 case '\017': /* $^O */
2279 case '\020': /* $^P */
2280 case '\024': /* $^T */
2281 case '\027': /* $^W */
2282 magicalize:
2283 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
2284 break;
2285
2286 case '\014': /* $^L */
2287 sv_setpvs(GvSVn(gv),"\f");
2288 break;
2289 case ';': /* $; */
2290 sv_setpvs(GvSVn(gv),"\034");
2291 break;
2292 case ']': /* $] */
2293 {
2294 SV * const sv = GvSV(gv);
2295 if (!sv_derived_from(PL_patchlevel, "version"))
2296 upg_version(PL_patchlevel, TRUE);
2297 GvSV(gv) = vnumify(PL_patchlevel);
2298 SvREADONLY_on(GvSV(gv));
2299 SvREFCNT_dec(sv);
2300 }
2301 break;
2302 case '\026': /* $^V */
2303 {
2304 SV * const sv = GvSV(gv);
2305 GvSV(gv) = new_version(PL_patchlevel);
2306 SvREADONLY_on(GvSV(gv));
2307 SvREFCNT_dec(sv);
2308 }
2309 break;
2310 case 'a':
2311 case 'b':
2312 if (sv_type == SVt_PV)
2313 GvMULTI_on(gv);
2314 }
2315 }
2316
2317 ret:
2318 /* Return true if we actually did something. */
2319 return GvAV(gv) || GvHV(gv) || GvIO(gv) || GvCV(gv)
2320 || ( GvSV(gv) && (
2321 SvOK(GvSV(gv)) || SvMAGICAL(GvSV(gv))
2322 )
2323 );
2324}
2325
2326/* If we do ever start using this later on in the file, we need to make
2327 sure we don’t accidentally use the wrong definition. */
2328#undef SvREADONLY_on
2329
2330/* This function is called when the stash already holds the GV of the magic
2331 * variable we're looking for, but we need to check that it has the correct
2332 * kind of magic. For example, if someone first uses $! and then %!, the
2333 * latter would end up here, and we add the Errno tie to the HASH slot of
2334 * the *! glob.
2335 */
2336PERL_STATIC_INLINE void
2337S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type)
2338{
2339 PERL_ARGS_ASSERT_MAYBE_MULTIMAGIC_GV;
2340
2341 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
2342 if (*name == '!')
2343 require_tie_mod_s(gv, '!', "Errno", 1);
2344 else if (*name == '-' || *name == '+')
2345 require_tie_mod_s(gv, *name, "Tie::Hash::NamedCapture", 0);
2346 } else if (sv_type == SVt_PV) {
2347 if (*name == '*' || *name == '#') {
2348 /* diag_listed_as: $* is no longer supported as of Perl 5.30 */
2349 Perl_croak(aTHX_ "$%c is no longer supported as of Perl 5.30", *name);
2350 }
2351 }
2352 if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
2353 switch (*name) {
2354#ifdef PERL_SAWAMPERSAND
2355 case '`':
2356 PL_sawampersand |= SAWAMPERSAND_LEFT;
2357 (void)GvSVn(gv);
2358 break;
2359 case '&':
2360 PL_sawampersand |= SAWAMPERSAND_MIDDLE;
2361 (void)GvSVn(gv);
2362 break;
2363 case '\'':
2364 PL_sawampersand |= SAWAMPERSAND_RIGHT;
2365 (void)GvSVn(gv);
2366 break;
2367#endif
2368 }
2369 }
2370}
2371
2372GV *
2373Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
2374 const svtype sv_type)
2375{
2376 const char *name = nambeg;
2377 GV *gv = NULL;
2378 GV**gvp;
2379 STRLEN len;
2380 HV *stash = NULL;
2381 const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
2382 const I32 no_expand = flags & GV_NOEXPAND;
2383 const I32 add = flags & ~GV_NOADD_MASK;
2384 const U32 is_utf8 = flags & SVf_UTF8;
2385 bool addmg = cBOOL(flags & GV_ADDMG);
2386 const char *const name_end = nambeg + full_len;
2387 U32 faking_it;
2388
2389 PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS;
2390
2391 /* If we have GV_NOTQUAL, the caller promised that
2392 * there is no stash, so we can skip the check.
2393 * Similarly if full_len is 0, since then we're
2394 * dealing with something like *{""} or ""->foo()
2395 */
2396 if ((flags & GV_NOTQUAL) || !full_len) {
2397 len = full_len;
2398 }
2399 else if (parse_gv_stash_name(&stash, &gv, &name, &len, nambeg, full_len, is_utf8, add)) {
2400 if (name == name_end) return gv;
2401 }
2402 else {
2403 return NULL;
2404 }
2405
2406 if (!stash && !find_default_stash(&stash, name, len, is_utf8, add, sv_type)) {
2407 return NULL;
2408 }
2409
2410 /* By this point we should have a stash and a name */
2411 gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -(I32)len : (I32)len,add);
2412 if (!gvp || *gvp == (const GV *)&PL_sv_undef) {
2413 if (addmg) gv = (GV *)newSV(0);
2414 else return NULL;
2415 }
2416 else gv = *gvp, addmg = 0;
2417 /* From this point on, addmg means gv has not been inserted in the
2418 symtab yet. */
2419
2420 if (SvTYPE(gv) == SVt_PVGV) {
2421 /* The GV already exists, so return it, but check if we need to do
2422 * anything else with it before that.
2423 */
2424 if (add) {
2425 /* This is the heuristic that handles if a variable triggers the
2426 * 'used only once' warning. If there's already a GV in the stash
2427 * with this name, then we assume that the variable has been used
2428 * before and turn its MULTI flag on.
2429 * It's a heuristic because it can easily be "tricked", like with
2430 * BEGIN { $a = 1; $::{foo} = *a }; () = $foo
2431 * not warning about $main::foo being used just once
2432 */
2433 GvMULTI_on(gv);
2434 gv_init_svtype(gv, sv_type);
2435 /* You reach this path once the typeglob has already been created,
2436 either by the same or a different sigil. If this path didn't
2437 exist, then (say) referencing $! first, and %! second would
2438 mean that %! was not handled correctly. */
2439 if (len == 1 && stash == PL_defstash) {
2440 maybe_multimagic_gv(gv, name, sv_type);
2441 }
2442 else if (sv_type == SVt_PVAV
2443 && memEQs(name, len, "ISA")
2444 && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
2445 gv_magicalize_isa(gv);
2446 }
2447 return gv;
2448 } else if (no_init) {
2449 assert(!addmg);
2450 return gv;
2451 }
2452 /* If GV_NOEXPAND is true and what we got off the stash is a ref,
2453 * don't expand it to a glob. This is an optimization so that things
2454 * copying constants over, like Exporter, don't have to be rewritten
2455 * to take into account that you can store more than just globs in
2456 * stashes.
2457 */
2458 else if (no_expand && SvROK(gv)) {
2459 assert(!addmg);
2460 return gv;
2461 }
2462
2463 /* Adding a new symbol.
2464 Unless of course there was already something non-GV here, in which case
2465 we want to behave as if there was always a GV here, containing some sort
2466 of subroutine.
2467 Otherwise we run the risk of creating things like GvIO, which can cause
2468 subtle bugs. eg the one that tripped up SQL::Translator */
2469
2470 faking_it = SvOK(gv);
2471
2472 if (add & GV_ADDWARN)
2473 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2474 "Had to create %" UTF8f " unexpectedly",
2475 UTF8fARG(is_utf8, name_end-nambeg, nambeg));
2476 gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8);
2477
2478 if ( full_len != 0
2479 && isIDFIRST_lazy_if_safe(name, name + full_len, is_utf8)
2480 && !ckWARN(WARN_ONCE) )
2481 {
2482 GvMULTI_on(gv) ;
2483 }
2484
2485 /* set up magic where warranted */
2486 if ( gv_magicalize(gv, stash, name, len, sv_type) ) {
2487 /* See 23496c6 */
2488 if (addmg) {
2489 /* gv_magicalize magicalised this gv, so we want it
2490 * stored in the symtab.
2491 * Effectively the caller is asking, ‘Does this gv exist?’
2492 * And we respond, ‘Er, *now* it does!’
2493 */
2494 (void)hv_store(stash,name,len,(SV *)gv,0);
2495 }
2496 }
2497 else if (addmg) {
2498 /* The temporary GV created above */
2499 SvREFCNT_dec_NN(gv);
2500 gv = NULL;
2501 }
2502
2503 if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type);
2504 return gv;
2505}
2506
2507void
2508Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2509{
2510 const char *name;
2511 const HV * const hv = GvSTASH(gv);
2512
2513 PERL_ARGS_ASSERT_GV_FULLNAME4;
2514
2515 sv_setpv(sv, prefix ? prefix : "");
2516
2517 if (hv && (name = HvNAME(hv))) {
2518 const STRLEN len = HvNAMELEN(hv);
2519 if (keepmain || ! memBEGINs(name, len, "main")) {
2520 sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES);
2521 sv_catpvs(sv,"::");
2522 }
2523 }
2524 else sv_catpvs(sv,"__ANON__::");
2525 sv_catsv(sv,sv_2mortal(newSVhek(GvNAME_HEK(gv))));
2526}
2527
2528void
2529Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2530{
2531 const GV * const egv = GvEGVx(gv);
2532
2533 PERL_ARGS_ASSERT_GV_EFULLNAME4;
2534
2535 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
2536}
2537
2538
2539/* recursively scan a stash and any nested stashes looking for entries
2540 * that need the "only used once" warning raised
2541 */
2542
2543void
2544Perl_gv_check(pTHX_ HV *stash)
2545{
2546 I32 i;
2547
2548 PERL_ARGS_ASSERT_GV_CHECK;
2549
2550 if (!SvOOK(stash))
2551 return;
2552
2553 assert(HvARRAY(stash));
2554
2555 for (i = 0; i <= (I32) HvMAX(stash); i++) {
2556 const HE *entry;
2557 /* mark stash is being scanned, to avoid recursing */
2558 HvAUX(stash)->xhv_aux_flags |= HvAUXf_SCAN_STASH;
2559 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
2560 GV *gv;
2561 HV *hv;
2562 STRLEN keylen = HeKLEN(entry);
2563 const char * const key = HeKEY(entry);
2564
2565 if (keylen >= 2 && key[keylen-2] == ':' && key[keylen-1] == ':' &&
2566 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
2567 {
2568 if (hv != PL_defstash && hv != stash
2569 && !(SvOOK(hv)
2570 && (HvAUX(hv)->xhv_aux_flags & HvAUXf_SCAN_STASH))
2571 )
2572 gv_check(hv); /* nested package */
2573 }
2574 else if ( HeKLEN(entry) != 0
2575 && *HeKEY(entry) != '_'
2576 && isIDFIRST_lazy_if_safe(HeKEY(entry),
2577 HeKEY(entry) + HeKLEN(entry),
2578 HeUTF8(entry)) )
2579 {
2580 const char *file;
2581 gv = MUTABLE_GV(HeVAL(entry));
2582 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
2583 continue;
2584 file = GvFILE(gv);
2585 CopLINE_set(PL_curcop, GvLINE(gv));
2586#ifdef USE_ITHREADS
2587 CopFILE(PL_curcop) = (char *)file; /* set for warning */
2588#else
2589 CopFILEGV(PL_curcop)
2590 = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
2591#endif
2592 Perl_warner(aTHX_ packWARN(WARN_ONCE),
2593 "Name \"%" HEKf "::%" HEKf
2594 "\" used only once: possible typo",
2595 HEKfARG(HvNAME_HEK(stash)),
2596 HEKfARG(GvNAME_HEK(gv)));
2597 }
2598 }
2599 HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_SCAN_STASH;
2600 }
2601}
2602
2603GV *
2604Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags)
2605{
2606 PERL_ARGS_ASSERT_NEWGVGEN_FLAGS;
2607 assert(!(flags & ~SVf_UTF8));
2608
2609 return gv_fetchpv(Perl_form(aTHX_ "%" UTF8f "::_GEN_%ld",
2610 UTF8fARG(flags, strlen(pack), pack),
2611 (long)PL_gensym++),
2612 GV_ADD, SVt_PVGV);
2613}
2614
2615/* hopefully this is only called on local symbol table entries */
2616
2617GP*
2618Perl_gp_ref(pTHX_ GP *gp)
2619{
2620 if (!gp)
2621 return NULL;
2622 gp->gp_refcnt++;
2623 if (gp->gp_cv) {
2624 if (gp->gp_cvgen) {
2625 /* If the GP they asked for a reference to contains
2626 a method cache entry, clear it first, so that we
2627 don't infect them with our cached entry */
2628 SvREFCNT_dec_NN(gp->gp_cv);
2629 gp->gp_cv = NULL;
2630 gp->gp_cvgen = 0;
2631 }
2632 }
2633 return gp;
2634}
2635
2636void
2637Perl_gp_free(pTHX_ GV *gv)
2638{
2639 GP* gp;
2640 int attempts = 100;
2641
2642 if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
2643 return;
2644 if (gp->gp_refcnt == 0) {
2645 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2646 "Attempt to free unreferenced glob pointers"
2647 pTHX__FORMAT pTHX__VALUE);
2648 return;
2649 }
2650 if (gp->gp_refcnt > 1) {
2651 borrowed:
2652 if (gp->gp_egv == gv)
2653 gp->gp_egv = 0;
2654 gp->gp_refcnt--;
2655 GvGP_set(gv, NULL);
2656 return;
2657 }
2658
2659 while (1) {
2660 /* Copy and null out all the glob slots, so destructors do not see
2661 freed SVs. */
2662 HEK * const file_hek = gp->gp_file_hek;
2663 SV * const sv = gp->gp_sv;
2664 AV * const av = gp->gp_av;
2665 HV * const hv = gp->gp_hv;
2666 IO * const io = gp->gp_io;
2667 CV * const cv = gp->gp_cv;
2668 CV * const form = gp->gp_form;
2669
2670 gp->gp_file_hek = NULL;
2671 gp->gp_sv = NULL;
2672 gp->gp_av = NULL;
2673 gp->gp_hv = NULL;
2674 gp->gp_io = NULL;
2675 gp->gp_cv = NULL;
2676 gp->gp_form = NULL;
2677
2678 if (file_hek)
2679 unshare_hek(file_hek);
2680
2681 SvREFCNT_dec(sv);
2682 SvREFCNT_dec(av);
2683 /* FIXME - another reference loop GV -> symtab -> GV ?
2684 Somehow gp->gp_hv can end up pointing at freed garbage. */
2685 if (hv && SvTYPE(hv) == SVt_PVHV) {
2686 const HEK *hvname_hek = HvNAME_HEK(hv);
2687 if (PL_stashcache && hvname_hek) {
2688 DEBUG_o(Perl_deb(aTHX_
2689 "gp_free clearing PL_stashcache for '%" HEKf "'\n",
2690 HEKfARG(hvname_hek)));
2691 (void)hv_deletehek(PL_stashcache, hvname_hek, G_DISCARD);
2692 }
2693 SvREFCNT_dec(hv);
2694 }
2695 if (io && SvREFCNT(io) == 1 && IoIFP(io)
2696 && (IoTYPE(io) == IoTYPE_WRONLY ||
2697 IoTYPE(io) == IoTYPE_RDWR ||
2698 IoTYPE(io) == IoTYPE_APPEND)
2699 && ckWARN_d(WARN_IO)
2700 && IoIFP(io) != PerlIO_stdin()
2701 && IoIFP(io) != PerlIO_stdout()
2702 && IoIFP(io) != PerlIO_stderr()
2703 && !(IoFLAGS(io) & IOf_FAKE_DIRP))
2704 io_close(io, gv, FALSE, TRUE);
2705 SvREFCNT_dec(io);
2706 SvREFCNT_dec(cv);
2707 SvREFCNT_dec(form);
2708
2709 /* Possibly reallocated by a destructor */
2710 gp = GvGP(gv);
2711
2712 if (!gp->gp_file_hek
2713 && !gp->gp_sv
2714 && !gp->gp_av
2715 && !gp->gp_hv
2716 && !gp->gp_io
2717 && !gp->gp_cv
2718 && !gp->gp_form) break;
2719
2720 if (--attempts == 0) {
2721 Perl_die(aTHX_
2722 "panic: gp_free failed to free glob pointer - "
2723 "something is repeatedly re-creating entries"
2724 );
2725 }
2726 }
2727
2728 /* Possibly incremented by a destructor doing glob assignment */
2729 if (gp->gp_refcnt > 1) goto borrowed;
2730 Safefree(gp);
2731 GvGP_set(gv, NULL);
2732}
2733
2734int
2735Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
2736{
2737 AMT * const amtp = (AMT*)mg->mg_ptr;
2738 PERL_UNUSED_ARG(sv);
2739
2740 PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
2741
2742 if (amtp && AMT_AMAGIC(amtp)) {
2743 int i;
2744 for (i = 1; i < NofAMmeth; i++) {
2745 CV * const cv = amtp->table[i];
2746 if (cv) {
2747 SvREFCNT_dec_NN(MUTABLE_SV(cv));
2748 amtp->table[i] = NULL;
2749 }
2750 }
2751 }
2752 return 0;
2753}
2754
2755/* Updates and caches the CV's */
2756/* Returns:
2757 * 1 on success and there is some overload
2758 * 0 if there is no overload
2759 * -1 if some error occurred and it couldn't croak
2760 */
2761
2762int
2763Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
2764{
2765 MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2766 AMT amt;
2767 const struct mro_meta* stash_meta = HvMROMETA(stash);
2768 U32 newgen;
2769
2770 PERL_ARGS_ASSERT_GV_AMUPDATE;
2771
2772 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2773 if (mg) {
2774 const AMT * const amtp = (AMT*)mg->mg_ptr;
2775 if (amtp->was_ok_sub == newgen) {
2776 return AMT_AMAGIC(amtp) ? 1 : 0;
2777 }
2778 sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
2779 }
2780
2781 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
2782
2783 Zero(&amt,1,AMT);
2784 amt.was_ok_sub = newgen;
2785 amt.fallback = AMGfallNO;
2786 amt.flags = 0;
2787
2788 {
2789 int filled = 0;
2790 int i;
2791 bool deref_seen = 0;
2792
2793
2794 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
2795
2796 /* Try to find via inheritance. */
2797 GV *gv = gv_fetchmeth_pvn(stash, PL_AMG_names[0], 2, -1, 0);
2798 SV * const sv = gv ? GvSV(gv) : NULL;
2799 CV* cv;
2800
2801 if (!gv)
2802 {
2803 if (!gv_fetchmeth_pvn(stash, "((", 2, -1, 0))
2804 goto no_table;
2805 }
2806#ifdef PERL_DONT_CREATE_GVSV
2807 else if (!sv) {
2808 NOOP; /* Equivalent to !SvTRUE and !SvOK */
2809 }
2810#endif
2811 else if (SvTRUE(sv))
2812 /* don't need to set overloading here because fallback => 1
2813 * is the default setting for classes without overloading */
2814 amt.fallback=AMGfallYES;
2815 else if (SvOK(sv)) {
2816 amt.fallback=AMGfallNEVER;
2817 filled = 1;
2818 }
2819 else {
2820 filled = 1;
2821 }
2822
2823 assert(SvOOK(stash));
2824 /* initially assume the worst */
2825 HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_NO_DEREF;
2826
2827 for (i = 1; i < NofAMmeth; i++) {
2828 const char * const cooky = PL_AMG_names[i];
2829 /* Human-readable form, for debugging: */
2830 const char * const cp = AMG_id2name(i);
2831 const STRLEN l = PL_AMG_namelens[i];
2832
2833 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
2834 cp, HvNAME_get(stash)) );
2835 /* don't fill the cache while looking up!
2836 Creation of inheritance stubs in intermediate packages may
2837 conflict with the logic of runtime method substitution.
2838 Indeed, for inheritance A -> B -> C, if C overloads "+0",
2839 then we could have created stubs for "(+0" in A and C too.
2840 But if B overloads "bool", we may want to use it for
2841 numifying instead of C's "+0". */
2842 gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
2843 cv = 0;
2844 if (gv && (cv = GvCV(gv)) && CvHASGV(cv)) {
2845 const HEK * const gvhek = CvGvNAME_HEK(cv);
2846 const HEK * const stashek =
2847 HvNAME_HEK(CvNAMED(cv) ? CvSTASH(cv) : GvSTASH(CvGV(cv)));
2848 if (memEQs(HEK_KEY(gvhek), HEK_LEN(gvhek), "nil")
2849 && stashek
2850 && memEQs(HEK_KEY(stashek), HEK_LEN(stashek), "overload")) {
2851 /* This is a hack to support autoloading..., while
2852 knowing *which* methods were declared as overloaded. */
2853 /* GvSV contains the name of the method. */
2854 GV *ngv = NULL;
2855 SV *gvsv = GvSV(gv);
2856
2857 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%" SVf256\
2858 "\" for overloaded \"%s\" in package \"%.256s\"\n",
2859 (void*)GvSV(gv), cp, HvNAME(stash)) );
2860 if (!gvsv || !SvPOK(gvsv)
2861 || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0)))
2862 {
2863 /* Can be an import stub (created by "can"). */
2864 if (destructing) {
2865 return -1;
2866 }
2867 else {
2868 const SV * const name = (gvsv && SvPOK(gvsv))
2869 ? gvsv
2870 : newSVpvs_flags("???", SVs_TEMP);
2871 /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */
2872 Perl_croak(aTHX_ "%s method \"%" SVf256
2873 "\" overloading \"%s\" "\
2874 "in package \"%" HEKf256 "\"",
2875 (GvCVGEN(gv) ? "Stub found while resolving"
2876 : "Can't resolve"),
2877 SVfARG(name), cp,
2878 HEKfARG(
2879 HvNAME_HEK(stash)
2880 ));
2881 }
2882 }
2883 cv = GvCV(gv = ngv);
2884 }
2885 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
2886 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
2887 GvNAME(CvGV(cv))) );
2888 filled = 1;
2889 } else if (gv) { /* Autoloaded... */
2890 cv = MUTABLE_CV(gv);
2891 filled = 1;
2892 }
2893 amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
2894
2895 if (gv) {
2896 switch (i) {
2897 case to_sv_amg:
2898 case to_av_amg:
2899 case to_hv_amg:
2900 case to_gv_amg:
2901 case to_cv_amg:
2902 case nomethod_amg:
2903 deref_seen = 1;
2904 break;
2905 }
2906 }
2907 }
2908 if (!deref_seen)
2909 /* none of @{} etc overloaded; we can do $obj->[N] quicker.
2910 * NB - aux var invalid here, HvARRAY() could have been
2911 * reallocated since it was assigned to */
2912 HvAUX(stash)->xhv_aux_flags |= HvAUXf_NO_DEREF;
2913
2914 if (filled) {
2915 AMT_AMAGIC_on(&amt);
2916 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2917 (char*)&amt, sizeof(AMT));
2918 return TRUE;
2919 }
2920 }
2921 /* Here we have no table: */
2922 no_table:
2923 AMT_AMAGIC_off(&amt);
2924 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2925 (char*)&amt, sizeof(AMTS));
2926 return 0;
2927}
2928
2929
2930CV*
2931Perl_gv_handler(pTHX_ HV *stash, I32 id)
2932{
2933 MAGIC *mg;
2934 AMT *amtp;
2935 U32 newgen;
2936 struct mro_meta* stash_meta;
2937
2938 if (!stash || !HvNAME_get(stash))
2939 return NULL;
2940
2941 stash_meta = HvMROMETA(stash);
2942 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2943
2944 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2945 if (!mg) {
2946 do_update:
2947 if (Gv_AMupdate(stash, 0) == -1)
2948 return NULL;
2949 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2950 }
2951 assert(mg);
2952 amtp = (AMT*)mg->mg_ptr;
2953 if ( amtp->was_ok_sub != newgen )
2954 goto do_update;
2955 if (AMT_AMAGIC(amtp)) {
2956 CV * const ret = amtp->table[id];
2957 if (ret && isGV(ret)) { /* Autoloading stab */
2958 /* Passing it through may have resulted in a warning
2959 "Inherited AUTOLOAD for a non-method deprecated", since
2960 our caller is going through a function call, not a method call.
2961 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
2962 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
2963
2964 if (gv && GvCV(gv))
2965 return GvCV(gv);
2966 }
2967 return ret;
2968 }
2969
2970 return NULL;
2971}
2972
2973
2974/* Implement tryAMAGICun_MG macro.
2975 Do get magic, then see if the stack arg is overloaded and if so call it.
2976 Flags:
2977 AMGf_numeric apply sv_2num to the stack arg.
2978*/
2979
2980bool
2981Perl_try_amagic_un(pTHX_ int method, int flags) {
2982 dSP;
2983 SV* tmpsv;
2984 SV* const arg = TOPs;
2985
2986 SvGETMAGIC(arg);
2987
2988 if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
2989 AMGf_noright | AMGf_unary
2990 | (flags & AMGf_numarg))))
2991 {
2992 /* where the op is of the form:
2993 * $lex = $x op $y (where the assign is optimised away)
2994 * then assign the returned value to targ and return that;
2995 * otherwise return the value directly
2996 */
2997 if ( (PL_opargs[PL_op->op_type] & OA_TARGLEX)
2998 && (PL_op->op_private & OPpTARGET_MY))
2999 {
3000 dTARGET;
3001 sv_setsv(TARG, tmpsv);
3002 SETTARG;
3003 }
3004 else
3005 SETs(tmpsv);
3006
3007 PUTBACK;
3008 return TRUE;
3009 }
3010
3011 if ((flags & AMGf_numeric) && SvROK(arg))
3012 *sp = sv_2num(arg);
3013 return FALSE;
3014}
3015
3016
3017/* Implement tryAMAGICbin_MG macro.
3018 Do get magic, then see if the two stack args are overloaded and if so
3019 call it.
3020 Flags:
3021 AMGf_assign op may be called as mutator (eg +=)
3022 AMGf_numeric apply sv_2num to the stack arg.
3023*/
3024
3025bool
3026Perl_try_amagic_bin(pTHX_ int method, int flags) {
3027 dSP;
3028 SV* const left = TOPm1s;
3029 SV* const right = TOPs;
3030
3031 SvGETMAGIC(left);
3032 if (left != right)
3033 SvGETMAGIC(right);
3034
3035 if (SvAMAGIC(left) || SvAMAGIC(right)) {
3036 SV * tmpsv;
3037 /* STACKED implies mutator variant, e.g. $x += 1 */
3038 bool mutator = (flags & AMGf_assign) && (PL_op->op_flags & OPf_STACKED);
3039
3040 tmpsv = amagic_call(left, right, method,
3041 (mutator ? AMGf_assign: 0)
3042 | (flags & AMGf_numarg));
3043 if (tmpsv) {
3044 (void)POPs;
3045 /* where the op is one of the two forms:
3046 * $x op= $y
3047 * $lex = $x op $y (where the assign is optimised away)
3048 * then assign the returned value to targ and return that;
3049 * otherwise return the value directly
3050 */
3051 if ( mutator
3052 || ( (PL_opargs[PL_op->op_type] & OA_TARGLEX)
3053 && (PL_op->op_private & OPpTARGET_MY)))
3054 {
3055 dTARG;
3056 TARG = mutator ? *SP : PAD_SV(PL_op->op_targ);
3057 sv_setsv(TARG, tmpsv);
3058 SETTARG;
3059 }
3060 else
3061 SETs(tmpsv);
3062
3063 PUTBACK;
3064 return TRUE;
3065 }
3066 }
3067
3068 if(left==right && SvGMAGICAL(left)) {
3069 SV * const left = sv_newmortal();
3070 *(sp-1) = left;
3071 /* Print the uninitialized warning now, so it includes the vari-
3072 able name. */
3073 if (!SvOK(right)) {
3074 if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right);
3075 sv_setsv_flags(left, &PL_sv_no, 0);
3076 }
3077 else sv_setsv_flags(left, right, 0);
3078 SvGETMAGIC(right);
3079 }
3080 if (flags & AMGf_numeric) {
3081 if (SvROK(TOPm1s))
3082 *(sp-1) = sv_2num(TOPm1s);
3083 if (SvROK(right))
3084 *sp = sv_2num(right);
3085 }
3086 return FALSE;
3087}
3088
3089SV *
3090Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
3091 SV *tmpsv = NULL;
3092 HV *stash;
3093
3094 PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
3095
3096 if (!SvAMAGIC(ref))
3097 return ref;
3098 /* return quickly if none of the deref ops are overloaded */
3099 stash = SvSTASH(SvRV(ref));
3100 assert(SvOOK(stash));
3101 if (HvAUX(stash)->xhv_aux_flags & HvAUXf_NO_DEREF)
3102 return ref;
3103
3104 while ((tmpsv = amagic_call(ref, &PL_sv_undef, method,
3105 AMGf_noright | AMGf_unary))) {
3106 if (!SvROK(tmpsv))
3107 Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
3108 if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
3109 /* Bail out if it returns us the same reference. */
3110 return tmpsv;
3111 }
3112 ref = tmpsv;
3113 if (!SvAMAGIC(ref))
3114 break;
3115 }
3116 return tmpsv ? tmpsv : ref;
3117}
3118
3119bool
3120Perl_amagic_is_enabled(pTHX_ int method)
3121{
3122 SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
3123
3124 assert(PL_curcop->cop_hints & HINT_NO_AMAGIC);
3125
3126 if ( !lex_mask || !SvOK(lex_mask) )
3127 /* overloading lexically disabled */
3128 return FALSE;
3129 else if ( lex_mask && SvPOK(lex_mask) ) {
3130 /* we have an entry in the hints hash, check if method has been
3131 * masked by overloading.pm */
3132 STRLEN len;
3133 const int offset = method / 8;
3134 const int bit = method % 8;
3135 char *pv = SvPV(lex_mask, len);
3136
3137 /* Bit set, so this overloading operator is disabled */
3138 if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
3139 return FALSE;
3140 }
3141 return TRUE;
3142}
3143
3144SV*
3145Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
3146{
3147 dVAR;
3148 MAGIC *mg;
3149 CV *cv=NULL;
3150 CV **cvp=NULL, **ocvp=NULL;
3151 AMT *amtp=NULL, *oamtp=NULL;
3152 int off = 0, off1, lr = 0, notfound = 0;
3153 int postpr = 0, force_cpy = 0;
3154 int assign = AMGf_assign & flags;
3155 const int assignshift = assign ? 1 : 0;
3156 int use_default_op = 0;
3157 int force_scalar = 0;
3158#ifdef DEBUGGING
3159 int fl=0;
3160#endif
3161 HV* stash=NULL;
3162
3163 PERL_ARGS_ASSERT_AMAGIC_CALL;
3164
3165 if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
3166 if (!amagic_is_enabled(method)) return NULL;
3167 }
3168
3169 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
3170 && (stash = SvSTASH(SvRV(left))) && Gv_AMG(stash)
3171 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
3172 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
3173 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
3174 : NULL))
3175 && ((cv = cvp[off=method+assignshift])
3176 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
3177 * usual method */
3178 (
3179#ifdef DEBUGGING
3180 fl = 1,
3181#endif
3182 cv = cvp[off=method])))) {
3183 lr = -1; /* Call method for left argument */
3184 } else {
3185 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
3186 int logic;
3187
3188 /* look for substituted methods */
3189 /* In all the covered cases we should be called with assign==0. */
3190 switch (method) {
3191 case inc_amg:
3192 force_cpy = 1;
3193 if ((cv = cvp[off=add_ass_amg])
3194 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
3195 right = &PL_sv_yes; lr = -1; assign = 1;
3196 }
3197 break;
3198 case dec_amg:
3199 force_cpy = 1;
3200 if ((cv = cvp[off = subtr_ass_amg])
3201 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
3202 right = &PL_sv_yes; lr = -1; assign = 1;
3203 }
3204 break;
3205 case bool__amg:
3206 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
3207 break;
3208 case numer_amg:
3209 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
3210 break;
3211 case string_amg:
3212 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
3213 break;
3214 case not_amg:
3215 (void)((cv = cvp[off=bool__amg])
3216 || (cv = cvp[off=numer_amg])
3217 || (cv = cvp[off=string_amg]));
3218 if (cv)
3219 postpr = 1;
3220 break;
3221 case copy_amg:
3222 {
3223 /*
3224 * SV* ref causes confusion with the interpreter variable of
3225 * the same name
3226 */
3227 SV* const tmpRef=SvRV(left);
3228 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
3229 /*
3230 * Just to be extra cautious. Maybe in some
3231 * additional cases sv_setsv is safe, too.
3232 */
3233 SV* const newref = newSVsv(tmpRef);
3234 SvOBJECT_on(newref);
3235 /* No need to do SvAMAGIC_on here, as SvAMAGIC macros
3236 delegate to the stash. */
3237 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
3238 return newref;
3239 }
3240 }
3241 break;
3242 case abs_amg:
3243 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
3244 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
3245 SV* const nullsv=&PL_sv_zero;
3246 if (off1==lt_amg) {
3247 SV* const lessp = amagic_call(left,nullsv,
3248 lt_amg,AMGf_noright);
3249 logic = SvTRUE_NN(lessp);
3250 } else {
3251 SV* const lessp = amagic_call(left,nullsv,
3252 ncmp_amg,AMGf_noright);
3253 logic = (SvNV(lessp) < 0);
3254 }
3255 if (logic) {
3256 if (off==subtr_amg) {
3257 right = left;
3258 left = nullsv;
3259 lr = 1;
3260 }
3261 } else {
3262 return left;
3263 }
3264 }
3265 break;
3266 case neg_amg:
3267 if ((cv = cvp[off=subtr_amg])) {
3268 right = left;
3269 left = &PL_sv_zero;
3270 lr = 1;
3271 }
3272 break;
3273 case int_amg:
3274 case iter_amg: /* XXXX Eventually should do to_gv. */
3275 case ftest_amg: /* XXXX Eventually should do to_gv. */
3276 case regexp_amg:
3277 /* FAIL safe */
3278 return NULL; /* Delegate operation to standard mechanisms. */
3279
3280 case to_sv_amg:
3281 case to_av_amg:
3282 case to_hv_amg:
3283 case to_gv_amg:
3284 case to_cv_amg:
3285 /* FAIL safe */
3286 return left; /* Delegate operation to standard mechanisms. */
3287
3288 default:
3289 goto not_found;
3290 }
3291 if (!cv) goto not_found;
3292 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
3293 && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash)
3294 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
3295 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
3296 ? (amtp = (AMT*)mg->mg_ptr)->table
3297 : NULL))
3298 && (cv = cvp[off=method])) { /* Method for right
3299 * argument found */
3300 lr=1;
3301 } else if (((cvp && amtp->fallback > AMGfallNEVER)
3302 || (ocvp && oamtp->fallback > AMGfallNEVER))
3303 && !(flags & AMGf_unary)) {
3304 /* We look for substitution for
3305 * comparison operations and
3306 * concatenation */
3307 if (method==concat_amg || method==concat_ass_amg
3308 || method==repeat_amg || method==repeat_ass_amg) {
3309 return NULL; /* Delegate operation to string conversion */
3310 }
3311 off = -1;
3312 switch (method) {
3313 case lt_amg:
3314 case le_amg:
3315 case gt_amg:
3316 case ge_amg:
3317 case eq_amg:
3318 case ne_amg:
3319 off = ncmp_amg;
3320 break;
3321 case slt_amg:
3322 case sle_amg:
3323 case sgt_amg:
3324 case sge_amg:
3325 case seq_amg:
3326 case sne_amg:
3327 off = scmp_amg;
3328 break;
3329 }
3330 if (off != -1) {
3331 if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
3332 cv = ocvp[off];
3333 lr = -1;
3334 }
3335 if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
3336 cv = cvp[off];
3337 lr = 1;
3338 }
3339 }
3340 if (cv)
3341 postpr = 1;
3342 else
3343 goto not_found;
3344 } else {
3345 not_found: /* No method found, either report or croak */
3346 switch (method) {
3347 case to_sv_amg:
3348 case to_av_amg:
3349 case to_hv_amg:
3350 case to_gv_amg:
3351 case to_cv_amg:
3352 /* FAIL safe */
3353 return left; /* Delegate operation to standard mechanisms. */
3354 }
3355 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
3356 notfound = 1; lr = -1;
3357 } else if (cvp && (cv=cvp[nomethod_amg])) {
3358 notfound = 1; lr = 1;
3359 } else if ((use_default_op =
3360 (!ocvp || oamtp->fallback >= AMGfallYES)
3361 && (!cvp || amtp->fallback >= AMGfallYES))
3362 && !DEBUG_o_TEST) {
3363 /* Skip generating the "no method found" message. */
3364 return NULL;
3365 } else {
3366 SV *msg;
3367 if (off==-1) off=method;
3368 msg = sv_2mortal(Perl_newSVpvf(aTHX_
3369 "Operation \"%s\": no method found,%sargument %s%" SVf "%s%" SVf,
3370 AMG_id2name(method + assignshift),
3371 (flags & AMGf_unary ? " " : "\n\tleft "),
3372 SvAMAGIC(left)?
3373 "in overloaded package ":
3374 "has no overloaded magic",
3375 SvAMAGIC(left)?
3376 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))):
3377 SVfARG(&PL_sv_no),
3378 SvAMAGIC(right)?
3379 ",\n\tright argument in overloaded package ":
3380 (flags & AMGf_unary
3381 ? ""
3382 : ",\n\tright argument has no overloaded magic"),
3383 SvAMAGIC(right)?
3384 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))):
3385 SVfARG(&PL_sv_no)));
3386 if (use_default_op) {
3387 DEBUG_o( Perl_deb(aTHX_ "%" SVf, SVfARG(msg)) );
3388 } else {
3389 Perl_croak(aTHX_ "%" SVf, SVfARG(msg));
3390 }
3391 return NULL;
3392 }
3393 force_cpy = force_cpy || assign;
3394 }
3395 }
3396
3397 switch (method) {
3398 /* in these cases, we're calling '+' or '-' as a fallback for a ++ or --
3399 * operation. we need this to return a value, so that it can be assigned
3400 * later on, in the postpr block (case inc_amg/dec_amg), even if the
3401 * increment or decrement was itself called in void context */
3402 case inc_amg:
3403 if (off == add_amg)
3404 force_scalar = 1;
3405 break;
3406 case dec_amg:
3407 if (off == subtr_amg)
3408 force_scalar = 1;
3409 break;
3410 /* in these cases, we're calling an assignment variant of an operator
3411 * (+= rather than +, for instance). regardless of whether it's a
3412 * fallback or not, it always has to return a value, which will be
3413 * assigned to the proper variable later */
3414 case add_amg:
3415 case subtr_amg:
3416 case mult_amg:
3417 case div_amg:
3418 case modulo_amg:
3419 case pow_amg:
3420 case lshift_amg:
3421 case rshift_amg:
3422 case repeat_amg:
3423 case concat_amg:
3424 case band_amg:
3425 case bor_amg:
3426 case bxor_amg:
3427 case sband_amg:
3428 case sbor_amg:
3429 case sbxor_amg:
3430 if (assign)
3431 force_scalar = 1;
3432 break;
3433 /* the copy constructor always needs to return a value */
3434 case copy_amg:
3435 force_scalar = 1;
3436 break;
3437 /* because of the way these are implemented (they don't perform the
3438 * dereferencing themselves, they return a reference that perl then
3439 * dereferences later), they always have to be in scalar context */
3440 case to_sv_amg:
3441 case to_av_amg:
3442 case to_hv_amg:
3443 case to_gv_amg:
3444 case to_cv_amg:
3445 force_scalar = 1;
3446 break;
3447 /* these don't have an op of their own; they're triggered by their parent
3448 * op, so the context there isn't meaningful ('$a and foo()' in void
3449 * context still needs to pass scalar context on to $a's bool overload) */
3450 case bool__amg:
3451 case numer_amg:
3452 case string_amg:
3453 force_scalar = 1;
3454 break;
3455 }
3456
3457#ifdef DEBUGGING
3458 if (!notfound) {
3459 DEBUG_o(Perl_deb(aTHX_
3460 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %" SVf "%s\n",
3461 AMG_id2name(off),
3462 method+assignshift==off? "" :
3463 " (initially \"",
3464 method+assignshift==off? "" :
3465 AMG_id2name(method+assignshift),
3466 method+assignshift==off? "" : "\")",
3467 flags & AMGf_unary? "" :
3468 lr==1 ? " for right argument": " for left argument",
3469 flags & AMGf_unary? " for argument" : "",
3470 stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)),
3471 fl? ",\n\tassignment variant used": "") );
3472 }
3473#endif
3474 /* Since we use shallow copy during assignment, we need
3475 * to dublicate the contents, probably calling user-supplied
3476 * version of copy operator
3477 */
3478 /* We need to copy in following cases:
3479 * a) Assignment form was called.
3480 * assignshift==1, assign==T, method + 1 == off
3481 * b) Increment or decrement, called directly.
3482 * assignshift==0, assign==0, method + 0 == off
3483 * c) Increment or decrement, translated to assignment add/subtr.
3484 * assignshift==0, assign==T,
3485 * force_cpy == T
3486 * d) Increment or decrement, translated to nomethod.
3487 * assignshift==0, assign==0,
3488 * force_cpy == T
3489 * e) Assignment form translated to nomethod.
3490 * assignshift==1, assign==T, method + 1 != off
3491 * force_cpy == T
3492 */
3493 /* off is method, method+assignshift, or a result of opcode substitution.
3494 * In the latter case assignshift==0, so only notfound case is important.
3495 */
3496 if ( (lr == -1) && ( ( (method + assignshift == off)
3497 && (assign || (method == inc_amg) || (method == dec_amg)))
3498 || force_cpy) )
3499 {
3500 /* newSVsv does not behave as advertised, so we copy missing
3501 * information by hand */
3502 SV *tmpRef = SvRV(left);
3503 SV *rv_copy;
3504 if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
3505 SvRV_set(left, rv_copy);
3506 SvSETMAGIC(left);
3507 SvREFCNT_dec_NN(tmpRef);
3508 }
3509 }
3510
3511 {
3512 dSP;
3513 BINOP myop;
3514 SV* res;
3515 const bool oldcatch = CATCH_GET;
3516 I32 oldmark, nret;
3517 /* for multiconcat, we may call overload several times,
3518 * with the context of individual concats being scalar,
3519 * regardless of the overall context of the multiconcat op
3520 */
3521 U8 gimme = (force_scalar || PL_op->op_type == OP_MULTICONCAT)
3522 ? G_SCALAR : GIMME_V;
3523
3524 CATCH_SET(TRUE);
3525 Zero(&myop, 1, BINOP);
3526 myop.op_last = (OP *) &myop;
3527 myop.op_next = NULL;
3528 myop.op_flags = OPf_STACKED;
3529
3530 switch (gimme) {
3531 case G_VOID:
3532 myop.op_flags |= OPf_WANT_VOID;
3533 break;
3534 case G_ARRAY:
3535 if (flags & AMGf_want_list) {
3536 myop.op_flags |= OPf_WANT_LIST;
3537 break;
3538 }
3539 /* FALLTHROUGH */
3540 default:
3541 myop.op_flags |= OPf_WANT_SCALAR;
3542 break;
3543 }
3544
3545 PUSHSTACKi(PERLSI_OVERLOAD);
3546 ENTER;
3547 SAVEOP();
3548 PL_op = (OP *) &myop;
3549 if (PERLDB_SUB && PL_curstash != PL_debstash)
3550 PL_op->op_private |= OPpENTERSUB_DB;
3551 Perl_pp_pushmark(aTHX);
3552
3553 EXTEND(SP, notfound + 5);
3554 PUSHs(lr>0? right: left);
3555 PUSHs(lr>0? left: right);
3556 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
3557 if (notfound) {
3558 PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
3559 AMG_id2namelen(method + assignshift), SVs_TEMP));
3560 }
3561 else if (flags & AMGf_numarg)
3562 PUSHs(&PL_sv_undef);
3563 if (flags & AMGf_numarg)
3564 PUSHs(&PL_sv_yes);
3565 PUSHs(MUTABLE_SV(cv));
3566 PUTBACK;
3567 oldmark = TOPMARK;
3568
3569 if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
3570 CALLRUNOPS(aTHX);
3571 LEAVE;
3572 SPAGAIN;
3573 nret = SP - (PL_stack_base + oldmark);
3574
3575 switch (gimme) {
3576 case G_VOID:
3577 /* returning NULL has another meaning, and we check the context
3578 * at the call site too, so this can be differentiated from the
3579 * scalar case */
3580 res = &PL_sv_undef;
3581 SP = PL_stack_base + oldmark;
3582 break;
3583 case G_ARRAY:
3584 if (flags & AMGf_want_list) {
3585 res = sv_2mortal((SV *)newAV());
3586 av_extend((AV *)res, nret);
3587 while (nret--)
3588 av_store((AV *)res, nret, POPs);
3589 break;
3590 }
3591 /* FALLTHROUGH */
3592 default:
3593 res = POPs;
3594 break;
3595 }
3596
3597 PUTBACK;
3598 POPSTACK;
3599 CATCH_SET(oldcatch);
3600
3601 if (postpr) {
3602 int ans;
3603 switch (method) {
3604 case le_amg:
3605 case sle_amg:
3606 ans=SvIV(res)<=0; break;
3607 case lt_amg:
3608 case slt_amg:
3609 ans=SvIV(res)<0; break;
3610 case ge_amg:
3611 case sge_amg:
3612 ans=SvIV(res)>=0; break;
3613 case gt_amg:
3614 case sgt_amg:
3615 ans=SvIV(res)>0; break;
3616 case eq_amg:
3617 case seq_amg:
3618 ans=SvIV(res)==0; break;
3619 case ne_amg:
3620 case sne_amg:
3621 ans=SvIV(res)!=0; break;
3622 case inc_amg:
3623 case dec_amg:
3624 SvSetSV(left,res); return left;
3625 case not_amg:
3626 ans=!SvTRUE_NN(res); break;
3627 default:
3628 ans=0; break;
3629 }
3630 return boolSV(ans);
3631 } else if (method==copy_amg) {
3632 if (!SvROK(res)) {
3633 Perl_croak(aTHX_ "Copy method did not return a reference");
3634 }
3635 return SvREFCNT_inc(SvRV(res));
3636 } else {
3637 return res;
3638 }
3639 }
3640}
3641
3642void
3643Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
3644{
3645 dVAR;
3646 U32 hash;
3647
3648 PERL_ARGS_ASSERT_GV_NAME_SET;
3649
3650 if (len > I32_MAX)
3651 Perl_croak(aTHX_ "panic: gv name too long (%" UVuf ")", (UV) len);
3652
3653 if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
3654 unshare_hek(GvNAME_HEK(gv));
3655 }
3656
3657 PERL_HASH(hash, name, len);
3658 GvNAME_HEK(gv) = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash);
3659}
3660
3661/*
3662=for apidoc gv_try_downgrade
3663
3664If the typeglob C<gv> can be expressed more succinctly, by having
3665something other than a real GV in its place in the stash, replace it
3666with the optimised form. Basic requirements for this are that C<gv>
3667is a real typeglob, is sufficiently ordinary, and is only referenced
3668from its package. This function is meant to be used when a GV has been
3669looked up in part to see what was there, causing upgrading, but based
3670on what was found it turns out that the real GV isn't required after all.
3671
3672If C<gv> is a completely empty typeglob, it is deleted from the stash.
3673
3674If C<gv> is a typeglob containing only a sufficiently-ordinary constant
3675sub, the typeglob is replaced with a scalar-reference placeholder that
3676more compactly represents the same thing.
3677
3678=cut
3679*/
3680
3681void
3682Perl_gv_try_downgrade(pTHX_ GV *gv)
3683{
3684 HV *stash;
3685 CV *cv;
3686 HEK *namehek;
3687 SV **gvp;
3688 PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
3689
3690 /* XXX Why and where does this leave dangling pointers during global
3691 destruction? */
3692 if (PL_phase == PERL_PHASE_DESTRUCT) return;
3693
3694 if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
3695 !SvOBJECT(gv) && !SvREADONLY(gv) &&
3696 isGV_with_GP(gv) && GvGP(gv) &&
3697 !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
3698 !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
3699 GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
3700 return;
3701 if (gv == PL_statgv || gv == PL_last_in_gv || gv == PL_stderrgv)
3702 return;
3703 if (SvMAGICAL(gv)) {
3704 MAGIC *mg;
3705 /* only backref magic is allowed */
3706 if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
3707 return;
3708 for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
3709 if (mg->mg_type != PERL_MAGIC_backref)
3710 return;
3711 }
3712 }
3713 cv = GvCV(gv);
3714 if (!cv) {
3715 HEK *gvnhek = GvNAME_HEK(gv);
3716 (void)hv_deletehek(stash, gvnhek, G_DISCARD);
3717 } else if (GvMULTI(gv) && cv && SvREFCNT(cv) == 1 &&
3718 !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
3719 CvSTASH(cv) == stash && !CvNAMED(cv) && CvGV(cv) == gv &&
3720 CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
3721 !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
3722 (namehek = GvNAME_HEK(gv)) &&
3723 (gvp = hv_fetchhek(stash, namehek, 0)) &&
3724 *gvp == (SV*)gv) {
3725 SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
3726 const bool imported = !!GvIMPORTED_CV(gv);
3727 SvREFCNT(gv) = 0;
3728 sv_clear((SV*)gv);
3729 SvREFCNT(gv) = 1;
3730 SvFLAGS(gv) = SVt_IV|SVf_ROK|SVprv_PCS_IMPORTED * imported;
3731
3732 /* See also: 'SET_SVANY_FOR_BODYLESS_IV' in sv.c */
3733 SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
3734 STRUCT_OFFSET(XPVIV, xiv_iv));
3735 SvRV_set(gv, value);
3736 }
3737}
3738
3739GV *
3740Perl_gv_override(pTHX_ const char * const name, const STRLEN len)
3741{
3742 GV *gv = gv_fetchpvn(name, len, GV_NOTQUAL, SVt_PVCV);
3743 GV * const *gvp;
3744 PERL_ARGS_ASSERT_GV_OVERRIDE;
3745 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) return gv;
3746 gvp = (GV**)hv_fetch(PL_globalstash, name, len, FALSE);
3747 gv = gvp ? *gvp : NULL;
3748 if (gv && !isGV(gv)) {
3749 if (!SvPCS_IMPORTED(gv)) return NULL;
3750 gv_init(gv, PL_globalstash, name, len, 0);
3751 return gv;
3752 }
3753 return gv && GvCVu(gv) && GvIMPORTED_CV(gv) ? gv : NULL;
3754}
3755
3756#include "XSUB.h"
3757
3758static void
3759core_xsub(pTHX_ CV* cv)
3760{
3761 Perl_croak(aTHX_
3762 "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
3763 );
3764}
3765
3766/*
3767 * ex: set ts=8 sts=4 sw=4 et:
3768 */