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