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