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