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