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