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