This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Missing dependency in XS::APItest’s Makefile
[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(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(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 *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(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(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(name)) {
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) {
1592 SV * const err = Perl_mess(aTHX_
1593 "Global symbol \"%s%"SVf"\" requires explicit package name",
1594 (sv_type == SVt_PV ? "$"
1595 : sv_type == SVt_PVAV ? "@"
1596 : sv_type == SVt_PVHV ? "%"
1597 : ""), SVfARG(newSVpvn_flags(name, len, SVs_TEMP | is_utf8)));
1598 GV *gv;
1599 if (USE_UTF8_IN_NAMES)
1600 SvUTF8_on(err);
1601 qerror(err);
1602 gv = gv_fetchpvs("<none>::", GV_ADDMULTI, SVt_PVHV);
1603 if(!gv) {
1604 /* symbol table under destruction */
1605 return NULL;
1606 }
1607 stash = GvHV(gv);
1608 }
1609 else
1610 return NULL;
1611 }
1612
1613 if (!SvREFCNT(stash)) /* symbol table under destruction */
1614 return NULL;
1615
1616 gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -len : len,add);
1617 if (!gvp || *gvp == (const GV *)&PL_sv_undef) {
1618 if (addmg) gv = (GV *)newSV(0);
1619 else return NULL;
1620 }
1621 else gv = *gvp, addmg = 0;
1622 /* From this point on, addmg means gv has not been inserted in the
1623 symtab yet. */
1624
1625 if (SvTYPE(gv) == SVt_PVGV) {
1626 if (add) {
1627 GvMULTI_on(gv);
1628 gv_init_svtype(gv, sv_type);
1629 if (len == 1 && stash == PL_defstash) {
1630 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
1631 if (*name == '!')
1632 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1633 else if (*name == '-' || *name == '+')
1634 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1635 }
1636 if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
1637 switch (*name) {
1638 case '[':
1639 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1640 break;
1641 case '`':
1642 PL_sawampersand |= SAWAMPERSAND_LEFT;
1643 (void)GvSVn(gv);
1644 break;
1645 case '&':
1646 PL_sawampersand |= SAWAMPERSAND_MIDDLE;
1647 (void)GvSVn(gv);
1648 break;
1649 case '\'':
1650 PL_sawampersand |= SAWAMPERSAND_RIGHT;
1651 (void)GvSVn(gv);
1652 break;
1653 }
1654 }
1655 }
1656 else if (len == 3 && sv_type == SVt_PVAV
1657 && strnEQ(name, "ISA", 3)
1658 && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv))))
1659 gv_magicalize_isa(gv);
1660 }
1661 return gv;
1662 } else if (no_init) {
1663 assert(!addmg);
1664 return gv;
1665 } else if (no_expand && SvROK(gv)) {
1666 assert(!addmg);
1667 return gv;
1668 }
1669
1670 /* Adding a new symbol.
1671 Unless of course there was already something non-GV here, in which case
1672 we want to behave as if there was always a GV here, containing some sort
1673 of subroutine.
1674 Otherwise we run the risk of creating things like GvIO, which can cause
1675 subtle bugs. eg the one that tripped up SQL::Translator */
1676
1677 faking_it = SvOK(gv);
1678
1679 if (add & GV_ADDWARN)
1680 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "Had to create %"SVf" unexpectedly",
1681 SVfARG(newSVpvn_flags(nambeg, name_end-nambeg, SVs_TEMP | is_utf8 )));
1682 gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8);
1683
1684 if ( isIDFIRST_lazy_if(name, is_utf8)
1685 && ! (isLEXWARN_on ? ckWARN(WARN_ONCE) : (PL_dowarn & G_WARN_ON ) ) )
1686 GvMULTI_on(gv) ;
1687
1688 /* set up magic where warranted */
1689 if (stash != PL_defstash) { /* not the main stash */
1690 /* We only have to check for three names here: EXPORT, ISA
1691 and VERSION. All the others apply only to the main stash or to
1692 CORE (which is checked right after this). */
1693 if (len > 2) {
1694 const char * const name2 = name + 1;
1695 switch (*name) {
1696 case 'E':
1697 if (strnEQ(name2, "XPORT", 5))
1698 GvMULTI_on(gv);
1699 break;
1700 case 'I':
1701 if (strEQ(name2, "SA"))
1702 gv_magicalize_isa(gv);
1703 break;
1704 case 'V':
1705 if (strEQ(name2, "ERSION"))
1706 GvMULTI_on(gv);
1707 break;
1708 default:
1709 goto try_core;
1710 }
1711 goto add_magical_gv;
1712 }
1713 try_core:
1714 if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) {
1715 /* Avoid null warning: */
1716 const char * const stashname = HvNAME(stash); assert(stashname);
1717 if (strnEQ(stashname, "CORE", 4))
1718 S_maybe_add_coresub(aTHX_ 0, gv, name, len);
1719 }
1720 }
1721 else if (len > 1) {
1722#ifndef EBCDIC
1723 if (*name > 'V' ) {
1724 NOOP;
1725 /* Nothing else to do.
1726 The compiler will probably turn the switch statement into a
1727 branch table. Make sure we avoid even that small overhead for
1728 the common case of lower case variable names. */
1729 } else
1730#endif
1731 {
1732 const char * const name2 = name + 1;
1733 switch (*name) {
1734 case 'A':
1735 if (strEQ(name2, "RGV")) {
1736 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1737 }
1738 else if (strEQ(name2, "RGVOUT")) {
1739 GvMULTI_on(gv);
1740 }
1741 break;
1742 case 'E':
1743 if (strnEQ(name2, "XPORT", 5))
1744 GvMULTI_on(gv);
1745 break;
1746 case 'I':
1747 if (strEQ(name2, "SA")) {
1748 gv_magicalize_isa(gv);
1749 }
1750 break;
1751 case 'S':
1752 if (strEQ(name2, "IG")) {
1753 HV *hv;
1754 I32 i;
1755 if (!PL_psig_name) {
1756 Newxz(PL_psig_name, 2 * SIG_SIZE, SV*);
1757 Newxz(PL_psig_pend, SIG_SIZE, int);
1758 PL_psig_ptr = PL_psig_name + SIG_SIZE;
1759 } else {
1760 /* I think that the only way to get here is to re-use an
1761 embedded perl interpreter, where the previous
1762 use didn't clean up fully because
1763 PL_perl_destruct_level was 0. I'm not sure that we
1764 "support" that, in that I suspect in that scenario
1765 there are sufficient other garbage values left in the
1766 interpreter structure that something else will crash
1767 before we get here. I suspect that this is one of
1768 those "doctor, it hurts when I do this" bugs. */
1769 Zero(PL_psig_name, 2 * SIG_SIZE, SV*);
1770 Zero(PL_psig_pend, SIG_SIZE, int);
1771 }
1772 GvMULTI_on(gv);
1773 hv = GvHVn(gv);
1774 hv_magic(hv, NULL, PERL_MAGIC_sig);
1775 for (i = 1; i < SIG_SIZE; i++) {
1776 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1777 if (init)
1778 sv_setsv(*init, &PL_sv_undef);
1779 }
1780 }
1781 break;
1782 case 'V':
1783 if (strEQ(name2, "ERSION"))
1784 GvMULTI_on(gv);
1785 break;
1786 case '\003': /* $^CHILD_ERROR_NATIVE */
1787 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1788 goto magicalize;
1789 break;
1790 case '\005': /* $^ENCODING */
1791 if (strEQ(name2, "NCODING"))
1792 goto magicalize;
1793 break;
1794 case '\007': /* $^GLOBAL_PHASE */
1795 if (strEQ(name2, "LOBAL_PHASE"))
1796 goto ro_magicalize;
1797 break;
1798 case '\014': /* $^LAST_FH */
1799 if (strEQ(name2, "AST_FH"))
1800 goto ro_magicalize;
1801 break;
1802 case '\015': /* $^MATCH */
1803 if (strEQ(name2, "ATCH"))
1804 goto magicalize;
1805 case '\017': /* $^OPEN */
1806 if (strEQ(name2, "PEN"))
1807 goto magicalize;
1808 break;
1809 case '\020': /* $^PREMATCH $^POSTMATCH */
1810 if (strEQ(name2, "REMATCH") || strEQ(name2, "OSTMATCH"))
1811 goto magicalize;
1812 break;
1813 case '\024': /* ${^TAINT} */
1814 if (strEQ(name2, "AINT"))
1815 goto ro_magicalize;
1816 break;
1817 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
1818 if (strEQ(name2, "NICODE"))
1819 goto ro_magicalize;
1820 if (strEQ(name2, "TF8LOCALE"))
1821 goto ro_magicalize;
1822 if (strEQ(name2, "TF8CACHE"))
1823 goto magicalize;
1824 break;
1825 case '\027': /* $^WARNING_BITS */
1826 if (strEQ(name2, "ARNING_BITS"))
1827 goto magicalize;
1828 break;
1829 case '1':
1830 case '2':
1831 case '3':
1832 case '4':
1833 case '5':
1834 case '6':
1835 case '7':
1836 case '8':
1837 case '9':
1838 {
1839 /* Ensures that we have an all-digit variable, ${"1foo"} fails
1840 this test */
1841 /* This snippet is taken from is_gv_magical */
1842 const char *end = name + len;
1843 while (--end > name) {
1844 if (!isDIGIT(*end)) goto add_magical_gv;
1845 }
1846 goto magicalize;
1847 }
1848 }
1849 }
1850 } else {
1851 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1852 be case '\0' in this switch statement (ie a default case) */
1853 switch (*name) {
1854 case '&': /* $& */
1855 case '`': /* $` */
1856 case '\'': /* $' */
1857 if (!(
1858 sv_type == SVt_PVAV ||
1859 sv_type == SVt_PVHV ||
1860 sv_type == SVt_PVCV ||
1861 sv_type == SVt_PVFM ||
1862 sv_type == SVt_PVIO
1863 )) { PL_sawampersand |=
1864 (*name == '`')
1865 ? SAWAMPERSAND_LEFT
1866 : (*name == '&')
1867 ? SAWAMPERSAND_MIDDLE
1868 : SAWAMPERSAND_RIGHT;
1869 }
1870 goto magicalize;
1871
1872 case ':': /* $: */
1873 sv_setpv(GvSVn(gv),PL_chopset);
1874 goto magicalize;
1875
1876 case '?': /* $? */
1877#ifdef COMPLEX_STATUS
1878 SvUPGRADE(GvSVn(gv), SVt_PVLV);
1879#endif
1880 goto magicalize;
1881
1882 case '!': /* $! */
1883 GvMULTI_on(gv);
1884 /* If %! has been used, automatically load Errno.pm. */
1885
1886 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1887
1888 /* magicalization must be done before require_tie_mod is called */
1889 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1890 {
1891 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1892 addmg = 0;
1893 require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1);
1894 }
1895
1896 break;
1897 case '-': /* $- */
1898 case '+': /* $+ */
1899 GvMULTI_on(gv); /* no used once warnings here */
1900 {
1901 AV* const av = GvAVn(gv);
1902 SV* const avc = (*name == '+') ? MUTABLE_SV(av) : NULL;
1903
1904 sv_magic(MUTABLE_SV(av), avc, PERL_MAGIC_regdata, NULL, 0);
1905 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1906 if (avc)
1907 SvREADONLY_on(GvSVn(gv));
1908 SvREADONLY_on(av);
1909
1910 if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
1911 {
1912 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1913 addmg = 0;
1914 require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), "TIEHASH", 0);
1915 }
1916
1917 break;
1918 }
1919 case '*': /* $* */
1920 case '#': /* $# */
1921 if (sv_type == SVt_PV)
1922 /* diag_listed_as: $* is no longer supported */
1923 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1924 "$%c is no longer supported", *name);
1925 break;
1926 case '\010': /* $^H */
1927 {
1928 HV *const hv = GvHVn(gv);
1929 hv_magic(hv, NULL, PERL_MAGIC_hints);
1930 }
1931 goto magicalize;
1932 case '[': /* $[ */
1933 if ((sv_type == SVt_PV || sv_type == SVt_PVGV)
1934 && FEATURE_ARYBASE_IS_ENABLED) {
1935 if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0);
1936 require_tie_mod(gv,name,newSVpvs("arybase"),"FETCH",0);
1937 addmg = 0;
1938 }
1939 else goto magicalize;
1940 break;
1941 case '\023': /* $^S */
1942 ro_magicalize:
1943 SvREADONLY_on(GvSVn(gv));
1944 /* FALL THROUGH */
1945 case '0': /* $0 */
1946 case '1': /* $1 */
1947 case '2': /* $2 */
1948 case '3': /* $3 */
1949 case '4': /* $4 */
1950 case '5': /* $5 */
1951 case '6': /* $6 */
1952 case '7': /* $7 */
1953 case '8': /* $8 */
1954 case '9': /* $9 */
1955 case '^': /* $^ */
1956 case '~': /* $~ */
1957 case '=': /* $= */
1958 case '%': /* $% */
1959 case '.': /* $. */
1960 case '(': /* $( */
1961 case ')': /* $) */
1962 case '<': /* $< */
1963 case '>': /* $> */
1964 case '\\': /* $\ */
1965 case '/': /* $/ */
1966 case '|': /* $| */
1967 case '$': /* $$ */
1968 case '\001': /* $^A */
1969 case '\003': /* $^C */
1970 case '\004': /* $^D */
1971 case '\005': /* $^E */
1972 case '\006': /* $^F */
1973 case '\011': /* $^I, NOT \t in EBCDIC */
1974 case '\016': /* $^N */
1975 case '\017': /* $^O */
1976 case '\020': /* $^P */
1977 case '\024': /* $^T */
1978 case '\027': /* $^W */
1979 magicalize:
1980 sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len);
1981 break;
1982
1983 case '\014': /* $^L */
1984 sv_setpvs(GvSVn(gv),"\f");
1985 break;
1986 case ';': /* $; */
1987 sv_setpvs(GvSVn(gv),"\034");
1988 break;
1989 case ']': /* $] */
1990 {
1991 SV * const sv = GvSV(gv);
1992 if (!sv_derived_from(PL_patchlevel, "version"))
1993 upg_version(PL_patchlevel, TRUE);
1994 GvSV(gv) = vnumify(PL_patchlevel);
1995 SvREADONLY_on(GvSV(gv));
1996 SvREFCNT_dec(sv);
1997 }
1998 break;
1999 case '\026': /* $^V */
2000 {
2001 SV * const sv = GvSV(gv);
2002 GvSV(gv) = new_version(PL_patchlevel);
2003 SvREADONLY_on(GvSV(gv));
2004 SvREFCNT_dec(sv);
2005 }
2006 break;
2007 }
2008 }
2009 add_magical_gv:
2010 if (addmg) {
2011 if (GvAV(gv) || GvHV(gv) || GvIO(gv) || GvCV(gv) || (
2012 GvSV(gv) && (SvOK(GvSV(gv)) || SvMAGICAL(GvSV(gv)))
2013 ))
2014 (void)hv_store(stash,name,len,(SV *)gv,0);
2015 else SvREFCNT_dec(gv), gv = NULL;
2016 }
2017 if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type);
2018 return gv;
2019}
2020
2021void
2022Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2023{
2024 const char *name;
2025 const HV * const hv = GvSTASH(gv);
2026
2027 PERL_ARGS_ASSERT_GV_FULLNAME4;
2028
2029 sv_setpv(sv, prefix ? prefix : "");
2030
2031 if (hv && (name = HvNAME(hv))) {
2032 const STRLEN len = HvNAMELEN(hv);
2033 if (keepmain || strnNE(name, "main", len)) {
2034 sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES);
2035 sv_catpvs(sv,"::");
2036 }
2037 }
2038 else sv_catpvs(sv,"__ANON__::");
2039 sv_catsv(sv,sv_2mortal(newSVhek(GvNAME_HEK(gv))));
2040}
2041
2042void
2043Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
2044{
2045 const GV * const egv = GvEGVx(gv);
2046
2047 PERL_ARGS_ASSERT_GV_EFULLNAME4;
2048
2049 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
2050}
2051
2052void
2053Perl_gv_check(pTHX_ const HV *stash)
2054{
2055 dVAR;
2056 I32 i;
2057
2058 PERL_ARGS_ASSERT_GV_CHECK;
2059
2060 if (!HvARRAY(stash))
2061 return;
2062 for (i = 0; i <= (I32) HvMAX(stash); i++) {
2063 const HE *entry;
2064 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
2065 GV *gv;
2066 HV *hv;
2067 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
2068 (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv)))
2069 {
2070 if (hv != PL_defstash && hv != stash)
2071 gv_check(hv); /* nested package */
2072 }
2073 else if ( *HeKEY(entry) != '_'
2074 && isIDFIRST_lazy_if(HeKEY(entry), HeUTF8(entry)) ) {
2075 const char *file;
2076 gv = MUTABLE_GV(HeVAL(entry));
2077 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
2078 continue;
2079 file = GvFILE(gv);
2080 CopLINE_set(PL_curcop, GvLINE(gv));
2081#ifdef USE_ITHREADS
2082 CopFILE(PL_curcop) = (char *)file; /* set for warning */
2083#else
2084 CopFILEGV(PL_curcop)
2085 = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0);
2086#endif
2087 Perl_warner(aTHX_ packWARN(WARN_ONCE),
2088 "Name \"%"HEKf"::%"HEKf
2089 "\" used only once: possible typo",
2090 HEKfARG(HvNAME_HEK(stash)),
2091 HEKfARG(GvNAME_HEK(gv)));
2092 }
2093 }
2094 }
2095}
2096
2097GV *
2098Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags)
2099{
2100 dVAR;
2101 PERL_ARGS_ASSERT_NEWGVGEN_FLAGS;
2102
2103 return gv_fetchpv(Perl_form(aTHX_ "%"SVf"::_GEN_%ld",
2104 SVfARG(newSVpvn_flags(pack, strlen(pack),
2105 SVs_TEMP | flags)),
2106 (long)PL_gensym++),
2107 GV_ADD, SVt_PVGV);
2108}
2109
2110/* hopefully this is only called on local symbol table entries */
2111
2112GP*
2113Perl_gp_ref(pTHX_ GP *gp)
2114{
2115 dVAR;
2116 if (!gp)
2117 return NULL;
2118 gp->gp_refcnt++;
2119 if (gp->gp_cv) {
2120 if (gp->gp_cvgen) {
2121 /* If the GP they asked for a reference to contains
2122 a method cache entry, clear it first, so that we
2123 don't infect them with our cached entry */
2124 SvREFCNT_dec(gp->gp_cv);
2125 gp->gp_cv = NULL;
2126 gp->gp_cvgen = 0;
2127 }
2128 }
2129 return gp;
2130}
2131
2132void
2133Perl_gp_free(pTHX_ GV *gv)
2134{
2135 dVAR;
2136 GP* gp;
2137 int attempts = 100;
2138
2139 if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
2140 return;
2141 if (gp->gp_refcnt == 0) {
2142 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
2143 "Attempt to free unreferenced glob pointers"
2144 pTHX__FORMAT pTHX__VALUE);
2145 return;
2146 }
2147 if (--gp->gp_refcnt > 0) {
2148 if (gp->gp_egv == gv)
2149 gp->gp_egv = 0;
2150 GvGP_set(gv, NULL);
2151 return;
2152 }
2153
2154 while (1) {
2155 /* Copy and null out all the glob slots, so destructors do not see
2156 freed SVs. */
2157 HEK * const file_hek = gp->gp_file_hek;
2158 SV * const sv = gp->gp_sv;
2159 AV * const av = gp->gp_av;
2160 HV * const hv = gp->gp_hv;
2161 IO * const io = gp->gp_io;
2162 CV * const cv = gp->gp_cv;
2163 CV * const form = gp->gp_form;
2164
2165 gp->gp_file_hek = NULL;
2166 gp->gp_sv = NULL;
2167 gp->gp_av = NULL;
2168 gp->gp_hv = NULL;
2169 gp->gp_io = NULL;
2170 gp->gp_cv = NULL;
2171 gp->gp_form = NULL;
2172
2173 if (file_hek)
2174 unshare_hek(file_hek);
2175
2176 SvREFCNT_dec(sv);
2177 SvREFCNT_dec(av);
2178 /* FIXME - another reference loop GV -> symtab -> GV ?
2179 Somehow gp->gp_hv can end up pointing at freed garbage. */
2180 if (hv && SvTYPE(hv) == SVt_PVHV) {
2181 const HEK *hvname_hek = HvNAME_HEK(hv);
2182 DEBUG_o(Perl_deb(aTHX_ "gp_free clearing PL_stashcache for '%"HEKf"'\n", hvname_hek));
2183 if (PL_stashcache && hvname_hek)
2184 (void)hv_delete(PL_stashcache, HEK_KEY(hvname_hek),
2185 (HEK_UTF8(hvname_hek) ? -HEK_LEN(hvname_hek) : HEK_LEN(hvname_hek)),
2186 G_DISCARD);
2187 SvREFCNT_dec(hv);
2188 }
2189 SvREFCNT_dec(io);
2190 SvREFCNT_dec(cv);
2191 SvREFCNT_dec(form);
2192
2193 if (!gp->gp_file_hek
2194 && !gp->gp_sv
2195 && !gp->gp_av
2196 && !gp->gp_hv
2197 && !gp->gp_io
2198 && !gp->gp_cv
2199 && !gp->gp_form) break;
2200
2201 if (--attempts == 0) {
2202 Perl_die(aTHX_
2203 "panic: gp_free failed to free glob pointer - "
2204 "something is repeatedly re-creating entries"
2205 );
2206 }
2207 }
2208
2209 Safefree(gp);
2210 GvGP_set(gv, NULL);
2211}
2212
2213int
2214Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
2215{
2216 AMT * const amtp = (AMT*)mg->mg_ptr;
2217 PERL_UNUSED_ARG(sv);
2218
2219 PERL_ARGS_ASSERT_MAGIC_FREEOVRLD;
2220
2221 if (amtp && AMT_AMAGIC(amtp)) {
2222 int i;
2223 for (i = 1; i < NofAMmeth; i++) {
2224 CV * const cv = amtp->table[i];
2225 if (cv) {
2226 SvREFCNT_dec(MUTABLE_SV(cv));
2227 amtp->table[i] = NULL;
2228 }
2229 }
2230 }
2231 return 0;
2232}
2233
2234/* Updates and caches the CV's */
2235/* Returns:
2236 * 1 on success and there is some overload
2237 * 0 if there is no overload
2238 * -1 if some error occurred and it couldn't croak
2239 */
2240
2241int
2242Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
2243{
2244 dVAR;
2245 MAGIC* const mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2246 AMT amt;
2247 const struct mro_meta* stash_meta = HvMROMETA(stash);
2248 U32 newgen;
2249
2250 PERL_ARGS_ASSERT_GV_AMUPDATE;
2251
2252 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2253 if (mg) {
2254 const AMT * const amtp = (AMT*)mg->mg_ptr;
2255 if (amtp->was_ok_sub == newgen) {
2256 return AMT_AMAGIC(amtp) ? 1 : 0;
2257 }
2258 sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table);
2259 }
2260
2261 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
2262
2263 Zero(&amt,1,AMT);
2264 amt.was_ok_sub = newgen;
2265 amt.fallback = AMGfallNO;
2266 amt.flags = 0;
2267
2268 {
2269 int filled = 0;
2270 int i;
2271
2272 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
2273
2274 /* Try to find via inheritance. */
2275 GV *gv = gv_fetchmeth_pvn(stash, PL_AMG_names[0], 2, -1, 0);
2276 SV * const sv = gv ? GvSV(gv) : NULL;
2277 CV* cv;
2278
2279 if (!gv)
2280 {
2281 if (!gv_fetchmeth_pvn(stash, "((", 2, -1, 0))
2282 goto no_table;
2283 }
2284#ifdef PERL_DONT_CREATE_GVSV
2285 else if (!sv) {
2286 NOOP; /* Equivalent to !SvTRUE and !SvOK */
2287 }
2288#endif
2289 else if (SvTRUE(sv))
2290 /* don't need to set overloading here because fallback => 1
2291 * is the default setting for classes without overloading */
2292 amt.fallback=AMGfallYES;
2293 else if (SvOK(sv)) {
2294 amt.fallback=AMGfallNEVER;
2295 filled = 1;
2296 }
2297 else {
2298 filled = 1;
2299 }
2300
2301 for (i = 1; i < NofAMmeth; i++) {
2302 const char * const cooky = PL_AMG_names[i];
2303 /* Human-readable form, for debugging: */
2304 const char * const cp = AMG_id2name(i);
2305 const STRLEN l = PL_AMG_namelens[i];
2306
2307 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
2308 cp, HvNAME_get(stash)) );
2309 /* don't fill the cache while looking up!
2310 Creation of inheritance stubs in intermediate packages may
2311 conflict with the logic of runtime method substitution.
2312 Indeed, for inheritance A -> B -> C, if C overloads "+0",
2313 then we could have created stubs for "(+0" in A and C too.
2314 But if B overloads "bool", we may want to use it for
2315 numifying instead of C's "+0". */
2316 gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
2317 cv = 0;
2318 if (gv && (cv = GvCV(gv))) {
2319 if(GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")){
2320 const char * const hvname = HvNAME_get(GvSTASH(CvGV(cv)));
2321 if (hvname && HEK_LEN(HvNAME_HEK(GvSTASH(CvGV(cv)))) == 8
2322 && strEQ(hvname, "overload")) {
2323 /* This is a hack to support autoloading..., while
2324 knowing *which* methods were declared as overloaded. */
2325 /* GvSV contains the name of the method. */
2326 GV *ngv = NULL;
2327 SV *gvsv = GvSV(gv);
2328
2329 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
2330 "\" for overloaded \"%s\" in package \"%.256s\"\n",
2331 (void*)GvSV(gv), cp, HvNAME(stash)) );
2332 if (!gvsv || !SvPOK(gvsv)
2333 || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0)))
2334 {
2335 /* Can be an import stub (created by "can"). */
2336 if (destructing) {
2337 return -1;
2338 }
2339 else {
2340 const SV * const name = (gvsv && SvPOK(gvsv))
2341 ? gvsv
2342 : newSVpvs_flags("???", SVs_TEMP);
2343 /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */
2344 Perl_croak(aTHX_ "%s method \"%"SVf256
2345 "\" overloading \"%s\" "\
2346 "in package \"%"HEKf256"\"",
2347 (GvCVGEN(gv) ? "Stub found while resolving"
2348 : "Can't resolve"),
2349 SVfARG(name), cp,
2350 HEKfARG(
2351 HvNAME_HEK(stash)
2352 ));
2353 }
2354 }
2355 cv = GvCV(gv = ngv);
2356 }
2357 }
2358 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
2359 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
2360 GvNAME(CvGV(cv))) );
2361 filled = 1;
2362 } else if (gv) { /* Autoloaded... */
2363 cv = MUTABLE_CV(gv);
2364 filled = 1;
2365 }
2366 amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv));
2367 }
2368 if (filled) {
2369 AMT_AMAGIC_on(&amt);
2370 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2371 (char*)&amt, sizeof(AMT));
2372 return TRUE;
2373 }
2374 }
2375 /* Here we have no table: */
2376 no_table:
2377 AMT_AMAGIC_off(&amt);
2378 sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table,
2379 (char*)&amt, sizeof(AMTS));
2380 return 0;
2381}
2382
2383
2384CV*
2385Perl_gv_handler(pTHX_ HV *stash, I32 id)
2386{
2387 dVAR;
2388 MAGIC *mg;
2389 AMT *amtp;
2390 U32 newgen;
2391 struct mro_meta* stash_meta;
2392
2393 if (!stash || !HvNAME_get(stash))
2394 return NULL;
2395
2396 stash_meta = HvMROMETA(stash);
2397 newgen = PL_sub_generation + stash_meta->pkg_gen + stash_meta->cache_gen;
2398
2399 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2400 if (!mg) {
2401 do_update:
2402 if (Gv_AMupdate(stash, 0) == -1)
2403 return NULL;
2404 mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table);
2405 }
2406 assert(mg);
2407 amtp = (AMT*)mg->mg_ptr;
2408 if ( amtp->was_ok_sub != newgen )
2409 goto do_update;
2410 if (AMT_AMAGIC(amtp)) {
2411 CV * const ret = amtp->table[id];
2412 if (ret && isGV(ret)) { /* Autoloading stab */
2413 /* Passing it through may have resulted in a warning
2414 "Inherited AUTOLOAD for a non-method deprecated", since
2415 our caller is going through a function call, not a method call.
2416 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
2417 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
2418
2419 if (gv && GvCV(gv))
2420 return GvCV(gv);
2421 }
2422 return ret;
2423 }
2424
2425 return NULL;
2426}
2427
2428
2429/* Implement tryAMAGICun_MG macro.
2430 Do get magic, then see if the stack arg is overloaded and if so call it.
2431 Flags:
2432 AMGf_set return the arg using SETs rather than assigning to
2433 the targ
2434 AMGf_numeric apply sv_2num to the stack arg.
2435*/
2436
2437bool
2438Perl_try_amagic_un(pTHX_ int method, int flags) {
2439 dVAR;
2440 dSP;
2441 SV* tmpsv;
2442 SV* const arg = TOPs;
2443
2444 SvGETMAGIC(arg);
2445
2446 if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method,
2447 AMGf_noright | AMGf_unary))) {
2448 if (flags & AMGf_set) {
2449 SETs(tmpsv);
2450 }
2451 else {
2452 dTARGET;
2453 if (SvPADMY(TARG)) {
2454 sv_setsv(TARG, tmpsv);
2455 SETTARG;
2456 }
2457 else
2458 SETs(tmpsv);
2459 }
2460 PUTBACK;
2461 return TRUE;
2462 }
2463
2464 if ((flags & AMGf_numeric) && SvROK(arg))
2465 *sp = sv_2num(arg);
2466 return FALSE;
2467}
2468
2469
2470/* Implement tryAMAGICbin_MG macro.
2471 Do get magic, then see if the two stack args are overloaded and if so
2472 call it.
2473 Flags:
2474 AMGf_set return the arg using SETs rather than assigning to
2475 the targ
2476 AMGf_assign op may be called as mutator (eg +=)
2477 AMGf_numeric apply sv_2num to the stack arg.
2478*/
2479
2480bool
2481Perl_try_amagic_bin(pTHX_ int method, int flags) {
2482 dVAR;
2483 dSP;
2484 SV* const left = TOPm1s;
2485 SV* const right = TOPs;
2486
2487 SvGETMAGIC(left);
2488 if (left != right)
2489 SvGETMAGIC(right);
2490
2491 if (SvAMAGIC(left) || SvAMAGIC(right)) {
2492 SV * const tmpsv = amagic_call(left, right, method,
2493 ((flags & AMGf_assign) && opASSIGN ? AMGf_assign: 0));
2494 if (tmpsv) {
2495 if (flags & AMGf_set) {
2496 (void)POPs;
2497 SETs(tmpsv);
2498 }
2499 else {
2500 dATARGET;
2501 (void)POPs;
2502 if (opASSIGN || SvPADMY(TARG)) {
2503 sv_setsv(TARG, tmpsv);
2504 SETTARG;
2505 }
2506 else
2507 SETs(tmpsv);
2508 }
2509 PUTBACK;
2510 return TRUE;
2511 }
2512 }
2513 if(left==right && SvGMAGICAL(left)) {
2514 SV * const left = sv_newmortal();
2515 *(sp-1) = left;
2516 /* Print the uninitialized warning now, so it includes the vari-
2517 able name. */
2518 if (!SvOK(right)) {
2519 if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right);
2520 sv_setsv_flags(left, &PL_sv_no, 0);
2521 }
2522 else sv_setsv_flags(left, right, 0);
2523 SvGETMAGIC(right);
2524 }
2525 if (flags & AMGf_numeric) {
2526 if (SvROK(TOPm1s))
2527 *(sp-1) = sv_2num(TOPm1s);
2528 if (SvROK(right))
2529 *sp = sv_2num(right);
2530 }
2531 return FALSE;
2532}
2533
2534SV *
2535Perl_amagic_deref_call(pTHX_ SV *ref, int method) {
2536 SV *tmpsv = NULL;
2537
2538 PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL;
2539
2540 while (SvAMAGIC(ref) &&
2541 (tmpsv = amagic_call(ref, &PL_sv_undef, method,
2542 AMGf_noright | AMGf_unary))) {
2543 if (!SvROK(tmpsv))
2544 Perl_croak(aTHX_ "Overloaded dereference did not return a reference");
2545 if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) {
2546 /* Bail out if it returns us the same reference. */
2547 return tmpsv;
2548 }
2549 ref = tmpsv;
2550 }
2551 return tmpsv ? tmpsv : ref;
2552}
2553
2554bool
2555Perl_amagic_is_enabled(pTHX_ int method)
2556{
2557 SV *lex_mask = cop_hints_fetch_pvs(PL_curcop, "overloading", 0);
2558
2559 assert(PL_curcop->cop_hints & HINT_NO_AMAGIC);
2560
2561 if ( !lex_mask || !SvOK(lex_mask) )
2562 /* overloading lexically disabled */
2563 return FALSE;
2564 else if ( lex_mask && SvPOK(lex_mask) ) {
2565 /* we have an entry in the hints hash, check if method has been
2566 * masked by overloading.pm */
2567 STRLEN len;
2568 const int offset = method / 8;
2569 const int bit = method % 8;
2570 char *pv = SvPV(lex_mask, len);
2571
2572 /* Bit set, so this overloading operator is disabled */
2573 if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) )
2574 return FALSE;
2575 }
2576 return TRUE;
2577}
2578
2579SV*
2580Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
2581{
2582 dVAR;
2583 MAGIC *mg;
2584 CV *cv=NULL;
2585 CV **cvp=NULL, **ocvp=NULL;
2586 AMT *amtp=NULL, *oamtp=NULL;
2587 int off = 0, off1, lr = 0, notfound = 0;
2588 int postpr = 0, force_cpy = 0;
2589 int assign = AMGf_assign & flags;
2590 const int assignshift = assign ? 1 : 0;
2591 int use_default_op = 0;
2592 int force_scalar = 0;
2593#ifdef DEBUGGING
2594 int fl=0;
2595#endif
2596 HV* stash=NULL;
2597
2598 PERL_ARGS_ASSERT_AMAGIC_CALL;
2599
2600 if ( PL_curcop->cop_hints & HINT_NO_AMAGIC ) {
2601 if (!amagic_is_enabled(method)) return NULL;
2602 }
2603
2604 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
2605 && (stash = SvSTASH(SvRV(left))) && Gv_AMG(stash)
2606 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2607 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2608 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
2609 : NULL))
2610 && ((cv = cvp[off=method+assignshift])
2611 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2612 * usual method */
2613 (
2614#ifdef DEBUGGING
2615 fl = 1,
2616#endif
2617 cv = cvp[off=method])))) {
2618 lr = -1; /* Call method for left argument */
2619 } else {
2620 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
2621 int logic;
2622
2623 /* look for substituted methods */
2624 /* In all the covered cases we should be called with assign==0. */
2625 switch (method) {
2626 case inc_amg:
2627 force_cpy = 1;
2628 if ((cv = cvp[off=add_ass_amg])
2629 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
2630 right = &PL_sv_yes; lr = -1; assign = 1;
2631 }
2632 break;
2633 case dec_amg:
2634 force_cpy = 1;
2635 if ((cv = cvp[off = subtr_ass_amg])
2636 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
2637 right = &PL_sv_yes; lr = -1; assign = 1;
2638 }
2639 break;
2640 case bool__amg:
2641 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
2642 break;
2643 case numer_amg:
2644 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
2645 break;
2646 case string_amg:
2647 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
2648 break;
2649 case not_amg:
2650 (void)((cv = cvp[off=bool__amg])
2651 || (cv = cvp[off=numer_amg])
2652 || (cv = cvp[off=string_amg]));
2653 if (cv)
2654 postpr = 1;
2655 break;
2656 case copy_amg:
2657 {
2658 /*
2659 * SV* ref causes confusion with the interpreter variable of
2660 * the same name
2661 */
2662 SV* const tmpRef=SvRV(left);
2663 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
2664 /*
2665 * Just to be extra cautious. Maybe in some
2666 * additional cases sv_setsv is safe, too.
2667 */
2668 SV* const newref = newSVsv(tmpRef);
2669 SvOBJECT_on(newref);
2670 /* No need to do SvAMAGIC_on here, as SvAMAGIC macros
2671 delegate to the stash. */
2672 SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef))));
2673 return newref;
2674 }
2675 }
2676 break;
2677 case abs_amg:
2678 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
2679 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
2680 SV* const nullsv=sv_2mortal(newSViv(0));
2681 if (off1==lt_amg) {
2682 SV* const lessp = amagic_call(left,nullsv,
2683 lt_amg,AMGf_noright);
2684 logic = SvTRUE(lessp);
2685 } else {
2686 SV* const lessp = amagic_call(left,nullsv,
2687 ncmp_amg,AMGf_noright);
2688 logic = (SvNV(lessp) < 0);
2689 }
2690 if (logic) {
2691 if (off==subtr_amg) {
2692 right = left;
2693 left = nullsv;
2694 lr = 1;
2695 }
2696 } else {
2697 return left;
2698 }
2699 }
2700 break;
2701 case neg_amg:
2702 if ((cv = cvp[off=subtr_amg])) {
2703 right = left;
2704 left = sv_2mortal(newSViv(0));
2705 lr = 1;
2706 }
2707 break;
2708 case int_amg:
2709 case iter_amg: /* XXXX Eventually should do to_gv. */
2710 case ftest_amg: /* XXXX Eventually should do to_gv. */
2711 case regexp_amg:
2712 /* FAIL safe */
2713 return NULL; /* Delegate operation to standard mechanisms. */
2714 break;
2715 case to_sv_amg:
2716 case to_av_amg:
2717 case to_hv_amg:
2718 case to_gv_amg:
2719 case to_cv_amg:
2720 /* FAIL safe */
2721 return left; /* Delegate operation to standard mechanisms. */
2722 break;
2723 default:
2724 goto not_found;
2725 }
2726 if (!cv) goto not_found;
2727 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
2728 && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash)
2729 && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table))
2730 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
2731 ? (amtp = (AMT*)mg->mg_ptr)->table
2732 : NULL))
2733 && ((cv = cvp[off=method+assignshift])
2734 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
2735 * usual method */
2736 (
2737#ifdef DEBUGGING
2738 fl = 1,
2739#endif
2740 cv = cvp[off=method])))) { /* Method for right
2741 * argument found */
2742 lr=1;
2743 } else if (((cvp && amtp->fallback > AMGfallNEVER)
2744 || (ocvp && oamtp->fallback > AMGfallNEVER))
2745 && !(flags & AMGf_unary)) {
2746 /* We look for substitution for
2747 * comparison operations and
2748 * concatenation */
2749 if (method==concat_amg || method==concat_ass_amg
2750 || method==repeat_amg || method==repeat_ass_amg) {
2751 return NULL; /* Delegate operation to string conversion */
2752 }
2753 off = -1;
2754 switch (method) {
2755 case lt_amg:
2756 case le_amg:
2757 case gt_amg:
2758 case ge_amg:
2759 case eq_amg:
2760 case ne_amg:
2761 off = ncmp_amg;
2762 break;
2763 case slt_amg:
2764 case sle_amg:
2765 case sgt_amg:
2766 case sge_amg:
2767 case seq_amg:
2768 case sne_amg:
2769 off = scmp_amg;
2770 break;
2771 }
2772 if (off != -1) {
2773 if (ocvp && (oamtp->fallback > AMGfallNEVER)) {
2774 cv = ocvp[off];
2775 lr = -1;
2776 }
2777 if (!cv && (cvp && amtp->fallback > AMGfallNEVER)) {
2778 cv = cvp[off];
2779 lr = 1;
2780 }
2781 }
2782 if (cv)
2783 postpr = 1;
2784 else
2785 goto not_found;
2786 } else {
2787 not_found: /* No method found, either report or croak */
2788 switch (method) {
2789 case to_sv_amg:
2790 case to_av_amg:
2791 case to_hv_amg:
2792 case to_gv_amg:
2793 case to_cv_amg:
2794 /* FAIL safe */
2795 return left; /* Delegate operation to standard mechanisms. */
2796 break;
2797 }
2798 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
2799 notfound = 1; lr = -1;
2800 } else if (cvp && (cv=cvp[nomethod_amg])) {
2801 notfound = 1; lr = 1;
2802 } else if ((use_default_op =
2803 (!ocvp || oamtp->fallback >= AMGfallYES)
2804 && (!cvp || amtp->fallback >= AMGfallYES))
2805 && !DEBUG_o_TEST) {
2806 /* Skip generating the "no method found" message. */
2807 return NULL;
2808 } else {
2809 SV *msg;
2810 if (off==-1) off=method;
2811 msg = sv_2mortal(Perl_newSVpvf(aTHX_
2812 "Operation \"%s\": no method found,%sargument %s%"SVf"%s%"SVf,
2813 AMG_id2name(method + assignshift),
2814 (flags & AMGf_unary ? " " : "\n\tleft "),
2815 SvAMAGIC(left)?
2816 "in overloaded package ":
2817 "has no overloaded magic",
2818 SvAMAGIC(left)?
2819 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))):
2820 SVfARG(&PL_sv_no),
2821 SvAMAGIC(right)?
2822 ",\n\tright argument in overloaded package ":
2823 (flags & AMGf_unary
2824 ? ""
2825 : ",\n\tright argument has no overloaded magic"),
2826 SvAMAGIC(right)?
2827 SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))):
2828 SVfARG(&PL_sv_no)));
2829 if (use_default_op) {
2830 DEBUG_o( Perl_deb(aTHX_ "%"SVf, SVfARG(msg)) );
2831 } else {
2832 Perl_croak(aTHX_ "%"SVf, SVfARG(msg));
2833 }
2834 return NULL;
2835 }
2836 force_cpy = force_cpy || assign;
2837 }
2838 }
2839
2840 switch (method) {
2841 /* in these cases, we're calling '+' or '-' as a fallback for a ++ or --
2842 * operation. we need this to return a value, so that it can be assigned
2843 * later on, in the postpr block (case inc_amg/dec_amg), even if the
2844 * increment or decrement was itself called in void context */
2845 case inc_amg:
2846 if (off == add_amg)
2847 force_scalar = 1;
2848 break;
2849 case dec_amg:
2850 if (off == subtr_amg)
2851 force_scalar = 1;
2852 break;
2853 /* in these cases, we're calling an assignment variant of an operator
2854 * (+= rather than +, for instance). regardless of whether it's a
2855 * fallback or not, it always has to return a value, which will be
2856 * assigned to the proper variable later */
2857 case add_amg:
2858 case subtr_amg:
2859 case mult_amg:
2860 case div_amg:
2861 case modulo_amg:
2862 case pow_amg:
2863 case lshift_amg:
2864 case rshift_amg:
2865 case repeat_amg:
2866 case concat_amg:
2867 case band_amg:
2868 case bor_amg:
2869 case bxor_amg:
2870 if (assign)
2871 force_scalar = 1;
2872 break;
2873 /* the copy constructor always needs to return a value */
2874 case copy_amg:
2875 force_scalar = 1;
2876 break;
2877 /* because of the way these are implemented (they don't perform the
2878 * dereferencing themselves, they return a reference that perl then
2879 * dereferences later), they always have to be in scalar context */
2880 case to_sv_amg:
2881 case to_av_amg:
2882 case to_hv_amg:
2883 case to_gv_amg:
2884 case to_cv_amg:
2885 force_scalar = 1;
2886 break;
2887 /* these don't have an op of their own; they're triggered by their parent
2888 * op, so the context there isn't meaningful ('$a and foo()' in void
2889 * context still needs to pass scalar context on to $a's bool overload) */
2890 case bool__amg:
2891 case numer_amg:
2892 case string_amg:
2893 force_scalar = 1;
2894 break;
2895 }
2896
2897#ifdef DEBUGGING
2898 if (!notfound) {
2899 DEBUG_o(Perl_deb(aTHX_
2900 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %"SVf"%s\n",
2901 AMG_id2name(off),
2902 method+assignshift==off? "" :
2903 " (initially \"",
2904 method+assignshift==off? "" :
2905 AMG_id2name(method+assignshift),
2906 method+assignshift==off? "" : "\")",
2907 flags & AMGf_unary? "" :
2908 lr==1 ? " for right argument": " for left argument",
2909 flags & AMGf_unary? " for argument" : "",
2910 stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)),
2911 fl? ",\n\tassignment variant used": "") );
2912 }
2913#endif
2914 /* Since we use shallow copy during assignment, we need
2915 * to dublicate the contents, probably calling user-supplied
2916 * version of copy operator
2917 */
2918 /* We need to copy in following cases:
2919 * a) Assignment form was called.
2920 * assignshift==1, assign==T, method + 1 == off
2921 * b) Increment or decrement, called directly.
2922 * assignshift==0, assign==0, method + 0 == off
2923 * c) Increment or decrement, translated to assignment add/subtr.
2924 * assignshift==0, assign==T,
2925 * force_cpy == T
2926 * d) Increment or decrement, translated to nomethod.
2927 * assignshift==0, assign==0,
2928 * force_cpy == T
2929 * e) Assignment form translated to nomethod.
2930 * assignshift==1, assign==T, method + 1 != off
2931 * force_cpy == T
2932 */
2933 /* off is method, method+assignshift, or a result of opcode substitution.
2934 * In the latter case assignshift==0, so only notfound case is important.
2935 */
2936 if ( (lr == -1) && ( ( (method + assignshift == off)
2937 && (assign || (method == inc_amg) || (method == dec_amg)))
2938 || force_cpy) )
2939 {
2940 /* newSVsv does not behave as advertised, so we copy missing
2941 * information by hand */
2942 SV *tmpRef = SvRV(left);
2943 SV *rv_copy;
2944 if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) {
2945 SvRV_set(left, rv_copy);
2946 SvSETMAGIC(left);
2947 SvREFCNT_dec(tmpRef);
2948 }
2949 }
2950
2951 {
2952 dSP;
2953 BINOP myop;
2954 SV* res;
2955 const bool oldcatch = CATCH_GET;
2956 I32 oldmark, nret;
2957 int gimme = force_scalar ? G_SCALAR : GIMME_V;
2958
2959 CATCH_SET(TRUE);
2960 Zero(&myop, 1, BINOP);
2961 myop.op_last = (OP *) &myop;
2962 myop.op_next = NULL;
2963 myop.op_flags = OPf_STACKED;
2964
2965 switch (gimme) {
2966 case G_VOID:
2967 myop.op_flags |= OPf_WANT_VOID;
2968 break;
2969 case G_ARRAY:
2970 if (flags & AMGf_want_list) {
2971 myop.op_flags |= OPf_WANT_LIST;
2972 break;
2973 }
2974 /* FALLTHROUGH */
2975 default:
2976 myop.op_flags |= OPf_WANT_SCALAR;
2977 break;
2978 }
2979
2980 PUSHSTACKi(PERLSI_OVERLOAD);
2981 ENTER;
2982 SAVEOP();
2983 PL_op = (OP *) &myop;
2984 if (PERLDB_SUB && PL_curstash != PL_debstash)
2985 PL_op->op_private |= OPpENTERSUB_DB;
2986 PUTBACK;
2987 Perl_pp_pushmark(aTHX);
2988
2989 EXTEND(SP, notfound + 5);
2990 PUSHs(lr>0? right: left);
2991 PUSHs(lr>0? left: right);
2992 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
2993 if (notfound) {
2994 PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift),
2995 AMG_id2namelen(method + assignshift), SVs_TEMP));
2996 }
2997 PUSHs(MUTABLE_SV(cv));
2998 PUTBACK;
2999 oldmark = TOPMARK;
3000
3001 if ((PL_op = PL_ppaddr[OP_ENTERSUB](aTHX)))
3002 CALLRUNOPS(aTHX);
3003 LEAVE;
3004 SPAGAIN;
3005 nret = SP - (PL_stack_base + oldmark);
3006
3007 switch (gimme) {
3008 case G_VOID:
3009 /* returning NULL has another meaning, and we check the context
3010 * at the call site too, so this can be differentiated from the
3011 * scalar case */
3012 res = &PL_sv_undef;
3013 SP = PL_stack_base + oldmark;
3014 break;
3015 case G_ARRAY: {
3016 if (flags & AMGf_want_list) {
3017 res = sv_2mortal((SV *)newAV());
3018 av_extend((AV *)res, nret);
3019 while (nret--)
3020 av_store((AV *)res, nret, POPs);
3021 break;
3022 }
3023 /* FALLTHROUGH */
3024 }
3025 default:
3026 res = POPs;
3027 break;
3028 }
3029
3030 PUTBACK;
3031 POPSTACK;
3032 CATCH_SET(oldcatch);
3033
3034 if (postpr) {
3035 int ans;
3036 switch (method) {
3037 case le_amg:
3038 case sle_amg:
3039 ans=SvIV(res)<=0; break;
3040 case lt_amg:
3041 case slt_amg:
3042 ans=SvIV(res)<0; break;
3043 case ge_amg:
3044 case sge_amg:
3045 ans=SvIV(res)>=0; break;
3046 case gt_amg:
3047 case sgt_amg:
3048 ans=SvIV(res)>0; break;
3049 case eq_amg:
3050 case seq_amg:
3051 ans=SvIV(res)==0; break;
3052 case ne_amg:
3053 case sne_amg:
3054 ans=SvIV(res)!=0; break;
3055 case inc_amg:
3056 case dec_amg:
3057 SvSetSV(left,res); return left;
3058 case not_amg:
3059 ans=!SvTRUE(res); break;
3060 default:
3061 ans=0; break;
3062 }
3063 return boolSV(ans);
3064 } else if (method==copy_amg) {
3065 if (!SvROK(res)) {
3066 Perl_croak(aTHX_ "Copy method did not return a reference");
3067 }
3068 return SvREFCNT_inc(SvRV(res));
3069 } else {
3070 return res;
3071 }
3072 }
3073}
3074
3075void
3076Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
3077{
3078 dVAR;
3079 U32 hash;
3080
3081 PERL_ARGS_ASSERT_GV_NAME_SET;
3082
3083 if (len > I32_MAX)
3084 Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
3085
3086 if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
3087 unshare_hek(GvNAME_HEK(gv));
3088 }
3089
3090 PERL_HASH(hash, name, len);
3091 GvNAME_HEK(gv) = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash);
3092}
3093
3094/*
3095=for apidoc gv_try_downgrade
3096
3097If the typeglob C<gv> can be expressed more succinctly, by having
3098something other than a real GV in its place in the stash, replace it
3099with the optimised form. Basic requirements for this are that C<gv>
3100is a real typeglob, is sufficiently ordinary, and is only referenced
3101from its package. This function is meant to be used when a GV has been
3102looked up in part to see what was there, causing upgrading, but based
3103on what was found it turns out that the real GV isn't required after all.
3104
3105If C<gv> is a completely empty typeglob, it is deleted from the stash.
3106
3107If C<gv> is a typeglob containing only a sufficiently-ordinary constant
3108sub, the typeglob is replaced with a scalar-reference placeholder that
3109more compactly represents the same thing.
3110
3111=cut
3112*/
3113
3114void
3115Perl_gv_try_downgrade(pTHX_ GV *gv)
3116{
3117 HV *stash;
3118 CV *cv;
3119 HEK *namehek;
3120 SV **gvp;
3121 PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE;
3122
3123 /* XXX Why and where does this leave dangling pointers during global
3124 destruction? */
3125 if (PL_phase == PERL_PHASE_DESTRUCT) return;
3126
3127 if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) &&
3128 !SvOBJECT(gv) && !SvREADONLY(gv) &&
3129 isGV_with_GP(gv) && GvGP(gv) &&
3130 !GvINTRO(gv) && GvREFCNT(gv) == 1 &&
3131 !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) &&
3132 GvEGVx(gv) == gv && (stash = GvSTASH(gv))))
3133 return;
3134 if (SvMAGICAL(gv)) {
3135 MAGIC *mg;
3136 /* only backref magic is allowed */
3137 if (SvGMAGICAL(gv) || SvSMAGICAL(gv))
3138 return;
3139 for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) {
3140 if (mg->mg_type != PERL_MAGIC_backref)
3141 return;
3142 }
3143 }
3144 cv = GvCV(gv);
3145 if (!cv) {
3146 HEK *gvnhek = GvNAME_HEK(gv);
3147 (void)hv_delete(stash, HEK_KEY(gvnhek),
3148 HEK_UTF8(gvnhek) ? -HEK_LEN(gvnhek) : HEK_LEN(gvnhek), G_DISCARD);
3149 } else if (GvMULTI(gv) && cv &&
3150 !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) &&
3151 CvSTASH(cv) == stash && CvGV(cv) == gv &&
3152 CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) &&
3153 !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) &&
3154 (namehek = GvNAME_HEK(gv)) &&
3155 (gvp = hv_fetch(stash, HEK_KEY(namehek),
3156 HEK_LEN(namehek)*(HEK_UTF8(namehek) ? -1 : 1), 0)) &&
3157 *gvp == (SV*)gv) {
3158 SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr);
3159 SvREFCNT(gv) = 0;
3160 sv_clear((SV*)gv);
3161 SvREFCNT(gv) = 1;
3162 SvFLAGS(gv) = SVt_IV|SVf_ROK;
3163 SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) -
3164 STRUCT_OFFSET(XPVIV, xiv_iv));
3165 SvRV_set(gv, value);
3166 }
3167}
3168
3169#include "XSUB.h"
3170
3171static void
3172core_xsub(pTHX_ CV* cv)
3173{
3174 Perl_croak(aTHX_
3175 "&CORE::%s cannot be called directly", GvNAME(CvGV(cv))
3176 );
3177}
3178
3179/*
3180 * Local variables:
3181 * c-indentation-style: bsd
3182 * c-basic-offset: 4
3183 * indent-tabs-mode: nil
3184 * End:
3185 *
3186 * ex: set ts=8 sts=4 sw=4 et:
3187 */