This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate:
[perl5.git] / gv.c
... / ...
CommitLineData
1/* gv.c
2 *
3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 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 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
20/*
21=head1 GV Functions
22
23A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
24It is a structure that holds a pointer to a scalar, an array, a hash etc,
25corresponding to $foo, @foo, %foo.
26
27GVs are usually found as values in stashes (symbol table hashes) where
28Perl stores its global variables.
29
30=cut
31*/
32
33#include "EXTERN.h"
34#define PERL_IN_GV_C
35#include "perl.h"
36
37GV *
38Perl_gv_AVadd(pTHX_ register GV *gv)
39{
40 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
41 Perl_croak(aTHX_ "Bad symbol for array");
42 if (!GvAV(gv))
43 GvAV(gv) = newAV();
44 return gv;
45}
46
47GV *
48Perl_gv_HVadd(pTHX_ register GV *gv)
49{
50 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
51 Perl_croak(aTHX_ "Bad symbol for hash");
52 if (!GvHV(gv))
53 GvHV(gv) = newHV();
54 return gv;
55}
56
57GV *
58Perl_gv_IOadd(pTHX_ register GV *gv)
59{
60 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
61 Perl_croak(aTHX_ "Bad symbol for filehandle");
62 if (!GvIOp(gv)) {
63#ifdef GV_UNIQUE_CHECK
64 if (GvUNIQUE(gv)) {
65 Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
66 }
67#endif
68 GvIOp(gv) = newIO();
69 }
70 return gv;
71}
72
73GV *
74Perl_gv_fetchfile(pTHX_ const char *name)
75{
76 char smallbuf[256];
77 char *tmpbuf;
78 STRLEN tmplen;
79 GV *gv;
80
81 if (!PL_defstash)
82 return Nullgv;
83
84 tmplen = strlen(name) + 2;
85 if (tmplen < sizeof smallbuf)
86 tmpbuf = smallbuf;
87 else
88 New(603, tmpbuf, tmplen + 1, char);
89 /* This is where the debugger's %{"::_<$filename"} hash is created */
90 tmpbuf[0] = '_';
91 tmpbuf[1] = '<';
92 strcpy(tmpbuf + 2, name);
93 gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
94 if (!isGV(gv)) {
95 gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
96 sv_setpv(GvSV(gv), name);
97 if (PERLDB_LINE)
98 hv_magic(GvHVn(gv_AVadd(gv)), Nullgv, PERL_MAGIC_dbfile);
99 }
100 if (tmpbuf != smallbuf)
101 Safefree(tmpbuf);
102 return gv;
103}
104
105void
106Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
107{
108 register GP *gp;
109 bool doproto = SvTYPE(gv) > SVt_NULL;
110 char *proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
111
112 sv_upgrade((SV*)gv, SVt_PVGV);
113 if (SvLEN(gv)) {
114 if (proto) {
115 SvPV_set(gv, NULL);
116 SvLEN_set(gv, 0);
117 SvPOK_off(gv);
118 } else
119 Safefree(SvPVX(gv));
120 }
121 Newz(602, gp, 1, GP);
122 GvGP(gv) = gp_ref(gp);
123 GvSV(gv) = NEWSV(72,0);
124 GvLINE(gv) = CopLINE(PL_curcop);
125 GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : "";
126 GvCVGEN(gv) = 0;
127 GvEGV(gv) = gv;
128 sv_magic((SV*)gv, (SV*)gv, PERL_MAGIC_glob, Nullch, 0);
129 GvSTASH(gv) = (HV*)SvREFCNT_inc(stash);
130 GvNAME(gv) = savepvn(name, len);
131 GvNAMELEN(gv) = len;
132 if (multi || doproto) /* doproto means it _was_ mentioned */
133 GvMULTI_on(gv);
134 if (doproto) { /* Replicate part of newSUB here. */
135 SvIOK_off(gv);
136 ENTER;
137 /* XXX unsafe for threads if eval_owner isn't held */
138 start_subparse(0,0); /* Create CV in compcv. */
139 GvCV(gv) = PL_compcv;
140 LEAVE;
141
142 PL_sub_generation++;
143 CvGV(GvCV(gv)) = gv;
144 CvFILE_set_from_cop(GvCV(gv), PL_curcop);
145 CvSTASH(GvCV(gv)) = PL_curstash;
146#ifdef USE_5005THREADS
147 CvOWNER(GvCV(gv)) = 0;
148 if (!CvMUTEXP(GvCV(gv))) {
149 New(666, CvMUTEXP(GvCV(gv)), 1, perl_mutex);
150 MUTEX_INIT(CvMUTEXP(GvCV(gv)));
151 }
152#endif /* USE_5005THREADS */
153 if (proto) {
154 sv_setpv((SV*)GvCV(gv), proto);
155 Safefree(proto);
156 }
157 }
158}
159
160STATIC void
161S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
162{
163 switch (sv_type) {
164 case SVt_PVIO:
165 (void)GvIOn(gv);
166 break;
167 case SVt_PVAV:
168 (void)GvAVn(gv);
169 break;
170 case SVt_PVHV:
171 (void)GvHVn(gv);
172 break;
173 }
174}
175
176/*
177=for apidoc gv_fetchmeth
178
179Returns the glob with the given C<name> and a defined subroutine or
180C<NULL>. The glob lives in the given C<stash>, or in the stashes
181accessible via @ISA and UNIVERSAL::.
182
183The argument C<level> should be either 0 or -1. If C<level==0>, as a
184side-effect creates a glob with the given C<name> in the given C<stash>
185which in the case of success contains an alias for the subroutine, and sets
186up caching info for this glob. Similarly for all the searched stashes.
187
188This function grants C<"SUPER"> token as a postfix of the stash name. The
189GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
190visible to Perl code. So when calling C<call_sv>, you should not use
191the GV directly; instead, you should use the method's CV, which can be
192obtained from the GV with the C<GvCV> macro.
193
194=cut
195*/
196
197GV *
198Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
199{
200 AV* av;
201 GV* topgv;
202 GV* gv;
203 GV** gvp;
204 CV* cv;
205
206 /* UNIVERSAL methods should be callable without a stash */
207 if (!stash) {
208 level = -1; /* probably appropriate */
209 if(!(stash = gv_stashpvn("UNIVERSAL", 9, FALSE)))
210 return 0;
211 }
212
213 if (!HvNAME(stash))
214 Perl_croak(aTHX_
215 "Can't use anonymous symbol table for method lookup");
216
217 if ((level > 100) || (level < -100))
218 Perl_croak(aTHX_ "Recursive inheritance detected while looking for method '%s' in package '%s'",
219 name, HvNAME(stash));
220
221 DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,HvNAME(stash)) );
222
223 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
224 if (!gvp)
225 topgv = Nullgv;
226 else {
227 topgv = *gvp;
228 if (SvTYPE(topgv) != SVt_PVGV)
229 gv_init(topgv, stash, name, len, TRUE);
230 if ((cv = GvCV(topgv))) {
231 /* If genuine method or valid cache entry, use it */
232 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == PL_sub_generation)
233 return topgv;
234 /* Stale cached entry: junk it */
235 SvREFCNT_dec(cv);
236 GvCV(topgv) = cv = Nullcv;
237 GvCVGEN(topgv) = 0;
238 }
239 else if (GvCVGEN(topgv) == PL_sub_generation)
240 return 0; /* cache indicates sub doesn't exist */
241 }
242
243 gvp = (GV**)hv_fetch(stash, "ISA", 3, FALSE);
244 av = (gvp && (gv = *gvp) && gv != (GV*)&PL_sv_undef) ? GvAV(gv) : Nullav;
245
246 /* create and re-create @.*::SUPER::ISA on demand */
247 if (!av || !SvMAGIC(av)) {
248 char* packname = HvNAME(stash);
249 STRLEN packlen = strlen(packname);
250
251 if (packlen >= 7 && strEQ(packname + packlen - 7, "::SUPER")) {
252 HV* basestash;
253
254 packlen -= 7;
255 basestash = gv_stashpvn(packname, packlen, TRUE);
256 gvp = (GV**)hv_fetch(basestash, "ISA", 3, FALSE);
257 if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
258 gvp = (GV**)hv_fetch(stash, "ISA", 3, TRUE);
259 if (!gvp || !(gv = *gvp))
260 Perl_croak(aTHX_ "Cannot create %s::ISA", HvNAME(stash));
261 if (SvTYPE(gv) != SVt_PVGV)
262 gv_init(gv, stash, "ISA", 3, TRUE);
263 SvREFCNT_dec(GvAV(gv));
264 GvAV(gv) = (AV*)SvREFCNT_inc(av);
265 }
266 }
267 }
268
269 if (av) {
270 SV** svp = AvARRAY(av);
271 /* NOTE: No support for tied ISA */
272 I32 items = AvFILLp(av) + 1;
273 while (items--) {
274 SV* sv = *svp++;
275 HV* basestash = gv_stashsv(sv, FALSE);
276 if (!basestash) {
277 if (ckWARN(WARN_MISC))
278 Perl_warner(aTHX_ packWARN(WARN_MISC), "Can't locate package %"SVf" for @%s::ISA",
279 sv, HvNAME(stash));
280 continue;
281 }
282 gv = gv_fetchmeth(basestash, name, len,
283 (level >= 0) ? level + 1 : level - 1);
284 if (gv)
285 goto gotcha;
286 }
287 }
288
289 /* if at top level, try UNIVERSAL */
290
291 if (level == 0 || level == -1) {
292 HV* lastchance;
293
294 if ((lastchance = gv_stashpvn("UNIVERSAL", 9, FALSE))) {
295 if ((gv = gv_fetchmeth(lastchance, name, len,
296 (level >= 0) ? level + 1 : level - 1)))
297 {
298 gotcha:
299 /*
300 * Cache method in topgv if:
301 * 1. topgv has no synonyms (else inheritance crosses wires)
302 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
303 */
304 if (topgv &&
305 GvREFCNT(topgv) == 1 &&
306 (cv = GvCV(gv)) &&
307 (CvROOT(cv) || CvXSUB(cv)))
308 {
309 if ((cv = GvCV(topgv)))
310 SvREFCNT_dec(cv);
311 GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
312 GvCVGEN(topgv) = PL_sub_generation;
313 }
314 return gv;
315 }
316 else if (topgv && GvREFCNT(topgv) == 1) {
317 /* cache the fact that the method is not defined */
318 GvCVGEN(topgv) = PL_sub_generation;
319 }
320 }
321 }
322
323 return 0;
324}
325
326/*
327=for apidoc gv_fetchmeth_autoload
328
329Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
330Returns a glob for the subroutine.
331
332For an autoloaded subroutine without a GV, will create a GV even
333if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
334of the result may be zero.
335
336=cut
337*/
338
339GV *
340Perl_gv_fetchmeth_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
341{
342 GV *gv = gv_fetchmeth(stash, name, len, level);
343
344 if (!gv) {
345 char autoload[] = "AUTOLOAD";
346 STRLEN autolen = sizeof(autoload)-1;
347 CV *cv;
348 GV **gvp;
349
350 if (!stash)
351 return Nullgv; /* UNIVERSAL::AUTOLOAD could cause trouble */
352 if (len == autolen && strnEQ(name, autoload, autolen))
353 return Nullgv;
354 if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE)))
355 return Nullgv;
356 cv = GvCV(gv);
357 if (!(CvROOT(cv) || CvXSUB(cv)))
358 return Nullgv;
359 /* Have an autoload */
360 if (level < 0) /* Cannot do without a stub */
361 gv_fetchmeth(stash, name, len, 0);
362 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
363 if (!gvp)
364 return Nullgv;
365 return *gvp;
366 }
367 return gv;
368}
369
370/*
371=for apidoc gv_fetchmethod
372
373See L<gv_fetchmethod_autoload>.
374
375=cut
376*/
377
378GV *
379Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name)
380{
381 return gv_fetchmethod_autoload(stash, name, TRUE);
382}
383
384/*
385=for apidoc gv_fetchmethod_autoload
386
387Returns the glob which contains the subroutine to call to invoke the method
388on the C<stash>. In fact in the presence of autoloading this may be the
389glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
390already setup.
391
392The third parameter of C<gv_fetchmethod_autoload> determines whether
393AUTOLOAD lookup is performed if the given method is not present: non-zero
394means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
395Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
396with a non-zero C<autoload> parameter.
397
398These functions grant C<"SUPER"> token as a prefix of the method name. Note
399that if you want to keep the returned glob for a long time, you need to
400check for it being "AUTOLOAD", since at the later time the call may load a
401different subroutine due to $AUTOLOAD changing its value. Use the glob
402created via a side effect to do this.
403
404These functions have the same side-effects and as C<gv_fetchmeth> with
405C<level==0>. C<name> should be writable if contains C<':'> or C<'
406''>. The warning against passing the GV returned by C<gv_fetchmeth> to
407C<call_sv> apply equally to these functions.
408
409=cut
410*/
411
412GV *
413Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
414{
415 register const char *nend;
416 const char *nsplit = 0;
417 GV* gv;
418 HV* ostash = stash;
419
420 if (stash && SvTYPE(stash) < SVt_PVHV)
421 stash = Nullhv;
422
423 for (nend = name; *nend; nend++) {
424 if (*nend == '\'')
425 nsplit = nend;
426 else if (*nend == ':' && *(nend + 1) == ':')
427 nsplit = ++nend;
428 }
429 if (nsplit) {
430 const char *origname = name;
431 name = nsplit + 1;
432 if (*nsplit == ':')
433 --nsplit;
434 if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
435 /* ->SUPER::method should really be looked up in original stash */
436 SV *tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
437 CopSTASHPV(PL_curcop)));
438 /* __PACKAGE__::SUPER stash should be autovivified */
439 stash = gv_stashpvn(SvPVX(tmpstr), SvCUR(tmpstr), TRUE);
440 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
441 origname, HvNAME(stash), name) );
442 }
443 else {
444 /* don't autovifify if ->NoSuchStash::method */
445 stash = gv_stashpvn(origname, nsplit - origname, FALSE);
446
447 /* however, explicit calls to Pkg::SUPER::method may
448 happen, and may require autovivification to work */
449 if (!stash && (nsplit - origname) >= 7 &&
450 strnEQ(nsplit - 7, "::SUPER", 7) &&
451 gv_stashpvn(origname, nsplit - origname - 7, FALSE))
452 stash = gv_stashpvn(origname, nsplit - origname, TRUE);
453 }
454 ostash = stash;
455 }
456
457 gv = gv_fetchmeth(stash, name, nend - name, 0);
458 if (!gv) {
459 if (strEQ(name,"import") || strEQ(name,"unimport"))
460 gv = (GV*)&PL_sv_yes;
461 else if (autoload)
462 gv = gv_autoload4(ostash, name, nend - name, TRUE);
463 }
464 else if (autoload) {
465 CV* cv = GvCV(gv);
466 if (!CvROOT(cv) && !CvXSUB(cv)) {
467 GV* stubgv;
468 GV* autogv;
469
470 if (CvANON(cv))
471 stubgv = gv;
472 else {
473 stubgv = CvGV(cv);
474 if (GvCV(stubgv) != cv) /* orphaned import */
475 stubgv = gv;
476 }
477 autogv = gv_autoload4(GvSTASH(stubgv),
478 GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
479 if (autogv)
480 gv = autogv;
481 }
482 }
483
484 return gv;
485}
486
487GV*
488Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
489{
490 char autoload[] = "AUTOLOAD";
491 STRLEN autolen = sizeof(autoload)-1;
492 GV* gv;
493 CV* cv;
494 HV* varstash;
495 GV* vargv;
496 SV* varsv;
497 char *packname = "";
498
499 if (len == autolen && strnEQ(name, autoload, autolen))
500 return Nullgv;
501 if (stash) {
502 if (SvTYPE(stash) < SVt_PVHV) {
503 packname = SvPV_nolen((SV*)stash);
504 stash = Nullhv;
505 }
506 else {
507 packname = HvNAME(stash);
508 }
509 }
510 if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE)))
511 return Nullgv;
512 cv = GvCV(gv);
513
514 if (!(CvROOT(cv) || CvXSUB(cv)))
515 return Nullgv;
516
517 /*
518 * Inheriting AUTOLOAD for non-methods works ... for now.
519 */
520 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && !method &&
521 (GvCVGEN(gv) || GvSTASH(gv) != stash))
522 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
523 "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
524 packname, (int)len, name);
525
526#ifndef USE_5005THREADS
527 if (CvXSUB(cv)) {
528 /* rather than lookup/init $AUTOLOAD here
529 * only to have the XSUB do another lookup for $AUTOLOAD
530 * and split that value on the last '::',
531 * pass along the same data via some unused fields in the CV
532 */
533 CvSTASH(cv) = stash;
534 SvPV_set(cv, (char *)name); /* cast to lose constness warning */
535 SvCUR_set(cv, len);
536 return gv;
537 }
538#endif
539
540 /*
541 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
542 * The subroutine's original name may not be "AUTOLOAD", so we don't
543 * use that, but for lack of anything better we will use the sub's
544 * original package to look up $AUTOLOAD.
545 */
546 varstash = GvSTASH(CvGV(cv));
547 vargv = *(GV**)hv_fetch(varstash, autoload, autolen, TRUE);
548 ENTER;
549
550#ifdef USE_5005THREADS
551 sv_lock((SV *)varstash);
552#endif
553 if (!isGV(vargv))
554 gv_init(vargv, varstash, autoload, autolen, FALSE);
555 LEAVE;
556 varsv = GvSV(vargv);
557#ifdef USE_5005THREADS
558 sv_lock(varsv);
559#endif
560 sv_setpv(varsv, packname);
561 sv_catpvn(varsv, "::", 2);
562 sv_catpvn(varsv, name, len);
563 SvTAINTED_off(varsv);
564 return gv;
565}
566
567/* The "gv" parameter should be the glob known to Perl code as *!
568 * The scalar must already have been magicalized.
569 */
570STATIC void
571S_require_errno(pTHX_ GV *gv)
572{
573 HV* stash = gv_stashpvn("Errno",5,FALSE);
574
575 if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
576 dSP;
577 PUTBACK;
578 ENTER;
579 save_scalar(gv); /* keep the value of $! */
580 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
581 newSVpvn("Errno",5), Nullsv);
582 LEAVE;
583 SPAGAIN;
584 stash = gv_stashpvn("Errno",5,FALSE);
585 if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
586 Perl_croak(aTHX_ "Can't use %%! because Errno.pm is not available");
587 }
588}
589
590/*
591=for apidoc gv_stashpv
592
593Returns a pointer to the stash for a specified package. C<name> should
594be a valid UTF-8 string and must be null-terminated. If C<create> is set
595then the package will be created if it does not already exist. If C<create>
596is not set and the package does not exist then NULL is returned.
597
598=cut
599*/
600
601HV*
602Perl_gv_stashpv(pTHX_ const char *name, I32 create)
603{
604 return gv_stashpvn(name, strlen(name), create);
605}
606
607/*
608=for apidoc gv_stashpvn
609
610Returns a pointer to the stash for a specified package. C<name> should
611be a valid UTF-8 string. The C<namelen> parameter indicates the length of
612the C<name>, in bytes. If C<create> is set then the package will be
613created if it does not already exist. If C<create> is not set and the
614package does not exist then NULL is returned.
615
616=cut
617*/
618
619HV*
620Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 create)
621{
622 char smallbuf[256];
623 char *tmpbuf;
624 HV *stash;
625 GV *tmpgv;
626
627 if (namelen + 3 < sizeof smallbuf)
628 tmpbuf = smallbuf;
629 else
630 New(606, tmpbuf, namelen + 3, char);
631 Copy(name,tmpbuf,namelen,char);
632 tmpbuf[namelen++] = ':';
633 tmpbuf[namelen++] = ':';
634 tmpbuf[namelen] = '\0';
635 tmpgv = gv_fetchpv(tmpbuf, create, SVt_PVHV);
636 if (tmpbuf != smallbuf)
637 Safefree(tmpbuf);
638 if (!tmpgv)
639 return 0;
640 if (!GvHV(tmpgv))
641 GvHV(tmpgv) = newHV();
642 stash = GvHV(tmpgv);
643 if (!HvNAME(stash))
644 HvNAME(stash) = savepv(name);
645 return stash;
646}
647
648/*
649=for apidoc gv_stashsv
650
651Returns a pointer to the stash for a specified package, which must be a
652valid UTF-8 string. See C<gv_stashpv>.
653
654=cut
655*/
656
657HV*
658Perl_gv_stashsv(pTHX_ SV *sv, I32 create)
659{
660 register char *ptr;
661 STRLEN len;
662 ptr = SvPV(sv,len);
663 return gv_stashpvn(ptr, len, create);
664}
665
666
667GV *
668Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type)
669{
670 register const char *name = nambeg;
671 register GV *gv = 0;
672 GV**gvp;
673 I32 len;
674 register const char *namend;
675 HV *stash = 0;
676
677 if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
678 name++;
679
680 for (namend = name; *namend; namend++) {
681 if ((*namend == ':' && namend[1] == ':')
682 || (*namend == '\'' && namend[1]))
683 {
684 if (!stash)
685 stash = PL_defstash;
686 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
687 return Nullgv;
688
689 len = namend - name;
690 if (len > 0) {
691 char smallbuf[256];
692 char *tmpbuf;
693
694 if (len + 3 < sizeof (smallbuf))
695 tmpbuf = smallbuf;
696 else
697 New(601, tmpbuf, len+3, char);
698 Copy(name, tmpbuf, len, char);
699 tmpbuf[len++] = ':';
700 tmpbuf[len++] = ':';
701 tmpbuf[len] = '\0';
702 gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
703 gv = gvp ? *gvp : Nullgv;
704 if (gv && gv != (GV*)&PL_sv_undef) {
705 if (SvTYPE(gv) != SVt_PVGV)
706 gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
707 else
708 GvMULTI_on(gv);
709 }
710 if (tmpbuf != smallbuf)
711 Safefree(tmpbuf);
712 if (!gv || gv == (GV*)&PL_sv_undef)
713 return Nullgv;
714
715 if (!(stash = GvHV(gv)))
716 stash = GvHV(gv) = newHV();
717
718 if (!HvNAME(stash))
719 HvNAME(stash) = savepvn(nambeg, namend - nambeg);
720 }
721
722 if (*namend == ':')
723 namend++;
724 namend++;
725 name = namend;
726 if (!*name)
727 return gv ? gv : (GV*)*hv_fetch(PL_defstash, "main::", 6, TRUE);
728 }
729 }
730 len = namend - name;
731
732 /* No stash in name, so see how we can default */
733
734 if (!stash) {
735 if (isIDFIRST_lazy(name)) {
736 bool global = FALSE;
737
738 /* name is always \0 terminated, and initial \0 wouldn't return
739 true from isIDFIRST_lazy, so we know that name[1] is defined */
740 switch (name[1]) {
741 case '\0':
742 if (*name == '_')
743 global = TRUE;
744 break;
745 case 'N':
746 if (strEQ(name, "INC") || strEQ(name, "ENV"))
747 global = TRUE;
748 break;
749 case 'I':
750 if (strEQ(name, "SIG"))
751 global = TRUE;
752 break;
753 case 'T':
754 if (strEQ(name, "STDIN") || strEQ(name, "STDOUT") ||
755 strEQ(name, "STDERR"))
756 global = TRUE;
757 break;
758 case 'R':
759 if (strEQ(name, "ARGV") || strEQ(name, "ARGVOUT"))
760 global = TRUE;
761 break;
762 }
763
764 if (global)
765 stash = PL_defstash;
766 else if (IN_PERL_COMPILETIME) {
767 stash = PL_curstash;
768 if (add && (PL_hints & HINT_STRICT_VARS) &&
769 sv_type != SVt_PVCV &&
770 sv_type != SVt_PVGV &&
771 sv_type != SVt_PVFM &&
772 sv_type != SVt_PVIO &&
773 !(len == 1 && sv_type == SVt_PV &&
774 (*name == 'a' || *name == 'b')) )
775 {
776 gvp = (GV**)hv_fetch(stash,name,len,0);
777 if (!gvp ||
778 *gvp == (GV*)&PL_sv_undef ||
779 SvTYPE(*gvp) != SVt_PVGV)
780 {
781 stash = 0;
782 }
783 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
784 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
785 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
786 {
787 Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
788 sv_type == SVt_PVAV ? '@' :
789 sv_type == SVt_PVHV ? '%' : '$',
790 name);
791 if (GvCVu(*gvp))
792 Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
793 stash = 0;
794 }
795 }
796 }
797 else
798 stash = CopSTASH(PL_curcop);
799 }
800 else
801 stash = PL_defstash;
802 }
803
804 /* By this point we should have a stash and a name */
805
806 if (!stash) {
807 if (add) {
808 register SV *err = Perl_mess(aTHX_
809 "Global symbol \"%s%s\" requires explicit package name",
810 (sv_type == SVt_PV ? "$"
811 : sv_type == SVt_PVAV ? "@"
812 : sv_type == SVt_PVHV ? "%"
813 : ""), name);
814 if (USE_UTF8_IN_NAMES)
815 SvUTF8_on(err);
816 qerror(err);
817 stash = PL_nullstash;
818 }
819 else
820 return Nullgv;
821 }
822
823 if (!SvREFCNT(stash)) /* symbol table under destruction */
824 return Nullgv;
825
826 gvp = (GV**)hv_fetch(stash,name,len,add);
827 if (!gvp || *gvp == (GV*)&PL_sv_undef)
828 return Nullgv;
829 gv = *gvp;
830 if (SvTYPE(gv) == SVt_PVGV) {
831 if (add) {
832 GvMULTI_on(gv);
833 gv_init_sv(gv, sv_type);
834 if (*name=='!' && sv_type == SVt_PVHV && len==1)
835 require_errno(gv);
836 }
837 return gv;
838 } else if (add & GV_NOINIT) {
839 return gv;
840 }
841
842 /* Adding a new symbol */
843
844 if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
845 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
846 gv_init(gv, stash, name, len, add & GV_ADDMULTI);
847 gv_init_sv(gv, sv_type);
848
849 if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
850 : (PL_dowarn & G_WARN_ON ) ) )
851 GvMULTI_on(gv) ;
852
853 /* set up magic where warranted */
854 if (len > 1) {
855#ifndef EBCDIC
856 if (*name > 'V' ) {
857 /* Nothing else to do.
858 The compiler will probably turn the switch statement into a
859 branch table. Make sure we avoid even that small overhead for
860 the common case of lower case variable names. */
861 } else
862#endif
863 {
864 const char *name2 = name + 1;
865 switch (*name) {
866 case 'A':
867 if (strEQ(name2, "RGV")) {
868 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
869 }
870 break;
871 case 'E':
872 if (strnEQ(name2, "XPORT", 5))
873 GvMULTI_on(gv);
874 break;
875 case 'I':
876 if (strEQ(name2, "SA")) {
877 AV* av = GvAVn(gv);
878 GvMULTI_on(gv);
879 sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
880 /* NOTE: No support for tied ISA */
881 if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
882 && AvFILLp(av) == -1)
883 {
884 char *pname;
885 av_push(av, newSVpvn(pname = "NDBM_File",9));
886 gv_stashpvn(pname, 9, TRUE);
887 av_push(av, newSVpvn(pname = "DB_File",7));
888 gv_stashpvn(pname, 7, TRUE);
889 av_push(av, newSVpvn(pname = "GDBM_File",9));
890 gv_stashpvn(pname, 9, TRUE);
891 av_push(av, newSVpvn(pname = "SDBM_File",9));
892 gv_stashpvn(pname, 9, TRUE);
893 av_push(av, newSVpvn(pname = "ODBM_File",9));
894 gv_stashpvn(pname, 9, TRUE);
895 }
896 }
897 break;
898 case 'O':
899 if (strEQ(name2, "VERLOAD")) {
900 HV* hv = GvHVn(gv);
901 GvMULTI_on(gv);
902 hv_magic(hv, Nullgv, PERL_MAGIC_overload);
903 }
904 break;
905 case 'S':
906 if (strEQ(name2, "IG")) {
907 HV *hv;
908 I32 i;
909 if (!PL_psig_ptr) {
910 Newz(73, PL_psig_ptr, SIG_SIZE, SV*);
911 Newz(73, PL_psig_name, SIG_SIZE, SV*);
912 Newz(73, PL_psig_pend, SIG_SIZE, int);
913 }
914 GvMULTI_on(gv);
915 hv = GvHVn(gv);
916 hv_magic(hv, Nullgv, PERL_MAGIC_sig);
917 for (i = 1; i < SIG_SIZE; i++) {
918 SV ** init;
919 init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
920 if (init)
921 sv_setsv(*init, &PL_sv_undef);
922 PL_psig_ptr[i] = 0;
923 PL_psig_name[i] = 0;
924 PL_psig_pend[i] = 0;
925 }
926 }
927 break;
928 case 'V':
929 if (strEQ(name2, "ERSION"))
930 GvMULTI_on(gv);
931 break;
932 case '\005': /* $^ENCODING */
933 if (strEQ(name2, "NCODING"))
934 goto magicalize;
935 break;
936 case '\017': /* $^OPEN */
937 if (strEQ(name2, "PEN"))
938 goto magicalize;
939 break;
940 case '\024': /* ${^TAINT} */
941 if (strEQ(name2, "AINT"))
942 goto ro_magicalize;
943 break;
944 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
945 if (strEQ(name2, "NICODE"))
946 goto ro_magicalize;
947 if (strEQ(name2, "TF8LOCALE"))
948 goto ro_magicalize;
949 break;
950 case '\027': /* $^WARNING_BITS */
951 if (strEQ(name2, "ARNING_BITS"))
952 goto magicalize;
953 break;
954 case '1':
955 case '2':
956 case '3':
957 case '4':
958 case '5':
959 case '6':
960 case '7':
961 case '8':
962 case '9':
963 {
964 /* ensures variable is only digits */
965 /* ${"1foo"} fails this test (and is thus writeable) */
966 /* added by japhy, but borrowed from is_gv_magical */
967 const char *end = name + len;
968 while (--end > name) {
969 if (!isDIGIT(*end)) return gv;
970 }
971 goto ro_magicalize;
972 }
973 }
974 }
975 } else {
976 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
977 be case '\0' in this switch statement (ie a default case) */
978 switch (*name) {
979 case '&':
980 case '`':
981 case '\'':
982 if (
983 sv_type == SVt_PVAV ||
984 sv_type == SVt_PVHV ||
985 sv_type == SVt_PVCV ||
986 sv_type == SVt_PVFM ||
987 sv_type == SVt_PVIO
988 ) { break; }
989 PL_sawampersand = TRUE;
990 goto ro_magicalize;
991
992 case ':':
993 sv_setpv(GvSV(gv),PL_chopset);
994 goto magicalize;
995
996 case '?':
997#ifdef COMPLEX_STATUS
998 (void)SvUPGRADE(GvSV(gv), SVt_PVLV);
999#endif
1000 goto magicalize;
1001
1002 case '!':
1003
1004 /* If %! has been used, automatically load Errno.pm.
1005 The require will itself set errno, so in order to
1006 preserve its value we have to set up the magic
1007 now (rather than going to magicalize)
1008 */
1009
1010 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1011
1012 if (sv_type == SVt_PVHV)
1013 require_errno(gv);
1014
1015 break;
1016 case '-':
1017 {
1018 AV* av = GvAVn(gv);
1019 sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
1020 SvREADONLY_on(av);
1021 goto magicalize;
1022 }
1023 case '#':
1024 case '*':
1025 if (sv_type == SVt_PV && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
1026 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1027 "Use of $%s is deprecated", name);
1028 goto magicalize;
1029 case '|':
1030 sv_setiv(GvSV(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
1031 goto magicalize;
1032
1033 case '+':
1034 {
1035 AV* av = GvAVn(gv);
1036 sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
1037 SvREADONLY_on(av);
1038 /* FALL THROUGH */
1039 }
1040 case '\023': /* $^S */
1041 case '1':
1042 case '2':
1043 case '3':
1044 case '4':
1045 case '5':
1046 case '6':
1047 case '7':
1048 case '8':
1049 case '9':
1050 ro_magicalize:
1051 SvREADONLY_on(GvSV(gv));
1052 /* FALL THROUGH */
1053 case '[':
1054 case '^':
1055 case '~':
1056 case '=':
1057 case '%':
1058 case '.':
1059 case '(':
1060 case ')':
1061 case '<':
1062 case '>':
1063 case ',':
1064 case '\\':
1065 case '/':
1066 case '\001': /* $^A */
1067 case '\003': /* $^C */
1068 case '\004': /* $^D */
1069 case '\005': /* $^E */
1070 case '\006': /* $^F */
1071 case '\010': /* $^H */
1072 case '\011': /* $^I, NOT \t in EBCDIC */
1073 case '\016': /* $^N */
1074 case '\017': /* $^O */
1075 case '\020': /* $^P */
1076 case '\024': /* $^T */
1077 case '\027': /* $^W */
1078 magicalize:
1079 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1080 break;
1081
1082 case '\014': /* $^L */
1083 sv_setpvn(GvSV(gv),"\f",1);
1084 PL_formfeed = GvSV(gv);
1085 break;
1086 case ';':
1087 sv_setpvn(GvSV(gv),"\034",1);
1088 break;
1089 case ']':
1090 {
1091 SV *sv = GvSV(gv);
1092 (void)SvUPGRADE(sv, SVt_PVNV);
1093 Perl_sv_setpvf(aTHX_ sv,
1094#if defined(PERL_SUBVERSION) && (PERL_SUBVERSION > 0)
1095 "%8.6"
1096#else
1097 "%5.3"
1098#endif
1099 NVff,
1100 SvNVX(PL_patchlevel));
1101 SvNVX(sv) = SvNVX(PL_patchlevel);
1102 SvNOK_on(sv);
1103 SvREADONLY_on(sv);
1104 }
1105 break;
1106 case '\026': /* $^V */
1107 {
1108 SV * const sv = GvSV(gv);
1109 GvSV(gv) = SvREFCNT_inc(PL_patchlevel);
1110 SvREFCNT_dec(sv);
1111 }
1112 break;
1113 }
1114 }
1115 return gv;
1116}
1117
1118void
1119Perl_gv_fullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1120{
1121 const char *name;
1122 const HV * const hv = GvSTASH(gv);
1123 if (!hv) {
1124 SvOK_off(sv);
1125 return;
1126 }
1127 sv_setpv(sv, prefix ? prefix : "");
1128
1129 name = HvNAME(hv);
1130 if (!name)
1131 name = "__ANON__";
1132
1133 if (keepmain || strNE(name, "main")) {
1134 sv_catpv(sv,name);
1135 sv_catpvn(sv,"::", 2);
1136 }
1137 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1138}
1139
1140void
1141Perl_gv_fullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1142{
1143 gv_fullname4(sv, gv, prefix, TRUE);
1144}
1145
1146void
1147Perl_gv_efullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1148{
1149 GV *egv = GvEGV(gv);
1150 if (!egv)
1151 egv = gv;
1152 gv_fullname4(sv, egv, prefix, keepmain);
1153}
1154
1155void
1156Perl_gv_efullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1157{
1158 gv_efullname4(sv, gv, prefix, TRUE);
1159}
1160
1161/* compatibility with versions <= 5.003. */
1162void
1163Perl_gv_fullname(pTHX_ SV *sv, GV *gv)
1164{
1165 gv_fullname3(sv, gv, sv == (const SV*)gv ? "*" : "");
1166}
1167
1168/* compatibility with versions <= 5.003. */
1169void
1170Perl_gv_efullname(pTHX_ SV *sv, GV *gv)
1171{
1172 gv_efullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1173}
1174
1175IO *
1176Perl_newIO(pTHX)
1177{
1178 IO *io;
1179 GV *iogv;
1180
1181 io = (IO*)NEWSV(0,0);
1182 sv_upgrade((SV *)io,SVt_PVIO);
1183 SvREFCNT(io) = 1;
1184 SvOBJECT_on(io);
1185 /* Clear the stashcache because a new IO could overrule a
1186 package name */
1187 hv_clear(PL_stashcache);
1188 iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
1189 /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1190 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1191 iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
1192 SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
1193 return io;
1194}
1195
1196void
1197Perl_gv_check(pTHX_ HV *stash)
1198{
1199 register HE *entry;
1200 register I32 i;
1201 register GV *gv;
1202 HV *hv;
1203
1204 if (!HvARRAY(stash))
1205 return;
1206 for (i = 0; i <= (I32) HvMAX(stash); i++) {
1207 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1208 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1209 (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
1210 {
1211 if (hv != PL_defstash && hv != stash)
1212 gv_check(hv); /* nested package */
1213 }
1214 else if (isALPHA(*HeKEY(entry))) {
1215 char *file;
1216 gv = (GV*)HeVAL(entry);
1217 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1218 continue;
1219 file = GvFILE(gv);
1220 /* performance hack: if filename is absolute and it's a standard
1221 * module, don't bother warning */
1222 if (file
1223 && PERL_FILE_IS_ABSOLUTE(file)
1224#ifdef MACOS_TRADITIONAL
1225 && (instr(file, ":lib:")
1226#else
1227 && (instr(file, "/lib/")
1228#endif
1229 || instr(file, ".pm")))
1230 {
1231 continue;
1232 }
1233 CopLINE_set(PL_curcop, GvLINE(gv));
1234#ifdef USE_ITHREADS
1235 CopFILE(PL_curcop) = file; /* set for warning */
1236#else
1237 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1238#endif
1239 Perl_warner(aTHX_ packWARN(WARN_ONCE),
1240 "Name \"%s::%s\" used only once: possible typo",
1241 HvNAME(stash), GvNAME(gv));
1242 }
1243 }
1244 }
1245}
1246
1247GV *
1248Perl_newGVgen(pTHX_ char *pack)
1249{
1250 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1251 TRUE, SVt_PVGV);
1252}
1253
1254/* hopefully this is only called on local symbol table entries */
1255
1256GP*
1257Perl_gp_ref(pTHX_ GP *gp)
1258{
1259 if (!gp)
1260 return (GP*)NULL;
1261 gp->gp_refcnt++;
1262 if (gp->gp_cv) {
1263 if (gp->gp_cvgen) {
1264 /* multi-named GPs cannot be used for method cache */
1265 SvREFCNT_dec(gp->gp_cv);
1266 gp->gp_cv = Nullcv;
1267 gp->gp_cvgen = 0;
1268 }
1269 else {
1270 /* Adding a new name to a subroutine invalidates method cache */
1271 PL_sub_generation++;
1272 }
1273 }
1274 return gp;
1275}
1276
1277void
1278Perl_gp_free(pTHX_ GV *gv)
1279{
1280 GP* gp;
1281
1282 if (!gv || !(gp = GvGP(gv)))
1283 return;
1284 if (gp->gp_refcnt == 0) {
1285 if (ckWARN_d(WARN_INTERNAL))
1286 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1287 "Attempt to free unreferenced glob pointers"
1288 pTHX__FORMAT pTHX__VALUE);
1289 return;
1290 }
1291 if (gp->gp_cv) {
1292 /* Deleting the name of a subroutine invalidates method cache */
1293 PL_sub_generation++;
1294 }
1295 if (--gp->gp_refcnt > 0) {
1296 if (gp->gp_egv == gv)
1297 gp->gp_egv = 0;
1298 return;
1299 }
1300
1301 if (gp->gp_sv) SvREFCNT_dec(gp->gp_sv);
1302 if (gp->gp_av) SvREFCNT_dec(gp->gp_av);
1303 if (gp->gp_hv) {
1304 if (PL_stashcache && HvNAME(gp->gp_hv))
1305 hv_delete(PL_stashcache,
1306 HvNAME(gp->gp_hv), strlen(HvNAME(gp->gp_hv)),
1307 G_DISCARD);
1308 SvREFCNT_dec(gp->gp_hv);
1309 }
1310 if (gp->gp_io) SvREFCNT_dec(gp->gp_io);
1311 if (gp->gp_cv) SvREFCNT_dec(gp->gp_cv);
1312 if (gp->gp_form) SvREFCNT_dec(gp->gp_form);
1313
1314 Safefree(gp);
1315 GvGP(gv) = 0;
1316}
1317
1318int
1319Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1320{
1321 AMT *amtp = (AMT*)mg->mg_ptr;
1322 if (amtp && AMT_AMAGIC(amtp)) {
1323 int i;
1324 for (i = 1; i < NofAMmeth; i++) {
1325 CV *cv = amtp->table[i];
1326 if (cv != Nullcv) {
1327 SvREFCNT_dec((SV *) cv);
1328 amtp->table[i] = Nullcv;
1329 }
1330 }
1331 }
1332 return 0;
1333}
1334
1335/* Updates and caches the CV's */
1336
1337bool
1338Perl_Gv_AMupdate(pTHX_ HV *stash)
1339{
1340 GV* gv;
1341 CV* cv;
1342 MAGIC* mg=mg_find((SV*)stash, PERL_MAGIC_overload_table);
1343 AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1344 AMT amt;
1345
1346 if (mg && amtp->was_ok_am == PL_amagic_generation
1347 && amtp->was_ok_sub == PL_sub_generation)
1348 return (bool)AMT_OVERLOADED(amtp);
1349 sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1350
1351 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
1352
1353 Zero(&amt,1,AMT);
1354 amt.was_ok_am = PL_amagic_generation;
1355 amt.was_ok_sub = PL_sub_generation;
1356 amt.fallback = AMGfallNO;
1357 amt.flags = 0;
1358
1359 {
1360 int filled = 0, have_ovl = 0;
1361 int i, lim = 1;
1362 SV* sv = NULL;
1363
1364 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1365
1366 /* Try to find via inheritance. */
1367 gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1368 if (gv)
1369 sv = GvSV(gv);
1370
1371 if (!gv)
1372 lim = DESTROY_amg; /* Skip overloading entries. */
1373 else if (SvTRUE(sv))
1374 amt.fallback=AMGfallYES;
1375 else if (SvOK(sv))
1376 amt.fallback=AMGfallNEVER;
1377
1378 for (i = 1; i < lim; i++)
1379 amt.table[i] = Nullcv;
1380 for (; i < NofAMmeth; i++) {
1381 char *cooky = (char*)PL_AMG_names[i];
1382 /* Human-readable form, for debugging: */
1383 char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1384 STRLEN l = strlen(cooky);
1385
1386 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of `%s' in package `%.256s'\n",
1387 cp, HvNAME(stash)) );
1388 /* don't fill the cache while looking up!
1389 Creation of inheritance stubs in intermediate packages may
1390 conflict with the logic of runtime method substitution.
1391 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1392 then we could have created stubs for "(+0" in A and C too.
1393 But if B overloads "bool", we may want to use it for
1394 numifying instead of C's "+0". */
1395 if (i >= DESTROY_amg)
1396 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1397 else /* Autoload taken care of below */
1398 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1399 cv = 0;
1400 if (gv && (cv = GvCV(gv))) {
1401 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1402 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
1403 /* This is a hack to support autoloading..., while
1404 knowing *which* methods were declared as overloaded. */
1405 /* GvSV contains the name of the method. */
1406 GV *ngv = Nullgv;
1407
1408 DEBUG_o( Perl_deb(aTHX_ "Resolving method `%"SVf256\
1409 "' for overloaded `%s' in package `%.256s'\n",
1410 GvSV(gv), cp, HvNAME(stash)) );
1411 if (!SvPOK(GvSV(gv))
1412 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
1413 FALSE)))
1414 {
1415 /* Can be an import stub (created by `can'). */
1416 SV *gvsv = GvSV(gv);
1417 const char *name = SvPOK(gvsv) ? SvPVX(gvsv) : "???";
1418 Perl_croak(aTHX_ "%s method `%.256s' overloading `%s' "\
1419 "in package `%.256s'",
1420 (GvCVGEN(gv) ? "Stub found while resolving"
1421 : "Can't resolve"),
1422 name, cp, HvNAME(stash));
1423 }
1424 cv = GvCV(gv = ngv);
1425 }
1426 DEBUG_o( Perl_deb(aTHX_ "Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
1427 cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
1428 GvNAME(CvGV(cv))) );
1429 filled = 1;
1430 if (i < DESTROY_amg)
1431 have_ovl = 1;
1432 } else if (gv) { /* Autoloaded... */
1433 cv = (CV*)gv;
1434 filled = 1;
1435 }
1436 amt.table[i]=(CV*)SvREFCNT_inc(cv);
1437 }
1438 if (filled) {
1439 AMT_AMAGIC_on(&amt);
1440 if (have_ovl)
1441 AMT_OVERLOADED_on(&amt);
1442 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1443 (char*)&amt, sizeof(AMT));
1444 return have_ovl;
1445 }
1446 }
1447 /* Here we have no table: */
1448 /* no_table: */
1449 AMT_AMAGIC_off(&amt);
1450 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1451 (char*)&amt, sizeof(AMTS));
1452 return FALSE;
1453}
1454
1455
1456CV*
1457Perl_gv_handler(pTHX_ HV *stash, I32 id)
1458{
1459 MAGIC *mg;
1460 AMT *amtp;
1461 CV *ret;
1462
1463 if (!stash || !HvNAME(stash))
1464 return Nullcv;
1465 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1466 if (!mg) {
1467 do_update:
1468 Gv_AMupdate(stash);
1469 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1470 }
1471 amtp = (AMT*)mg->mg_ptr;
1472 if ( amtp->was_ok_am != PL_amagic_generation
1473 || amtp->was_ok_sub != PL_sub_generation )
1474 goto do_update;
1475 if (AMT_AMAGIC(amtp)) {
1476 ret = amtp->table[id];
1477 if (ret && isGV(ret)) { /* Autoloading stab */
1478 /* Passing it through may have resulted in a warning
1479 "Inherited AUTOLOAD for a non-method deprecated", since
1480 our caller is going through a function call, not a method call.
1481 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1482 GV *gv = gv_fetchmethod(stash, (char*)PL_AMG_names[id]);
1483
1484 if (gv && GvCV(gv))
1485 return GvCV(gv);
1486 }
1487 return ret;
1488 }
1489
1490 return Nullcv;
1491}
1492
1493
1494SV*
1495Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1496{
1497 MAGIC *mg;
1498 CV *cv=NULL;
1499 CV **cvp=NULL, **ocvp=NULL;
1500 AMT *amtp=NULL, *oamtp=NULL;
1501 int off=0, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
1502 int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
1503#ifdef DEBUGGING
1504 int fl=0;
1505#endif
1506 HV* stash=NULL;
1507 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1508 && (stash = SvSTASH(SvRV(left)))
1509 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1510 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1511 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1512 : (CV **) NULL))
1513 && ((cv = cvp[off=method+assignshift])
1514 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1515 * usual method */
1516 (
1517#ifdef DEBUGGING
1518 fl = 1,
1519#endif
1520 cv = cvp[off=method])))) {
1521 lr = -1; /* Call method for left argument */
1522 } else {
1523 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1524 int logic;
1525
1526 /* look for substituted methods */
1527 /* In all the covered cases we should be called with assign==0. */
1528 switch (method) {
1529 case inc_amg:
1530 force_cpy = 1;
1531 if ((cv = cvp[off=add_ass_amg])
1532 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1533 right = &PL_sv_yes; lr = -1; assign = 1;
1534 }
1535 break;
1536 case dec_amg:
1537 force_cpy = 1;
1538 if ((cv = cvp[off = subtr_ass_amg])
1539 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1540 right = &PL_sv_yes; lr = -1; assign = 1;
1541 }
1542 break;
1543 case bool__amg:
1544 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1545 break;
1546 case numer_amg:
1547 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1548 break;
1549 case string_amg:
1550 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1551 break;
1552 case not_amg:
1553 (void)((cv = cvp[off=bool__amg])
1554 || (cv = cvp[off=numer_amg])
1555 || (cv = cvp[off=string_amg]));
1556 postpr = 1;
1557 break;
1558 case copy_amg:
1559 {
1560 /*
1561 * SV* ref causes confusion with the interpreter variable of
1562 * the same name
1563 */
1564 SV* tmpRef=SvRV(left);
1565 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1566 /*
1567 * Just to be extra cautious. Maybe in some
1568 * additional cases sv_setsv is safe, too.
1569 */
1570 SV* newref = newSVsv(tmpRef);
1571 SvOBJECT_on(newref);
1572 SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
1573 return newref;
1574 }
1575 }
1576 break;
1577 case abs_amg:
1578 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1579 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1580 SV* nullsv=sv_2mortal(newSViv(0));
1581 if (off1==lt_amg) {
1582 SV* lessp = amagic_call(left,nullsv,
1583 lt_amg,AMGf_noright);
1584 logic = SvTRUE(lessp);
1585 } else {
1586 SV* lessp = amagic_call(left,nullsv,
1587 ncmp_amg,AMGf_noright);
1588 logic = (SvNV(lessp) < 0);
1589 }
1590 if (logic) {
1591 if (off==subtr_amg) {
1592 right = left;
1593 left = nullsv;
1594 lr = 1;
1595 }
1596 } else {
1597 return left;
1598 }
1599 }
1600 break;
1601 case neg_amg:
1602 if ((cv = cvp[off=subtr_amg])) {
1603 right = left;
1604 left = sv_2mortal(newSViv(0));
1605 lr = 1;
1606 }
1607 break;
1608 case int_amg:
1609 case iter_amg: /* XXXX Eventually should do to_gv. */
1610 /* FAIL safe */
1611 return NULL; /* Delegate operation to standard mechanisms. */
1612 break;
1613 case to_sv_amg:
1614 case to_av_amg:
1615 case to_hv_amg:
1616 case to_gv_amg:
1617 case to_cv_amg:
1618 /* FAIL safe */
1619 return left; /* Delegate operation to standard mechanisms. */
1620 break;
1621 default:
1622 goto not_found;
1623 }
1624 if (!cv) goto not_found;
1625 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1626 && (stash = SvSTASH(SvRV(right)))
1627 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1628 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1629 ? (amtp = (AMT*)mg->mg_ptr)->table
1630 : (CV **) NULL))
1631 && (cv = cvp[off=method])) { /* Method for right
1632 * argument found */
1633 lr=1;
1634 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1635 && (cvp=ocvp) && (lr = -1))
1636 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1637 && !(flags & AMGf_unary)) {
1638 /* We look for substitution for
1639 * comparison operations and
1640 * concatenation */
1641 if (method==concat_amg || method==concat_ass_amg
1642 || method==repeat_amg || method==repeat_ass_amg) {
1643 return NULL; /* Delegate operation to string conversion */
1644 }
1645 off = -1;
1646 switch (method) {
1647 case lt_amg:
1648 case le_amg:
1649 case gt_amg:
1650 case ge_amg:
1651 case eq_amg:
1652 case ne_amg:
1653 postpr = 1; off=ncmp_amg; break;
1654 case slt_amg:
1655 case sle_amg:
1656 case sgt_amg:
1657 case sge_amg:
1658 case seq_amg:
1659 case sne_amg:
1660 postpr = 1; off=scmp_amg; break;
1661 }
1662 if (off != -1) cv = cvp[off];
1663 if (!cv) {
1664 goto not_found;
1665 }
1666 } else {
1667 not_found: /* No method found, either report or croak */
1668 switch (method) {
1669 case to_sv_amg:
1670 case to_av_amg:
1671 case to_hv_amg:
1672 case to_gv_amg:
1673 case to_cv_amg:
1674 /* FAIL safe */
1675 return left; /* Delegate operation to standard mechanisms. */
1676 break;
1677 }
1678 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1679 notfound = 1; lr = -1;
1680 } else if (cvp && (cv=cvp[nomethod_amg])) {
1681 notfound = 1; lr = 1;
1682 } else {
1683 SV *msg;
1684 if (off==-1) off=method;
1685 msg = sv_2mortal(Perl_newSVpvf(aTHX_
1686 "Operation `%s': no method found,%sargument %s%s%s%s",
1687 AMG_id2name(method + assignshift),
1688 (flags & AMGf_unary ? " " : "\n\tleft "),
1689 SvAMAGIC(left)?
1690 "in overloaded package ":
1691 "has no overloaded magic",
1692 SvAMAGIC(left)?
1693 HvNAME(SvSTASH(SvRV(left))):
1694 "",
1695 SvAMAGIC(right)?
1696 ",\n\tright argument in overloaded package ":
1697 (flags & AMGf_unary
1698 ? ""
1699 : ",\n\tright argument has no overloaded magic"),
1700 SvAMAGIC(right)?
1701 HvNAME(SvSTASH(SvRV(right))):
1702 ""));
1703 if (amtp && amtp->fallback >= AMGfallYES) {
1704 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX(msg)) );
1705 } else {
1706 Perl_croak(aTHX_ "%"SVf, msg);
1707 }
1708 return NULL;
1709 }
1710 force_cpy = force_cpy || assign;
1711 }
1712 }
1713#ifdef DEBUGGING
1714 if (!notfound) {
1715 DEBUG_o(Perl_deb(aTHX_
1716 "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1717 AMG_id2name(off),
1718 method+assignshift==off? "" :
1719 " (initially `",
1720 method+assignshift==off? "" :
1721 AMG_id2name(method+assignshift),
1722 method+assignshift==off? "" : "')",
1723 flags & AMGf_unary? "" :
1724 lr==1 ? " for right argument": " for left argument",
1725 flags & AMGf_unary? " for argument" : "",
1726 stash ? HvNAME(stash) : "null",
1727 fl? ",\n\tassignment variant used": "") );
1728 }
1729#endif
1730 /* Since we use shallow copy during assignment, we need
1731 * to dublicate the contents, probably calling user-supplied
1732 * version of copy operator
1733 */
1734 /* We need to copy in following cases:
1735 * a) Assignment form was called.
1736 * assignshift==1, assign==T, method + 1 == off
1737 * b) Increment or decrement, called directly.
1738 * assignshift==0, assign==0, method + 0 == off
1739 * c) Increment or decrement, translated to assignment add/subtr.
1740 * assignshift==0, assign==T,
1741 * force_cpy == T
1742 * d) Increment or decrement, translated to nomethod.
1743 * assignshift==0, assign==0,
1744 * force_cpy == T
1745 * e) Assignment form translated to nomethod.
1746 * assignshift==1, assign==T, method + 1 != off
1747 * force_cpy == T
1748 */
1749 /* off is method, method+assignshift, or a result of opcode substitution.
1750 * In the latter case assignshift==0, so only notfound case is important.
1751 */
1752 if (( (method + assignshift == off)
1753 && (assign || (method == inc_amg) || (method == dec_amg)))
1754 || force_cpy)
1755 RvDEEPCP(left);
1756 {
1757 dSP;
1758 BINOP myop;
1759 SV* res;
1760 bool oldcatch = CATCH_GET;
1761
1762 CATCH_SET(TRUE);
1763 Zero(&myop, 1, BINOP);
1764 myop.op_last = (OP *) &myop;
1765 myop.op_next = Nullop;
1766 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1767
1768 PUSHSTACKi(PERLSI_OVERLOAD);
1769 ENTER;
1770 SAVEOP();
1771 PL_op = (OP *) &myop;
1772 if (PERLDB_SUB && PL_curstash != PL_debstash)
1773 PL_op->op_private |= OPpENTERSUB_DB;
1774 PUTBACK;
1775 pp_pushmark();
1776
1777 EXTEND(SP, notfound + 5);
1778 PUSHs(lr>0? right: left);
1779 PUSHs(lr>0? left: right);
1780 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1781 if (notfound) {
1782 PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1783 }
1784 PUSHs((SV*)cv);
1785 PUTBACK;
1786
1787 if ((PL_op = Perl_pp_entersub(aTHX)))
1788 CALLRUNOPS(aTHX);
1789 LEAVE;
1790 SPAGAIN;
1791
1792 res=POPs;
1793 PUTBACK;
1794 POPSTACK;
1795 CATCH_SET(oldcatch);
1796
1797 if (postpr) {
1798 int ans=0;
1799 switch (method) {
1800 case le_amg:
1801 case sle_amg:
1802 ans=SvIV(res)<=0; break;
1803 case lt_amg:
1804 case slt_amg:
1805 ans=SvIV(res)<0; break;
1806 case ge_amg:
1807 case sge_amg:
1808 ans=SvIV(res)>=0; break;
1809 case gt_amg:
1810 case sgt_amg:
1811 ans=SvIV(res)>0; break;
1812 case eq_amg:
1813 case seq_amg:
1814 ans=SvIV(res)==0; break;
1815 case ne_amg:
1816 case sne_amg:
1817 ans=SvIV(res)!=0; break;
1818 case inc_amg:
1819 case dec_amg:
1820 SvSetSV(left,res); return left;
1821 case not_amg:
1822 ans=!SvTRUE(res); break;
1823 }
1824 return boolSV(ans);
1825 } else if (method==copy_amg) {
1826 if (!SvROK(res)) {
1827 Perl_croak(aTHX_ "Copy method did not return a reference");
1828 }
1829 return SvREFCNT_inc(SvRV(res));
1830 } else {
1831 return res;
1832 }
1833 }
1834}
1835
1836/*
1837=for apidoc is_gv_magical
1838
1839Returns C<TRUE> if given the name of a magical GV.
1840
1841Currently only useful internally when determining if a GV should be
1842created even in rvalue contexts.
1843
1844C<flags> is not used at present but available for future extension to
1845allow selecting particular classes of magical variable.
1846
1847Currently assumes that C<name> is NUL terminated (as well as len being valid).
1848This assumption is met by all callers within the perl core, which all pass
1849pointers returned by SvPV.
1850
1851=cut
1852*/
1853bool
1854Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags)
1855{
1856 if (len > 1) {
1857 const char *name1 = name + 1;
1858 switch (*name) {
1859 case 'I':
1860 if (len == 3 && name1[1] == 'S' && name[2] == 'A')
1861 goto yes;
1862 break;
1863 case 'O':
1864 if (len == 8 && strEQ(name1, "VERLOAD"))
1865 goto yes;
1866 break;
1867 case 'S':
1868 if (len == 3 && name[1] == 'I' && name[2] == 'G')
1869 goto yes;
1870 break;
1871 /* Using ${^...} variables is likely to be sufficiently rare that
1872 it seems sensible to avoid the space hit of also checking the
1873 length. */
1874 case '\017': /* ${^OPEN} */
1875 if (strEQ(name1, "PEN"))
1876 goto yes;
1877 break;
1878 case '\024': /* ${^TAINT} */
1879 if (strEQ(name1, "AINT"))
1880 goto yes;
1881 break;
1882 case '\025': /* ${^UNICODE} */
1883 if (strEQ(name1, "NICODE"))
1884 goto yes;
1885 if (strEQ(name1, "TF8LOCALE"))
1886 goto yes;
1887 break;
1888 case '\027': /* ${^WARNING_BITS} */
1889 if (strEQ(name1, "ARNING_BITS"))
1890 goto yes;
1891 break;
1892 case '1':
1893 case '2':
1894 case '3':
1895 case '4':
1896 case '5':
1897 case '6':
1898 case '7':
1899 case '8':
1900 case '9':
1901 {
1902 char *end = name + len;
1903 while (--end > name) {
1904 if (!isDIGIT(*end))
1905 return FALSE;
1906 }
1907 goto yes;
1908 }
1909 }
1910 } else {
1911 /* Because we're already assuming that name is NUL terminated
1912 below, we can treat an empty name as "\0" */
1913 switch (*name) {
1914 case '&':
1915 case '`':
1916 case '\'':
1917 case ':':
1918 case '?':
1919 case '!':
1920 case '-':
1921 case '*':
1922 case '#':
1923 case '[':
1924 case '^':
1925 case '~':
1926 case '=':
1927 case '%':
1928 case '.':
1929 case '(':
1930 case ')':
1931 case '<':
1932 case '>':
1933 case ',':
1934 case '\\':
1935 case '/':
1936 case '|':
1937 case '+':
1938 case ';':
1939 case ']':
1940 case '\001': /* $^A */
1941 case '\003': /* $^C */
1942 case '\004': /* $^D */
1943 case '\005': /* $^E */
1944 case '\006': /* $^F */
1945 case '\010': /* $^H */
1946 case '\011': /* $^I, NOT \t in EBCDIC */
1947 case '\014': /* $^L */
1948 case '\016': /* $^N */
1949 case '\017': /* $^O */
1950 case '\020': /* $^P */
1951 case '\023': /* $^S */
1952 case '\024': /* $^T */
1953 case '\026': /* $^V */
1954 case '\027': /* $^W */
1955 case '1':
1956 case '2':
1957 case '3':
1958 case '4':
1959 case '5':
1960 case '6':
1961 case '7':
1962 case '8':
1963 case '9':
1964 yes:
1965 return TRUE;
1966 default:
1967 break;
1968 }
1969 }
1970 return FALSE;
1971}