Lines Matching refs:sv

61 #define newRV_noinc(sv)		((Sv = newRV(sv)), --SvREFCNT(SvRV(Sv)), Sv)
266 #define SvUTF8(sv) 0
954 * i should be true iff sv is immortal (ie PL_sv_yes, PL_sv_no or PL_sv_undef)
1013 static int store(pTHX_ stcxt_t *cxt, SV *sv);
1020 static int store_ref(pTHX_ stcxt_t *cxt, SV *sv);
1021 static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv);
1024 static int store_tied(pTHX_ stcxt_t *cxt, SV *sv);
1025 static int store_tied_item(pTHX_ stcxt_t *cxt, SV *sv);
1027 static int store_other(pTHX_ stcxt_t *cxt, SV *sv);
1028 static int store_blessed(pTHX_ stcxt_t *cxt, SV *sv, int type, HV *pkg);
1030 static int (*sv_store[])(pTHX_ stcxt_t *cxt, SV *sv) = {
1033 (int (*)(pTHX_ stcxt_t *cxt, SV *sv)) store_array, /* svis_ARRAY */
1034 (int (*)(pTHX_ stcxt_t *cxt, SV *sv)) store_hash, /* svis_HASH */
1037 (int (*)(pTHX_ stcxt_t *cxt, SV *sv)) store_code, /* svis_CODE */
1579 SV *sv;
1588 sv = newRV((SV*) GvCV(gv));
1589 TRACEME(("%s->%s: 0x%"UVxf, HvNAME(pkg), method, PTR2UV(sv)));
1591 sv = newSVsv(&PL_sv_undef);
1600 (void) hv_store(cache, HvNAME(pkg), strlen(HvNAME(pkg)), sv, 0);
1602 return SvOK(sv) ? sv : (SV *) 0;
1649 SV *sv;
1663 sv = *svh;
1664 if (!SvOK(sv)) {
1669 HvNAME(pkg), method, PTR2UV(sv)));
1670 return sv;
1694 SV *sv = 0;
1724 sv = POPs;
1725 SvREFCNT_inc(sv); /* We're returning it, must stay alive! */
1732 return sv;
1768 SV *sv = POPs;
1769 av_store(av, i, SvREFCNT_inc(sv));
1832 static int store_ref(pTHX_ stcxt_t *cxt, SV *sv)
1834 TRACEME(("store_ref (0x%"UVxf")", PTR2UV(sv)));
1840 sv = SvRV(sv);
1842 if (SvOBJECT(sv)) {
1843 HV *stash = (HV *) SvSTASH(sv);
1845 TRACEME(("ref (0x%"UVxf") is overloaded", PTR2UV(sv)));
1852 return store(aTHX_ cxt, sv);
1866 static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
1871 U32 flags = SvFLAGS(sv); /* "cc -O" may put it in register */
1873 TRACEME(("store_scalar (0x%"UVxf")", PTR2UV(sv)));
1878 * sv->sv_flags each time we wish to check the flags.
1881 if (!(flags & SVf_OK)) { /* !SvOK(sv) */
1882 if (sv == &PL_sv_undef) {
1886 TRACEME(("undef at 0x%"UVxf, PTR2UV(sv)));
1912 * NOTE: instead of using SvNOK(sv), we test for SvNOKp(sv).
1913 * The reason is that when the scalar value is tainted, the SvNOK(sv)
1924 if (sv == &PL_sv_yes) {
1927 } else if (sv == &PL_sv_no) {
1931 pv = SvPV(sv, len); /* We know it's SvPOK */
1948 iv = SvIV(sv);
1960 if ((flags & SVf_IVisUV) && SvUV(sv) > IV_MAX) {
1961 TRACEME(("large unsigned integer as string, value = %"UVuf, SvUV(sv)));
1987 ((flags & SVf_IVisUV) && SvUV(sv) > 0x7FFFFFFF) ||
2006 TRACEME(("ok (integer 0x%"UVxf", value = %"IVdf")", PTR2UV(sv), iv));
2010 nv = SvNV(sv);
2020 SvIV_please(sv);
2021 if (SvIOK_notUV(sv)) {
2022 iv = SvIV(sv);
2025 nv = SvNV(sv);
2036 TRACEME(("ok (double 0x%"UVxf", value = %"NVff")", PTR2UV(sv), nv));
2042 pv = SvPV(sv, len);
2051 if (SvUTF8 (sv))
2056 PTR2UV(sv), SvPVX(sv), (IV)len));
2059 sv_reftype(sv, FALSE),
2060 PTR2UV(sv)));
2583 static int store_tied(pTHX_ stcxt_t *cxt, SV *sv)
2588 int svt = SvTYPE(sv);
2591 TRACEME(("store_tied (0x%"UVxf")", PTR2UV(sv)));
2615 if (!(mg = mg_find(sv, mtype)))
2654 static int store_tied_item(pTHX_ stcxt_t *cxt, SV *sv)
2659 TRACEME(("store_tied_item (0x%"UVxf")", PTR2UV(sv)));
2661 if (!(mg = mg_find(sv, 'p')))
2748 SV *sv,
2802 switch (SvTYPE(sv)) {
2831 * a blessed array, what we have in `sv' is the array, and we can't
2840 ref = newRV_noinc(sv); /* Temporary reference */
2871 return store_blessed(aTHX_ cxt, sv, type, pkg);
3098 if (!(mg = mg_find(sv, mtype))) {
3099 int svt = SvTYPE(sv);
3106 PTR2UV(mg->mg_obj), PTR2UV(sv)));
3146 SV *sv,
3164 return store_hook(aTHX_ cxt, sv, type, pkg, hook);
3174 PTR2UV(sv), class, cxt->tagnum));
3212 return SV_STORE(type)(aTHX_ cxt, sv);
3225 static int store_other(pTHX_ stcxt_t *cxt, SV *sv)
3241 CROAK(("Can't store %s items", sv_reftype(sv, FALSE)));
3244 sv_reftype(sv, FALSE), PTR2UV(sv));
3250 (void) sprintf(buf, "You lost %s(0x%"UVxf")%c", sv_reftype(sv, FALSE),
3251 PTR2UV(sv), (char) 0);
3272 static int sv_type(pTHX_ SV *sv)
3274 switch (SvTYPE(sv)) {
3296 return SvROK(sv) ? svis_REF : svis_SCALAR;
3299 if (SvRMAGICAL(sv) && (mg_find(sv, 'p')))
3303 if (SvRMAGICAL(sv) && (mg_find(sv, 'q')))
3305 return SvROK(sv) ? svis_REF : svis_SCALAR;
3307 if (SvRMAGICAL(sv) && (mg_find(sv, 'P')))
3311 if (SvRMAGICAL(sv) && (mg_find(sv, 'P')))
3326 * Recursively store objects pointed to by the sv to the specified file.
3332 static int store(pTHX_ stcxt_t *cxt, SV *sv)
3339 TRACEME(("store (0x%"UVxf")", PTR2UV(sv)));
3353 svh = hv_fetch(hseen, (char *) &sv, sizeof(sv), FALSE);
3357 if (sv == &PL_sv_undef) {
3389 TRACEME(("object 0x%"UVxf" seen as #%d", PTR2UV(sv), ntohl(tagval)));
3397 * Allocate a new tag and associate it with the address of the sv being
3409 (char *) &sv, sizeof(sv), INT2PTR(SV*, cxt->tagnum), 0))
3413 * Store `sv' and everything beneath it, using appropriate routine.
3417 type = sv_type(aTHX_ sv);
3421 PTR2UV(sv), cxt->tagnum, type));
3423 if (SvOBJECT(sv)) {
3424 HV *pkg = SvSTASH(sv);
3425 ret = store_blessed(aTHX_ cxt, sv, type, pkg);
3427 ret = SV_STORE(type)(aTHX_ cxt, sv);
3430 ret ? "FAILED" : "ok", PTR2UV(sv),
3431 SvREFCNT(sv), sv_reftype(sv, FALSE)));
3546 SV *sv,
3584 * Ensure sv is actually a reference. From perl, we called something
3590 if (!SvROK(sv))
3592 sv = SvRV(sv); /* So follow it to know what to store */
3616 status = store(aTHX_ cxt, sv); /* Just do it! */
3661 int pstore(pTHX_ PerlIO *f, SV *sv)
3664 return do_store(aTHX_ f, sv, 0, FALSE, (SV**) 0);
3674 int net_pstore(pTHX_ PerlIO *f, SV *sv)
3677 return do_store(aTHX_ f, sv, 0, TRUE, (SV**) 0);
3702 SV *mstore(pTHX_ SV *sv)
3708 if (!do_store(aTHX_ (PerlIO*) 0, sv, 0, FALSE, &out))
3720 SV *net_mstore(pTHX_ SV *sv)
3726 if (!do_store(aTHX_ (PerlIO*) 0, sv, 0, TRUE, &out))
3772 SV *sv;
3797 sv = retrieve(aTHX_ cxt, class); /* First SV which is SEEN will be blessed */
3799 return sv;
3811 SV *sv;
3847 sv = retrieve(aTHX_ cxt, class); /* First SV which is SEEN will be blessed */
3851 return sv;
3885 SV *sv;
3912 sv = newSV(0);
3915 sv = (SV *) newAV();
3918 sv = (SV *) newHV();
3928 sv = newSV(0);
3932 sv = (SV *) newAV();
3936 sv = (SV *) newHV();
3946 SEEN(sv, 0, 0); /* Don't bless yet */
4107 BLESS(sv, class);
4108 hook = pkg_can(aTHX_ cxt->hook, SvSTASH(sv), "STORABLE_thaw");
4133 pkg_uncache(aTHX_ cxt->hook, SvSTASH(sv), "STORABLE_thaw");
4134 hook = pkg_can(aTHX_ cxt->hook, SvSTASH(sv), "STORABLE_thaw");
4169 class, PTR2UV(sv), (IV) AvFILLp(av) + 1));
4171 rv = newRV(sv);
4191 return sv;
4193 TRACEME(("retrieving magic object for 0x%"UVxf"...", PTR2UV(sv)));
4198 PTR2UV(rv), PTR2UV(sv)));
4202 sv_upgrade(sv, SVt_PVMG);
4205 sv_upgrade(sv, SVt_PVAV);
4206 AvREAL_off((AV *)sv);
4209 sv_upgrade(sv, SVt_PVHV);
4238 sv_magic(sv, rv, mtype, Nullch, 0);
4241 return sv;
4253 SV *sv;
4262 * do the retrieve first and use rv = newRV(sv) since it will be too late
4268 sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
4269 if (!sv)
4276 * it is now an RV on sv... Again, we cheat by duplicating the code
4281 * SvRV(rv) = SvREFCNT_inc(sv);
4297 SvRV(rv) = sv; /* $rv = \$sv */
4314 SV *sv;
4325 sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
4326 if (!sv)
4334 SvRV(rv) = sv; /* $rv = \$sv */
4341 stash = SvTYPE(sv) ? (HV *) SvSTASH (sv) : 0;
4345 sv_reftype(sv, FALSE),
4346 PTR2UV(sv)));
4361 sv_reftype(sv, FALSE),
4362 PTR2UV(sv),
4383 SV *sv;
4389 sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
4390 if (!sv)
4395 sv_magic(tv, sv, 'P', Nullch, 0);
4396 SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
4412 SV *sv;
4418 sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
4419 if (!sv)
4423 sv_magic(tv, sv, 'P', Nullch, 0);
4424 SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
4440 SV *sv, *obj = NULL;
4446 sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
4447 if (!sv) {
4450 else if (SvTYPE(sv) != SVt_NULL) {
4451 obj = sv;
4476 SV *sv;
4483 sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
4484 if (!sv)
4492 sv_magic(tv, sv, 'p', (char *)key, HEf_SVKEY);
4494 SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
4508 SV *sv;
4515 sv = retrieve(aTHX_ cxt, 0); /* Retrieve <object> */
4516 if (!sv)
4522 sv_magic(tv, sv, 'p', Nullch, idx);
4523 SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */
4541 SV *sv;
4550 sv = NEWSV(10002, len);
4551 SEEN(sv, cname, 0); /* Associate this new scalar with tag "tagnum" */
4562 SAFEREAD(SvPVX(sv), len, sv);
4563 SvCUR_set(sv, len); /* Record C string length */
4564 *SvEND(sv) = '\0'; /* Ensure it's null terminated anyway */
4565 (void) SvPOK_only(sv); /* Validate string pointer */
4567 SvTAINT(sv); /* External data cannot be trusted */
4569 TRACEME(("large scalar len %"IVdf" '%s'", (IV) len, SvPVX(sv)));
4570 TRACEME(("ok (retrieve_lscalar at 0x%"UVxf")", PTR2UV(sv)));
4572 return sv;
4587 SV *sv;
4596 sv = NEWSV(10002, len);
4597 SEEN(sv, cname, 0); /* Associate this new scalar with tag "tagnum" */
4610 if (SvTYPE(sv) <= SVt_PV) {
4611 sv_upgrade(sv, SVt_PV);
4613 SvGROW(sv, 1);
4614 *SvEND(sv) = '\0'; /* Ensure it's null terminated anyway */
4615 TRACEME(("ok (retrieve_scalar empty at 0x%"UVxf")", PTR2UV(sv)));
4623 SAFEREAD(SvPVX(sv), len, sv);
4624 SvCUR_set(sv, len); /* Record C string length */
4625 *SvEND(sv) = '\0'; /* Ensure it's null terminated anyway */
4626 TRACEME(("small scalar len %d '%s'", len, SvPVX(sv)));
4629 (void) SvPOK_only(sv); /* Validate string pointer */
4631 SvTAINT(sv); /* External data cannot be trusted */
4633 TRACEME(("ok (retrieve_scalar at 0x%"UVxf")", PTR2UV(sv)));
4634 return sv;
4645 SV *sv;
4649 sv = retrieve_scalar(aTHX_ cxt, cname);
4650 if (sv) {
4652 SvUTF8_on(sv);
4663 return sv;
4674 SV *sv;
4678 sv = retrieve_lscalar(aTHX_ cxt, cname);
4679 if (sv) {
4681 SvUTF8_on(sv);
4691 return sv;
4702 SV *sv;
4708 sv = newSViv(iv);
4709 SEEN(sv, cname, 0); /* Associate this new scalar with tag "tagnum" */
4712 TRACEME(("ok (retrieve_integer at 0x%"UVxf")", PTR2UV(sv)));
4714 return sv;
4725 SV *sv;
4732 sv = newSViv((int) ntohl(iv));
4735 sv = newSViv(iv);
4738 SEEN(sv, cname, 0); /* Associate this new scalar with tag "tagnum" */
4740 TRACEME(("ok (retrieve_netint at 0x%"UVxf")", PTR2UV(sv)));
4742 return sv;
4753 SV *sv;
4759 sv = newSVnv(nv);
4760 SEEN(sv, cname, 0); /* Associate this new scalar with tag "tagnum" */
4763 TRACEME(("ok (retrieve_double at 0x%"UVxf")", PTR2UV(sv)));
4765 return sv;
4776 SV *sv;
4785 sv = newSViv(tmp);
4786 SEEN(sv, cname, 0); /* Associate this new scalar with tag "tagnum" */
4789 TRACEME(("ok (retrieve_byte at 0x%"UVxf")", PTR2UV(sv)));
4791 return sv;
4801 SV* sv;
4805 sv = newSV(0);
4806 SEEN(sv, cname, 0);
4808 return sv;
4818 SV *sv = &PL_sv_undef;
4828 SEEN(sv, cname, 1);
4829 return sv;
4839 SV *sv = &PL_sv_yes;
4843 SEEN(sv, cname, 1);
4844 return sv;
4854 SV *sv = &PL_sv_no;
4858 SEEN(sv, cname, 1);
4859 return sv;
4876 SV *sv;
4899 sv = retrieve(aTHX_ cxt, 0); /* Retrieve item */
4900 if (!sv)
4902 if (av_store(av, i, sv) == 0)
4928 SV *sv;
4954 sv = retrieve(aTHX_ cxt, 0);
4955 if (!sv)
4976 if (hv_store(hv, kbuf, (U32) size, sv, 0) == 0)
5002 SV *sv;
5042 sv = retrieve(aTHX_ cxt, 0);
5043 if (!sv)
5049 SvREADONLY_on(sv);
5063 if (!hv_store_ent(hv, keysv, sv, 0))
5074 SvREFCNT_dec (sv);
5075 sv = &PL_sv_placeholder;
5108 if (hv_store_flags(hv, kbuf, size, sv, 0, store_flags) == 0)
5112 if (hv_store(hv, kbuf, size, sv, 0) == 0)
5140 SV *sv, *text, *sub;
5152 sv = newSViv(0);
5153 SEEN(sv, cname, 0);
5196 sv = newSVsv(sub);
5198 av_store(cxt->aseen, tagnum, SvREFCNT_inc(sv));
5199 return sv;
5226 sv = SvRV(cv);
5231 SvREFCNT_inc(sv); /* XXX seems to be necessary */
5237 av_store(cxt->aseen, tagnum, SvREFCNT_inc(sv));
5239 return sv;
5258 SV *sv;
5289 sv = retrieve(aTHX_ cxt, 0); /* Retrieve item */
5290 if (!sv)
5292 if (av_store(av, i, sv) == 0)
5319 SV *sv = (SV *) 0;
5356 sv = SvREFCNT_inc(sv_h_undef);
5359 sv = retrieve(aTHX_ cxt, 0);
5360 if (!sv)
5386 if (hv_store(hv, kbuf, (U32) size, sv, 0) == 0)
5589 SV *sv;
5629 sv = *svh;
5630 TRACEME(("has retrieved #%d at 0x%"UVxf, tagn, PTR2UV(sv)));
5631 SvREFCNT_inc(sv); /* One more reference to this same sv */
5632 return sv; /* The SV pointer where object was retrieved */
5670 sv = *svh;
5671 TRACEME(("had retrieved #%d at 0x%"UVxf, tag, PTR2UV(sv)));
5672 SvREFCNT_inc(sv); /* One more reference to this same sv */
5673 return sv; /* The SV pointer where object was retrieved */
5694 sv = RETRIEVE(cxt, type)(aTHX_ cxt, cname);
5695 if (!sv)
5728 BLESS(sv, kbuf);
5732 TRACEME(("ok (retrieved 0x%"UVxf", refcnt=%d, %s)", PTR2UV(sv),
5733 SvREFCNT(sv) - 1, sv_reftype(sv, FALSE)));
5735 return sv; /* Ok */
5751 SV *sv;
5837 sv = retrieve(aTHX_ cxt, 0); /* Recursively retrieve object, get root SV */
5860 if (!sv) {
5881 sv_reftype(sv, FALSE), PTR2UV(sv)));
5895 if (sv_type(aTHX_ sv) == svis_REF && (rv = SvRV(sv)) && SvOBJECT(rv)) {
5897 return sv;
5915 * the underlying sv as blessing is.
5918 if (SvOBJECT(sv)) {
5919 HV *stash = (HV *) SvSTASH(sv);
5920 SV *rv = newRV_noinc(sv);
5931 return newRV_noinc(sv);
5950 SV *mretrieve(pTHX_ SV *sv)
5953 return do_retrieve(aTHX_ (PerlIO*) 0, sv, 0);
5969 SV *dclone(pTHX_ SV *sv)
5991 if (!do_store(aTHX_ (PerlIO*) 0, sv, ST_CLONE, FALSE, (SV**) 0))
6014 * Since we're passing do_retrieve() both a NULL file and sv, we need
6021 cxt->s_tainted = SvTAINTED(sv);
6127 mretrieve(sv)
6128 SV * sv
6130 RETVAL = mretrieve(aTHX_ sv);
6135 dclone(sv)
6136 SV * sv
6138 RETVAL = dclone(aTHX_ sv);