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