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