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