3 * Copyright (c) 1991-1999, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
19 /* Use an overridden DBL_DIG */
23 # define DBL_DIG OVR_DBL_DIG
25 /* The following is all to get DBL_DIG, in order to pick a nice
26 default value for printing floating point numbers in Gconvert.
36 #define DBL_DIG 15 /* A guess that works lots of places */
41 #define FCALL this->*f
42 #define VTBL this->*vtbl
43 #else /* !PERL_OBJECT */
46 #endif /* PERL_OBJECT */
48 #define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal(sv)
55 (p) = (SV*)safemalloc(sizeof(SV)); \
67 Safefree((char*)(p)); \
72 static I32 registry_size;
74 #define REGHASH(sv,size) ((((U32)(sv)) >> 2) % (size))
76 #define REG_REPLACE(sv,a,b) \
78 void* p = sv->sv_any; \
79 I32 h = REGHASH(sv, registry_size); \
81 while (registry[i] != (a)) { \
82 if (++i >= registry_size) \
85 Perl_die(aTHX_ "SV registry bug"); \
90 #define REG_ADD(sv) REG_REPLACE(sv,Nullsv,sv)
91 #define REG_REMOVE(sv) REG_REPLACE(sv,sv,Nullsv)
94 S_reg_add(pTHX_ SV *sv)
96 if (PL_sv_count >= (registry_size >> 1))
98 SV **oldreg = registry;
99 I32 oldsize = registry_size;
101 registry_size = registry_size ? ((registry_size << 2) + 1) : 2037;
102 Newz(707, registry, registry_size, SV*);
107 for (i = 0; i < oldsize; ++i) {
108 SV* oldsv = oldreg[i];
121 S_reg_remove(pTHX_ SV *sv)
128 S_visit(pTHX_ SVFUNC_t f)
132 for (i = 0; i < registry_size; ++i) {
133 SV* sv = registry[i];
134 if (sv && SvTYPE(sv) != SVTYPEMASK)
140 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
142 if (!(flags & SVf_FAKE))
149 * "A time to plant, and a time to uproot what was planted..."
152 #define plant_SV(p) \
154 SvANY(p) = (void *)PL_sv_root; \
155 SvFLAGS(p) = SVTYPEMASK; \
160 /* sv_mutex must be held while calling uproot_SV() */
161 #define uproot_SV(p) \
164 PL_sv_root = (SV*)SvANY(p); \
186 if (PL_debug & 32768) \
194 S_del_sv(pTHX_ SV *p)
196 if (PL_debug & 32768) {
201 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
203 svend = &sva[SvREFCNT(sva)];
204 if (p >= sv && p < svend)
208 Perl_warn(aTHX_ "Attempt to free non-arena SV: 0x%lx", (unsigned long)p);
215 #else /* ! DEBUGGING */
217 #define del_SV(p) plant_SV(p)
219 #endif /* DEBUGGING */
222 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
227 Zero(sva, size, char);
229 /* The first SV in an arena isn't an SV. */
230 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
231 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
232 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
234 PL_sv_arenaroot = sva;
235 PL_sv_root = sva + 1;
237 svend = &sva[SvREFCNT(sva) - 1];
240 SvANY(sv) = (void *)(SV*)(sv + 1);
241 SvFLAGS(sv) = SVTYPEMASK;
245 SvFLAGS(sv) = SVTYPEMASK;
248 /* sv_mutex must be held while calling more_sv() */
255 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
256 PL_nice_chunk = Nullch;
259 char *chunk; /* must use New here to match call to */
260 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
261 sv_add_arena(chunk, 1008, 0);
268 S_visit(pTHX_ SVFUNC_t f)
274 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
275 svend = &sva[SvREFCNT(sva)];
276 for (sv = sva + 1; sv < svend; ++sv) {
277 if (SvTYPE(sv) != SVTYPEMASK)
286 S_do_report_used(pTHX_ SV *sv)
288 if (SvTYPE(sv) != SVTYPEMASK) {
289 /* XXX Perhaps this ought to go to Perl_debug_log, if DEBUGGING. */
290 PerlIO_printf(PerlIO_stderr(), "****\n");
296 Perl_sv_report_used(pTHX)
298 visit(FUNC_NAME_TO_PTR(S_do_report_used));
302 S_do_clean_objs(pTHX_ SV *sv)
306 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
307 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
313 /* XXX Might want to check arrays, etc. */
316 #ifndef DISABLE_DESTRUCTOR_KLUDGE
318 S_do_clean_named_objs(pTHX_ SV *sv)
320 if (SvTYPE(sv) == SVt_PVGV) {
321 if ( SvOBJECT(GvSV(sv)) ||
322 GvAV(sv) && SvOBJECT(GvAV(sv)) ||
323 GvHV(sv) && SvOBJECT(GvHV(sv)) ||
324 GvIO(sv) && SvOBJECT(GvIO(sv)) ||
325 GvCV(sv) && SvOBJECT(GvCV(sv)) )
327 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
335 Perl_sv_clean_objs(pTHX)
337 PL_in_clean_objs = TRUE;
338 visit(FUNC_NAME_TO_PTR(S_do_clean_objs));
339 #ifndef DISABLE_DESTRUCTOR_KLUDGE
340 /* some barnacles may yet remain, clinging to typeglobs */
341 visit(FUNC_NAME_TO_PTR(S_do_clean_named_objs));
343 PL_in_clean_objs = FALSE;
347 S_do_clean_all(pTHX_ SV *sv)
349 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%lx\n", sv) );)
350 SvFLAGS(sv) |= SVf_BREAK;
355 Perl_sv_clean_all(pTHX)
357 PL_in_clean_all = TRUE;
358 visit(FUNC_NAME_TO_PTR(S_do_clean_all));
359 PL_in_clean_all = FALSE;
363 Perl_sv_free_arenas(pTHX)
368 /* Free arenas here, but be careful about fake ones. (We assume
369 contiguity of the fake ones with the corresponding real ones.) */
371 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
372 svanext = (SV*) SvANY(sva);
373 while (svanext && SvFAKE(svanext))
374 svanext = (SV*) SvANY(svanext);
377 Safefree((void *)sva);
381 Safefree(PL_nice_chunk);
382 PL_nice_chunk = Nullch;
383 PL_nice_chunk_size = 0;
397 * See comment in more_xiv() -- RAM.
399 PL_xiv_root = *(IV**)xiv;
401 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
405 S_del_xiv(pTHX_ XPVIV *p)
407 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
409 *(IV**)xiv = PL_xiv_root;
420 New(705, ptr, 1008/sizeof(XPV), XPV);
421 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
422 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
425 xivend = &xiv[1008 / sizeof(IV) - 1];
426 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
428 while (xiv < xivend) {
429 *(IV**)xiv = (IV *)(xiv + 1);
443 PL_xnv_root = *(NV**)xnv;
445 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
449 S_del_xnv(pTHX_ XPVNV *p)
451 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
453 *(NV**)xnv = PL_xnv_root;
463 New(711, xnv, 1008/sizeof(NV), NV);
464 xnvend = &xnv[1008 / sizeof(NV) - 1];
465 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
467 while (xnv < xnvend) {
468 *(NV**)xnv = (NV*)(xnv + 1);
482 PL_xrv_root = (XRV*)xrv->xrv_rv;
488 S_del_xrv(pTHX_ XRV *p)
491 p->xrv_rv = (SV*)PL_xrv_root;
500 register XRV* xrvend;
501 New(712, PL_xrv_root, 1008/sizeof(XRV), XRV);
503 xrvend = &xrv[1008 / sizeof(XRV) - 1];
504 while (xrv < xrvend) {
505 xrv->xrv_rv = (SV*)(xrv + 1);
519 PL_xpv_root = (XPV*)xpv->xpv_pv;
525 S_del_xpv(pTHX_ XPV *p)
528 p->xpv_pv = (char*)PL_xpv_root;
537 register XPV* xpvend;
538 New(713, PL_xpv_root, 1008/sizeof(XPV), XPV);
540 xpvend = &xpv[1008 / sizeof(XPV) - 1];
541 while (xpv < xpvend) {
542 xpv->xpv_pv = (char*)(xpv + 1);
549 #define new_XIV() (void*)safemalloc(sizeof(XPVIV))
550 #define del_XIV(p) Safefree((char*)p)
552 #define new_XIV() (void*)new_xiv()
553 #define del_XIV(p) del_xiv((XPVIV*) p)
557 #define new_XNV() (void*)safemalloc(sizeof(XPVNV))
558 #define del_XNV(p) Safefree((char*)p)
560 #define new_XNV() (void*)new_xnv()
561 #define del_XNV(p) del_xnv((XPVNV*) p)
565 #define new_XRV() (void*)safemalloc(sizeof(XRV))
566 #define del_XRV(p) Safefree((char*)p)
568 #define new_XRV() (void*)new_xrv()
569 #define del_XRV(p) del_xrv((XRV*) p)
573 #define new_XPV() (void*)safemalloc(sizeof(XPV))
574 #define del_XPV(p) Safefree((char*)p)
576 #define new_XPV() (void*)new_xpv()
577 #define del_XPV(p) del_xpv((XPV *)p)
581 # define my_safemalloc(s) safemalloc(s)
582 # define my_safefree(s) safefree(s)
585 S_my_safemalloc(MEM_SIZE size)
588 New(717, p, size, char);
591 # define my_safefree(s) Safefree(s)
594 #define new_XPVIV() (void*)my_safemalloc(sizeof(XPVIV))
595 #define del_XPVIV(p) my_safefree((char*)p)
597 #define new_XPVNV() (void*)my_safemalloc(sizeof(XPVNV))
598 #define del_XPVNV(p) my_safefree((char*)p)
600 #define new_XPVMG() (void*)my_safemalloc(sizeof(XPVMG))
601 #define del_XPVMG(p) my_safefree((char*)p)
603 #define new_XPVLV() (void*)my_safemalloc(sizeof(XPVLV))
604 #define del_XPVLV(p) my_safefree((char*)p)
606 #define new_XPVAV() (void*)my_safemalloc(sizeof(XPVAV))
607 #define del_XPVAV(p) my_safefree((char*)p)
609 #define new_XPVHV() (void*)my_safemalloc(sizeof(XPVHV))
610 #define del_XPVHV(p) my_safefree((char*)p)
612 #define new_XPVCV() (void*)my_safemalloc(sizeof(XPVCV))
613 #define del_XPVCV(p) my_safefree((char*)p)
615 #define new_XPVGV() (void*)my_safemalloc(sizeof(XPVGV))
616 #define del_XPVGV(p) my_safefree((char*)p)
618 #define new_XPVBM() (void*)my_safemalloc(sizeof(XPVBM))
619 #define del_XPVBM(p) my_safefree((char*)p)
621 #define new_XPVFM() (void*)my_safemalloc(sizeof(XPVFM))
622 #define del_XPVFM(p) my_safefree((char*)p)
624 #define new_XPVIO() (void*)my_safemalloc(sizeof(XPVIO))
625 #define del_XPVIO(p) my_safefree((char*)p)
628 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
638 if (SvTYPE(sv) == mt)
644 switch (SvTYPE(sv)) {
665 else if (mt < SVt_PVIV)
682 pv = (char*)SvRV(sv);
686 nv = (NV)(unsigned long)pv;
702 else if (mt == SVt_NV)
713 del_XPVIV(SvANY(sv));
723 del_XPVNV(SvANY(sv));
733 del_XPVMG(SvANY(sv));
736 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
741 Perl_croak(aTHX_ "Can't upgrade to undef");
743 SvANY(sv) = new_XIV();
747 SvANY(sv) = new_XNV();
751 SvANY(sv) = new_XRV();
755 SvANY(sv) = new_XPV();
761 SvANY(sv) = new_XPVIV();
771 SvANY(sv) = new_XPVNV();
779 SvANY(sv) = new_XPVMG();
789 SvANY(sv) = new_XPVLV();
803 SvANY(sv) = new_XPVAV();
818 SvANY(sv) = new_XPVHV();
834 SvANY(sv) = new_XPVCV();
835 Zero(SvANY(sv), 1, XPVCV);
845 SvANY(sv) = new_XPVGV();
860 SvANY(sv) = new_XPVBM();
873 SvANY(sv) = new_XPVFM();
874 Zero(SvANY(sv), 1, XPVFM);
884 SvANY(sv) = new_XPVIO();
885 Zero(SvANY(sv), 1, XPVIO);
896 SvFLAGS(sv) &= ~SVTYPEMASK;
902 Perl_sv_backoff(pTHX_ register SV *sv)
907 SvLEN(sv) += SvIVX(sv);
908 SvPVX(sv) -= SvIVX(sv);
910 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
912 SvFLAGS(sv) &= ~SVf_OOK;
917 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
922 if (newlen >= 0x10000) {
923 PerlIO_printf(Perl_debug_log, "Allocation too large: %lx\n", newlen);
926 #endif /* HAS_64K_LIMIT */
929 if (SvTYPE(sv) < SVt_PV) {
930 sv_upgrade(sv, SVt_PV);
933 else if (SvOOK(sv)) { /* pv is offset? */
936 if (newlen > SvLEN(sv))
937 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
939 if (newlen >= 0x10000)
945 if (newlen > SvLEN(sv)) { /* need more room? */
946 if (SvLEN(sv) && s) {
947 #if defined(MYMALLOC) && !defined(PURIFY) && !defined(LEAKTEST)
948 STRLEN l = malloced_size((void*)SvPVX(sv));
954 Renew(s,newlen,char);
957 New(703,s,newlen,char);
959 SvLEN_set(sv, newlen);
965 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
967 SV_CHECK_THINKFIRST(sv);
968 switch (SvTYPE(sv)) {
970 sv_upgrade(sv, SVt_IV);
973 sv_upgrade(sv, SVt_PVNV);
977 sv_upgrade(sv, SVt_PVIV);
988 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
989 PL_op_desc[PL_op->op_type]);
992 (void)SvIOK_only(sv); /* validate number */
998 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1005 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1013 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1020 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1022 SV_CHECK_THINKFIRST(sv);
1023 switch (SvTYPE(sv)) {
1026 sv_upgrade(sv, SVt_NV);
1031 sv_upgrade(sv, SVt_PVNV);
1042 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1043 PL_op_name[PL_op->op_type]);
1047 (void)SvNOK_only(sv); /* validate number */
1052 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1059 S_not_a_number(pTHX_ SV *sv)
1065 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1066 /* each *s can expand to 4 chars + "...\0",
1067 i.e. need room for 8 chars */
1069 for (s = SvPVX(sv); *s && d < limit; s++) {
1071 if (ch & 128 && !isPRINT_LC(ch)) {
1080 else if (ch == '\r') {
1084 else if (ch == '\f') {
1088 else if (ch == '\\') {
1092 else if (isPRINT_LC(ch))
1107 Perl_warner(aTHX_ WARN_NUMERIC, "Argument \"%s\" isn't numeric in %s", tmpbuf,
1108 PL_op_name[PL_op->op_type]);
1110 Perl_warner(aTHX_ WARN_NUMERIC, "Argument \"%s\" isn't numeric", tmpbuf);
1113 /* the number can be converted to _integer_ with atol() */
1114 #define IS_NUMBER_TO_INT_BY_ATOL 0x01
1115 #define IS_NUMBER_TO_INT_BY_ATOF 0x02 /* atol() may be != atof() */
1116 #define IS_NUMBER_NOT_IV 0x04 /* (IV)atof() may be != atof() */
1117 #define IS_NUMBER_NEG 0x08 /* not good to cache UV */
1119 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1120 until proven guilty, assume that things are not that bad... */
1123 Perl_sv_2iv(pTHX_ register SV *sv)
1127 if (SvGMAGICAL(sv)) {
1132 return I_V(SvNVX(sv));
1134 if (SvPOKp(sv) && SvLEN(sv))
1137 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1139 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1140 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1145 if (SvTHINKFIRST(sv)) {
1148 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
1149 return SvIV(tmpstr);
1150 return (IV)SvRV(sv);
1152 if (SvREADONLY(sv)) {
1154 return I_V(SvNVX(sv));
1156 if (SvPOKp(sv) && SvLEN(sv))
1160 if (ckWARN(WARN_UNINITIALIZED))
1161 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1168 return (IV)(SvUVX(sv));
1175 /* We can cache the IV/UV value even if it not good enough
1176 * to reconstruct NV, since the conversion to PV will prefer
1177 * NV over IV/UV. XXXX 64-bit?
1180 if (SvTYPE(sv) == SVt_NV)
1181 sv_upgrade(sv, SVt_PVNV);
1184 if (SvNVX(sv) < (NV)IV_MAX + 0.5)
1185 SvIVX(sv) = I_V(SvNVX(sv));
1187 SvUVX(sv) = U_V(SvNVX(sv));
1190 DEBUG_c(PerlIO_printf(Perl_debug_log,
1191 "0x%lx 2iv(%lu => %ld) (as unsigned)\n",
1193 (unsigned long)SvUVX(sv), (long)(IV)SvUVX(sv)));
1194 return (IV)SvUVX(sv);
1197 else if (SvPOKp(sv) && SvLEN(sv)) {
1198 I32 numtype = looks_like_number(sv);
1200 /* We want to avoid a possible problem when we cache an IV which
1201 may be later translated to an NV, and the resulting NV is not
1202 the translation of the initial data.
1204 This means that if we cache such an IV, we need to cache the
1205 NV as well. Moreover, we trade speed for space, and do not
1206 cache the NV if not needed.
1208 if (numtype & IS_NUMBER_NOT_IV) {
1209 /* May be not an integer. Need to cache NV if we cache IV
1210 * - otherwise future conversion to NV will be wrong. */
1213 d = Atof(SvPVX(sv));
1215 if (SvTYPE(sv) < SVt_PVNV)
1216 sv_upgrade(sv, SVt_PVNV);
1220 DEBUG_c(PerlIO_printf(Perl_debug_log,
1221 #if defined(USE_LONG_DOUBLE)
1228 if (SvNVX(sv) < (NV)IV_MAX + 0.5)
1229 SvIVX(sv) = I_V(SvNVX(sv));
1231 SvUVX(sv) = U_V(SvNVX(sv));
1237 /* The NV may be reconstructed from IV - safe to cache IV,
1238 which may be calculated by atol(). */
1239 if (SvTYPE(sv) == SVt_PV)
1240 sv_upgrade(sv, SVt_PVIV);
1242 SvIVX(sv) = atol(SvPVX(sv)); /* XXXX 64-bit? */
1244 else { /* Not a number. Cache 0. */
1247 if (SvTYPE(sv) < SVt_PVIV)
1248 sv_upgrade(sv, SVt_PVIV);
1251 if (ckWARN(WARN_NUMERIC))
1257 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1258 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1259 if (SvTYPE(sv) < SVt_IV)
1260 /* Typically the caller expects that sv_any is not NULL now. */
1261 sv_upgrade(sv, SVt_IV);
1264 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%lx 2iv(%ld)\n",
1265 (unsigned long)sv,(long)SvIVX(sv)));
1266 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1270 Perl_sv_2uv(pTHX_ register SV *sv)
1274 if (SvGMAGICAL(sv)) {
1279 return U_V(SvNVX(sv));
1280 if (SvPOKp(sv) && SvLEN(sv))
1283 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1285 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1286 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1291 if (SvTHINKFIRST(sv)) {
1294 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
1295 return SvUV(tmpstr);
1296 return (UV)SvRV(sv);
1298 if (SvREADONLY(sv)) {
1300 return U_V(SvNVX(sv));
1302 if (SvPOKp(sv) && SvLEN(sv))
1306 if (ckWARN(WARN_UNINITIALIZED))
1307 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1317 return (UV)SvIVX(sv);
1321 /* We can cache the IV/UV value even if it not good enough
1322 * to reconstruct NV, since the conversion to PV will prefer
1323 * NV over IV/UV. XXXX 64-bit?
1325 if (SvTYPE(sv) == SVt_NV)
1326 sv_upgrade(sv, SVt_PVNV);
1328 if (SvNVX(sv) >= -0.5) {
1330 SvUVX(sv) = U_V(SvNVX(sv));
1333 SvIVX(sv) = I_V(SvNVX(sv));
1335 DEBUG_c(PerlIO_printf(Perl_debug_log,
1336 "0x%lx 2uv(%ld => %lu) (as signed)\n",
1337 (unsigned long)sv,(long)SvIVX(sv),
1338 (long)(UV)SvIVX(sv)));
1339 return (UV)SvIVX(sv);
1342 else if (SvPOKp(sv) && SvLEN(sv)) {
1343 I32 numtype = looks_like_number(sv);
1345 /* We want to avoid a possible problem when we cache a UV which
1346 may be later translated to an NV, and the resulting NV is not
1347 the translation of the initial data.
1349 This means that if we cache such a UV, we need to cache the
1350 NV as well. Moreover, we trade speed for space, and do not
1351 cache the NV if not needed.
1353 if (numtype & IS_NUMBER_NOT_IV) {
1354 /* May be not an integer. Need to cache NV if we cache IV
1355 * - otherwise future conversion to NV will be wrong. */
1358 d = Atof(SvPVX(sv)); /* XXXX 64-bit? */
1360 if (SvTYPE(sv) < SVt_PVNV)
1361 sv_upgrade(sv, SVt_PVNV);
1365 DEBUG_c(PerlIO_printf(Perl_debug_log,
1366 #if defined(USE_LONG_DOUBLE)
1373 if (SvNVX(sv) < -0.5) {
1374 SvIVX(sv) = I_V(SvNVX(sv));
1377 SvUVX(sv) = U_V(SvNVX(sv));
1381 else if (numtype & IS_NUMBER_NEG) {
1382 /* The NV may be reconstructed from IV - safe to cache IV,
1383 which may be calculated by atol(). */
1384 if (SvTYPE(sv) == SVt_PV)
1385 sv_upgrade(sv, SVt_PVIV);
1387 SvIVX(sv) = (IV)atol(SvPVX(sv)); /* XXXX 64-bit? */
1389 else if (numtype) { /* Non-negative */
1390 /* The NV may be reconstructed from UV - safe to cache UV,
1391 which may be calculated by strtoul()/atol. */
1392 if (SvTYPE(sv) == SVt_PV)
1393 sv_upgrade(sv, SVt_PVIV);
1395 (void)SvIsUV_on(sv);
1397 SvUVX(sv) = strtoul(SvPVX(sv), Null(char**), 10); /* XXXX 64-bit? */
1398 #else /* no atou(), but we know the number fits into IV... */
1399 /* The only problem may be if it is negative... */
1400 SvUVX(sv) = (UV)atol(SvPVX(sv)); /* XXXX 64-bit? */
1403 else { /* Not a number. Cache 0. */
1406 if (SvTYPE(sv) < SVt_PVIV)
1407 sv_upgrade(sv, SVt_PVIV);
1408 SvUVX(sv) = 0; /* We assume that 0s have the
1409 same bitmap in IV and UV. */
1411 (void)SvIsUV_on(sv);
1412 if (ckWARN(WARN_NUMERIC))
1417 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1419 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1420 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1422 if (SvTYPE(sv) < SVt_IV)
1423 /* Typically the caller expects that sv_any is not NULL now. */
1424 sv_upgrade(sv, SVt_IV);
1428 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%lx 2uv(%lu)\n",
1429 (unsigned long)sv,SvUVX(sv)));
1430 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
1434 Perl_sv_2nv(pTHX_ register SV *sv)
1438 if (SvGMAGICAL(sv)) {
1442 if (SvPOKp(sv) && SvLEN(sv)) {
1444 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
1446 return Atof(SvPVX(sv));
1450 return (NV)SvUVX(sv);
1452 return (NV)SvIVX(sv);
1455 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1457 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1458 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1463 if (SvTHINKFIRST(sv)) {
1466 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)))
1467 return SvNV(tmpstr);
1468 return (NV)(unsigned long)SvRV(sv);
1470 if (SvREADONLY(sv)) {
1472 if (SvPOKp(sv) && SvLEN(sv)) {
1473 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
1475 return Atof(SvPVX(sv));
1479 return (NV)SvUVX(sv);
1481 return (NV)SvIVX(sv);
1483 if (ckWARN(WARN_UNINITIALIZED))
1484 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1488 if (SvTYPE(sv) < SVt_NV) {
1489 if (SvTYPE(sv) == SVt_IV)
1490 sv_upgrade(sv, SVt_PVNV);
1492 sv_upgrade(sv, SVt_NV);
1494 RESTORE_NUMERIC_STANDARD();
1495 PerlIO_printf(Perl_debug_log,
1496 #if defined(USE_LONG_DOUBLE)
1501 (unsigned long)sv,SvNVX(sv)));
1502 RESTORE_NUMERIC_LOCAL();
1505 else if (SvTYPE(sv) < SVt_PVNV)
1506 sv_upgrade(sv, SVt_PVNV);
1508 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
1510 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
1512 else if (SvPOKp(sv) && SvLEN(sv)) {
1514 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
1516 SvNVX(sv) = Atof(SvPVX(sv));
1520 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1521 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1522 if (SvTYPE(sv) < SVt_NV)
1523 /* Typically the caller expects that sv_any is not NULL now. */
1524 sv_upgrade(sv, SVt_NV);
1529 RESTORE_NUMERIC_STANDARD();
1530 PerlIO_printf(Perl_debug_log,
1531 #if defined(USE_LONG_DOUBLE)
1536 (unsigned long)sv,SvNVX(sv)));
1537 RESTORE_NUMERIC_LOCAL();
1543 S_asIV(pTHX_ SV *sv)
1545 I32 numtype = looks_like_number(sv);
1548 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
1549 return atol(SvPVX(sv)); /* XXXX 64-bit? */
1552 if (ckWARN(WARN_NUMERIC))
1555 d = Atof(SvPVX(sv));
1560 S_asUV(pTHX_ SV *sv)
1562 I32 numtype = looks_like_number(sv);
1565 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
1566 return strtoul(SvPVX(sv), Null(char**), 10);
1570 if (ckWARN(WARN_NUMERIC))
1573 return U_V(Atof(SvPVX(sv)));
1577 * Returns a combination of (advisory only - can get false negatives)
1578 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF, IS_NUMBER_NOT_IV,
1580 * 0 if does not look like number.
1582 * In fact possible values are 0 and
1583 * IS_NUMBER_TO_INT_BY_ATOL 123
1584 * IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_IV 123.1
1585 * IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV 123e0
1586 * with a possible addition of IS_NUMBER_NEG.
1590 Perl_looks_like_number(pTHX_ SV *sv)
1592 /* XXXX 64-bit? It may be not IS_NUMBER_TO_INT_BY_ATOL, but
1593 * using atof() may lose precision. */
1595 register char *send;
1596 register char *sbegin;
1597 register char *nbegin;
1605 else if (SvPOKp(sv))
1606 sbegin = SvPV(sv, len);
1609 send = sbegin + len;
1616 numtype = IS_NUMBER_NEG;
1623 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can be converted
1624 * to _integer_ with atol() and IS_NUMBER_TO_INT_BY_ATOF if you need
1628 /* next must be digit or the radix separator */
1632 } while (isDIGIT(*s));
1634 if (s - nbegin >= TYPE_DIGITS(IV)) /* Cannot cache ato[ul]() */
1635 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV;
1637 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
1640 #ifdef USE_LOCALE_NUMERIC
1641 || IS_NUMERIC_RADIX(*s)
1645 numtype |= IS_NUMBER_NOT_IV;
1646 while (isDIGIT(*s)) /* optional digits after the radix */
1651 #ifdef USE_LOCALE_NUMERIC
1652 || IS_NUMERIC_RADIX(*s)
1656 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_IV;
1657 /* no digits before the radix means we need digits after it */
1661 } while (isDIGIT(*s));
1669 /* we can have an optional exponent part */
1670 if (*s == 'e' || *s == 'E') {
1671 numtype &= ~IS_NUMBER_NEG;
1672 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV;
1674 if (*s == '+' || *s == '-')
1679 } while (isDIGIT(*s));
1688 if (len == 10 && memEQ(sbegin, "0 but true", 10))
1689 return IS_NUMBER_TO_INT_BY_ATOL;
1694 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
1697 return sv_2pv(sv, &n_a);
1700 /* We assume that buf is at least TYPE_CHARS(UV) long. */
1702 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
1705 char *ptr = buf + TYPE_CHARS(UV);
1720 *--ptr = '0' + (uv % 10);
1729 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
1734 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
1735 char *tmpbuf = tbuf;
1741 if (SvGMAGICAL(sv)) {
1747 if (SvIOKp(sv)) { /* XXXX 64-bit? */
1749 (void)sprintf(tmpbuf,"%lu",(unsigned long)SvUVX(sv));
1751 (void)sprintf(tmpbuf,"%ld",(long)SvIVX(sv));
1756 Gconvert(SvNVX(sv), DBL_DIG, 0, tmpbuf);
1761 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1763 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1764 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1770 if (SvTHINKFIRST(sv)) {
1773 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)))
1774 return SvPV(tmpstr,*lp);
1781 switch (SvTYPE(sv)) {
1783 if ( ((SvFLAGS(sv) &
1784 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
1785 == (SVs_OBJECT|SVs_RMG))
1786 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
1787 && (mg = mg_find(sv, 'r'))) {
1789 regexp *re = (regexp *)mg->mg_obj;
1792 char *fptr = "msix";
1797 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
1799 while(ch = *fptr++) {
1801 reflags[left++] = ch;
1804 reflags[right--] = ch;
1809 reflags[left] = '-';
1813 mg->mg_len = re->prelen + 4 + left;
1814 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
1815 Copy("(?", mg->mg_ptr, 2, char);
1816 Copy(reflags, mg->mg_ptr+2, left, char);
1817 Copy(":", mg->mg_ptr+left+2, 1, char);
1818 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
1819 mg->mg_ptr[mg->mg_len - 1] = ')';
1820 mg->mg_ptr[mg->mg_len] = 0;
1822 PL_reginterp_cnt += re->program[0].next_off;
1834 case SVt_PVBM: s = "SCALAR"; break;
1835 case SVt_PVLV: s = "LVALUE"; break;
1836 case SVt_PVAV: s = "ARRAY"; break;
1837 case SVt_PVHV: s = "HASH"; break;
1838 case SVt_PVCV: s = "CODE"; break;
1839 case SVt_PVGV: s = "GLOB"; break;
1840 case SVt_PVFM: s = "FORMAT"; break;
1841 case SVt_PVIO: s = "IO"; break;
1842 default: s = "UNKNOWN"; break;
1846 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
1850 Perl_sv_catpvf(aTHX_ tsv, "(0x%lx)", (unsigned long)sv);
1856 if (SvREADONLY(sv)) {
1857 if (SvNOKp(sv)) { /* See note in sv_2uv() */
1858 /* XXXX 64-bit? IV may have better precision... */
1859 Gconvert(SvNVX(sv), DBL_DIG, 0, tmpbuf);
1867 tmpbuf = uiv_2buf(tbuf, 0, SvUVX(sv), 1, &ebuf);
1869 tmpbuf = uiv_2buf(tbuf, SvIVX(sv), 0, 0, &ebuf);
1876 if (ckWARN(WARN_UNINITIALIZED))
1877 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1883 if (SvNOKp(sv)) { /* See note in sv_2uv() */
1884 /* XXXX 64-bit? IV may have better precision... */
1885 if (SvTYPE(sv) < SVt_PVNV)
1886 sv_upgrade(sv, SVt_PVNV);
1889 olderrno = errno; /* some Xenix systems wipe out errno here */
1891 if (SvNVX(sv) == 0.0)
1892 (void)strcpy(s,"0");
1896 Gconvert(SvNVX(sv), DBL_DIG, 0, s);
1899 #ifdef FIXNEGATIVEZERO
1900 if (*s == '-' && s[1] == '0' && !s[2])
1909 else if (SvIOKp(sv)) {
1910 U32 isIOK = SvIOK(sv);
1911 char buf[TYPE_CHARS(UV)];
1914 if (SvTYPE(sv) < SVt_PVIV)
1915 sv_upgrade(sv, SVt_PVIV);
1917 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
1918 sv_setpvn(sv, ptr, ebuf - ptr);
1922 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
1923 sv_setpvn(sv, ptr, ebuf - ptr);
1933 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1934 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit);
1936 if (SvTYPE(sv) < SVt_PV)
1937 /* Typically the caller expects that sv_any is not NULL now. */
1938 sv_upgrade(sv, SVt_PV);
1941 *lp = s - SvPVX(sv);
1944 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%lx 2pv(%s)\n",(unsigned long)sv,SvPVX(sv)));
1948 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
1949 /* Sneaky stuff here */
1953 tsv = newSVpv(tmpbuf, 0);
1969 len = strlen(tmpbuf);
1971 #ifdef FIXNEGATIVEZERO
1972 if (len == 2 && t[0] == '-' && t[1] == '0') {
1977 (void)SvUPGRADE(sv, SVt_PV);
1979 s = SvGROW(sv, len + 1);
1987 /* This function is only called on magical items */
1989 Perl_sv_2bool(pTHX_ register SV *sv)
1999 if (SvAMAGIC(sv) && (tmpsv = AMG_CALLun(sv,bool_)))
2000 return SvTRUE(tmpsv);
2001 return SvRV(sv) != 0;
2004 register XPV* Xpvtmp;
2005 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2006 (*Xpvtmp->xpv_pv > '0' ||
2007 Xpvtmp->xpv_cur > 1 ||
2008 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2015 return SvIVX(sv) != 0;
2018 return SvNVX(sv) != 0.0;
2025 /* Note: sv_setsv() should not be called with a source string that needs
2026 * to be reused, since it may destroy the source string if it is marked
2031 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
2034 register U32 sflags;
2040 SV_CHECK_THINKFIRST(dstr);
2042 sstr = &PL_sv_undef;
2043 stype = SvTYPE(sstr);
2044 dtype = SvTYPE(dstr);
2048 /* There's a lot of redundancy below but we're going for speed here */
2053 if (dtype != SVt_PVGV) {
2054 (void)SvOK_off(dstr);
2062 sv_upgrade(dstr, SVt_IV);
2065 sv_upgrade(dstr, SVt_PVNV);
2069 sv_upgrade(dstr, SVt_PVIV);
2072 (void)SvIOK_only(dstr);
2073 SvIVX(dstr) = SvIVX(sstr);
2086 sv_upgrade(dstr, SVt_NV);
2091 sv_upgrade(dstr, SVt_PVNV);
2094 SvNVX(dstr) = SvNVX(sstr);
2095 (void)SvNOK_only(dstr);
2103 sv_upgrade(dstr, SVt_RV);
2104 else if (dtype == SVt_PVGV &&
2105 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
2108 if (PL_curcop->cop_stash != GvSTASH(dstr))
2109 GvIMPORTED_on(dstr);
2119 sv_upgrade(dstr, SVt_PV);
2122 if (dtype < SVt_PVIV)
2123 sv_upgrade(dstr, SVt_PVIV);
2126 if (dtype < SVt_PVNV)
2127 sv_upgrade(dstr, SVt_PVNV);
2134 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
2135 PL_op_name[PL_op->op_type]);
2137 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
2141 if (dtype <= SVt_PVGV) {
2143 if (dtype != SVt_PVGV) {
2144 char *name = GvNAME(sstr);
2145 STRLEN len = GvNAMELEN(sstr);
2146 sv_upgrade(dstr, SVt_PVGV);
2147 sv_magic(dstr, dstr, '*', name, len);
2148 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
2149 GvNAME(dstr) = savepvn(name, len);
2150 GvNAMELEN(dstr) = len;
2151 SvFAKE_on(dstr); /* can coerce to non-glob */
2153 /* ahem, death to those who redefine active sort subs */
2154 else if (PL_curstackinfo->si_type == PERLSI_SORT
2155 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
2156 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
2158 (void)SvOK_off(dstr);
2159 GvINTRO_off(dstr); /* one-shot flag */
2161 GvGP(dstr) = gp_ref(GvGP(sstr));
2163 if (PL_curcop->cop_stash != GvSTASH(dstr))
2164 GvIMPORTED_on(dstr);
2171 if (SvGMAGICAL(sstr)) {
2173 if (SvTYPE(sstr) != stype) {
2174 stype = SvTYPE(sstr);
2175 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
2179 if (stype == SVt_PVLV)
2180 (void)SvUPGRADE(dstr, SVt_PVNV);
2182 (void)SvUPGRADE(dstr, stype);
2185 sflags = SvFLAGS(sstr);
2187 if (sflags & SVf_ROK) {
2188 if (dtype >= SVt_PV) {
2189 if (dtype == SVt_PVGV) {
2190 SV *sref = SvREFCNT_inc(SvRV(sstr));
2192 int intro = GvINTRO(dstr);
2196 GvGP(dstr)->gp_refcnt--;
2197 GvINTRO_off(dstr); /* one-shot flag */
2198 Newz(602,gp, 1, GP);
2199 GvGP(dstr) = gp_ref(gp);
2200 GvSV(dstr) = NEWSV(72,0);
2201 GvLINE(dstr) = PL_curcop->cop_line;
2202 GvEGV(dstr) = (GV*)dstr;
2205 switch (SvTYPE(sref)) {
2208 SAVESPTR(GvAV(dstr));
2210 dref = (SV*)GvAV(dstr);
2211 GvAV(dstr) = (AV*)sref;
2212 if (PL_curcop->cop_stash != GvSTASH(dstr))
2213 GvIMPORTED_AV_on(dstr);
2217 SAVESPTR(GvHV(dstr));
2219 dref = (SV*)GvHV(dstr);
2220 GvHV(dstr) = (HV*)sref;
2221 if (PL_curcop->cop_stash != GvSTASH(dstr))
2222 GvIMPORTED_HV_on(dstr);
2226 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
2227 SvREFCNT_dec(GvCV(dstr));
2228 GvCV(dstr) = Nullcv;
2229 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
2230 PL_sub_generation++;
2232 SAVESPTR(GvCV(dstr));
2235 dref = (SV*)GvCV(dstr);
2236 if (GvCV(dstr) != (CV*)sref) {
2237 CV* cv = GvCV(dstr);
2239 if (!GvCVGEN((GV*)dstr) &&
2240 (CvROOT(cv) || CvXSUB(cv)))
2242 SV *const_sv = cv_const_sv(cv);
2243 bool const_changed = TRUE;
2245 const_changed = sv_cmp(const_sv,
2246 op_const_sv(CvSTART((CV*)sref),
2248 /* ahem, death to those who redefine
2249 * active sort subs */
2250 if (PL_curstackinfo->si_type == PERLSI_SORT &&
2251 PL_sortcop == CvSTART(cv))
2253 "Can't redefine active sort subroutine %s",
2254 GvENAME((GV*)dstr));
2255 if (ckWARN(WARN_REDEFINE) || (const_changed && const_sv)) {
2256 if (!(CvGV(cv) && GvSTASH(CvGV(cv))
2257 && HvNAME(GvSTASH(CvGV(cv)))
2258 && strEQ(HvNAME(GvSTASH(CvGV(cv))),
2260 Perl_warner(aTHX_ WARN_REDEFINE, const_sv ?
2261 "Constant subroutine %s redefined"
2262 : "Subroutine %s redefined",
2263 GvENAME((GV*)dstr));
2266 cv_ckproto(cv, (GV*)dstr,
2267 SvPOK(sref) ? SvPVX(sref) : Nullch);
2269 GvCV(dstr) = (CV*)sref;
2270 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
2271 GvASSUMECV_on(dstr);
2272 PL_sub_generation++;
2274 if (PL_curcop->cop_stash != GvSTASH(dstr))
2275 GvIMPORTED_CV_on(dstr);
2279 SAVESPTR(GvIOp(dstr));
2281 dref = (SV*)GvIOp(dstr);
2282 GvIOp(dstr) = (IO*)sref;
2286 SAVESPTR(GvSV(dstr));
2288 dref = (SV*)GvSV(dstr);
2290 if (PL_curcop->cop_stash != GvSTASH(dstr))
2291 GvIMPORTED_SV_on(dstr);
2302 (void)SvOOK_off(dstr); /* backoff */
2304 Safefree(SvPVX(dstr));
2305 SvLEN(dstr)=SvCUR(dstr)=0;
2308 (void)SvOK_off(dstr);
2309 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
2311 if (sflags & SVp_NOK) {
2313 SvNVX(dstr) = SvNVX(sstr);
2315 if (sflags & SVp_IOK) {
2316 (void)SvIOK_on(dstr);
2317 SvIVX(dstr) = SvIVX(sstr);
2321 if (SvAMAGIC(sstr)) {
2325 else if (sflags & SVp_POK) {
2328 * Check to see if we can just swipe the string. If so, it's a
2329 * possible small lose on short strings, but a big win on long ones.
2330 * It might even be a win on short strings if SvPVX(dstr)
2331 * has to be allocated and SvPVX(sstr) has to be freed.
2334 if (SvTEMP(sstr) && /* slated for free anyway? */
2335 SvREFCNT(sstr) == 1 && /* and no other references to it? */
2336 !(sflags & SVf_OOK)) /* and not involved in OOK hack? */
2338 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
2340 SvFLAGS(dstr) &= ~SVf_OOK;
2341 Safefree(SvPVX(dstr) - SvIVX(dstr));
2343 else if (SvLEN(dstr))
2344 Safefree(SvPVX(dstr));
2346 (void)SvPOK_only(dstr);
2347 SvPV_set(dstr, SvPVX(sstr));
2348 SvLEN_set(dstr, SvLEN(sstr));
2349 SvCUR_set(dstr, SvCUR(sstr));
2351 (void)SvOK_off(sstr);
2352 SvPV_set(sstr, Nullch);
2357 else { /* have to copy actual string */
2358 STRLEN len = SvCUR(sstr);
2360 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
2361 Move(SvPVX(sstr),SvPVX(dstr),len,char);
2362 SvCUR_set(dstr, len);
2363 *SvEND(dstr) = '\0';
2364 (void)SvPOK_only(dstr);
2367 if (sflags & SVp_NOK) {
2369 SvNVX(dstr) = SvNVX(sstr);
2371 if (sflags & SVp_IOK) {
2372 (void)SvIOK_on(dstr);
2373 SvIVX(dstr) = SvIVX(sstr);
2378 else if (sflags & SVp_NOK) {
2379 SvNVX(dstr) = SvNVX(sstr);
2380 (void)SvNOK_only(dstr);
2382 (void)SvIOK_on(dstr);
2383 SvIVX(dstr) = SvIVX(sstr);
2384 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
2389 else if (sflags & SVp_IOK) {
2390 (void)SvIOK_only(dstr);
2391 SvIVX(dstr) = SvIVX(sstr);
2396 if (dtype == SVt_PVGV) {
2397 if (ckWARN(WARN_UNSAFE))
2398 Perl_warner(aTHX_ WARN_UNSAFE, "Undefined value assigned to typeglob");
2401 (void)SvOK_off(dstr);
2407 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
2409 sv_setsv(dstr,sstr);
2414 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
2416 register char *dptr;
2417 assert(len >= 0); /* STRLEN is probably unsigned, so this may
2418 elicit a warning, but it won't hurt. */
2419 SV_CHECK_THINKFIRST(sv);
2424 (void)SvUPGRADE(sv, SVt_PV);
2426 SvGROW(sv, len + 1);
2428 Move(ptr,dptr,len,char);
2431 (void)SvPOK_only(sv); /* validate pointer */
2436 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
2438 sv_setpvn(sv,ptr,len);
2443 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
2445 register STRLEN len;
2447 SV_CHECK_THINKFIRST(sv);
2453 (void)SvUPGRADE(sv, SVt_PV);
2455 SvGROW(sv, len + 1);
2456 Move(ptr,SvPVX(sv),len+1,char);
2458 (void)SvPOK_only(sv); /* validate pointer */
2463 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
2470 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
2472 SV_CHECK_THINKFIRST(sv);
2473 (void)SvUPGRADE(sv, SVt_PV);
2478 (void)SvOOK_off(sv);
2479 if (SvPVX(sv) && SvLEN(sv))
2480 Safefree(SvPVX(sv));
2481 Renew(ptr, len+1, char);
2484 SvLEN_set(sv, len+1);
2486 (void)SvPOK_only(sv); /* validate pointer */
2491 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
2493 sv_usepvn(sv,ptr,len);
2498 Perl_sv_force_normal(pTHX_ register SV *sv)
2500 if (SvREADONLY(sv)) {
2502 if (PL_curcop != &PL_compiling)
2503 Perl_croak(aTHX_ PL_no_modify);
2507 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
2512 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
2516 register STRLEN delta;
2518 if (!ptr || !SvPOKp(sv))
2520 SV_CHECK_THINKFIRST(sv);
2521 if (SvTYPE(sv) < SVt_PVIV)
2522 sv_upgrade(sv,SVt_PVIV);
2525 if (!SvLEN(sv)) { /* make copy of shared string */
2526 char *pvx = SvPVX(sv);
2527 STRLEN len = SvCUR(sv);
2528 SvGROW(sv, len + 1);
2529 Move(pvx,SvPVX(sv),len,char);
2533 SvFLAGS(sv) |= SVf_OOK;
2535 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
2536 delta = ptr - SvPVX(sv);
2544 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
2549 junk = SvPV_force(sv, tlen);
2550 SvGROW(sv, tlen + len + 1);
2553 Move(ptr,SvPVX(sv)+tlen,len,char);
2556 (void)SvPOK_only(sv); /* validate pointer */
2561 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
2563 sv_catpvn(sv,ptr,len);
2568 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
2574 if (s = SvPV(sstr, len))
2575 sv_catpvn(dstr,s,len);
2579 Perl_sv_catsv_mg(pTHX_ SV *dstr, register SV *sstr)
2581 sv_catsv(dstr,sstr);
2586 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
2588 register STRLEN len;
2594 junk = SvPV_force(sv, tlen);
2596 SvGROW(sv, tlen + len + 1);
2599 Move(ptr,SvPVX(sv)+tlen,len+1,char);
2601 (void)SvPOK_only(sv); /* validate pointer */
2606 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
2613 Perl_newSV(pTHX_ STRLEN len)
2619 sv_upgrade(sv, SVt_PV);
2620 SvGROW(sv, len + 1);
2625 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
2628 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
2632 if (SvREADONLY(sv)) {
2634 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
2635 Perl_croak(aTHX_ PL_no_modify);
2637 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
2638 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
2645 (void)SvUPGRADE(sv, SVt_PVMG);
2647 Newz(702,mg, 1, MAGIC);
2648 mg->mg_moremagic = SvMAGIC(sv);
2651 if (!obj || obj == sv || how == '#' || how == 'r')
2655 mg->mg_obj = SvREFCNT_inc(obj);
2656 mg->mg_flags |= MGf_REFCOUNTED;
2659 mg->mg_len = namlen;
2662 mg->mg_ptr = savepvn(name, namlen);
2663 else if (namlen == HEf_SVKEY)
2664 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
2668 mg->mg_virtual = &PL_vtbl_sv;
2671 mg->mg_virtual = &PL_vtbl_amagic;
2674 mg->mg_virtual = &PL_vtbl_amagicelem;
2680 mg->mg_virtual = &PL_vtbl_bm;
2683 mg->mg_virtual = &PL_vtbl_regdata;
2686 mg->mg_virtual = &PL_vtbl_regdatum;
2689 mg->mg_virtual = &PL_vtbl_env;
2692 mg->mg_virtual = &PL_vtbl_fm;
2695 mg->mg_virtual = &PL_vtbl_envelem;
2698 mg->mg_virtual = &PL_vtbl_mglob;
2701 mg->mg_virtual = &PL_vtbl_isa;
2704 mg->mg_virtual = &PL_vtbl_isaelem;
2707 mg->mg_virtual = &PL_vtbl_nkeys;
2714 mg->mg_virtual = &PL_vtbl_dbline;
2718 mg->mg_virtual = &PL_vtbl_mutex;
2720 #endif /* USE_THREADS */
2721 #ifdef USE_LOCALE_COLLATE
2723 mg->mg_virtual = &PL_vtbl_collxfrm;
2725 #endif /* USE_LOCALE_COLLATE */
2727 mg->mg_virtual = &PL_vtbl_pack;
2731 mg->mg_virtual = &PL_vtbl_packelem;
2734 mg->mg_virtual = &PL_vtbl_regexp;
2737 mg->mg_virtual = &PL_vtbl_sig;
2740 mg->mg_virtual = &PL_vtbl_sigelem;
2743 mg->mg_virtual = &PL_vtbl_taint;
2747 mg->mg_virtual = &PL_vtbl_uvar;
2750 mg->mg_virtual = &PL_vtbl_vec;
2753 mg->mg_virtual = &PL_vtbl_substr;
2756 mg->mg_virtual = &PL_vtbl_defelem;
2759 mg->mg_virtual = &PL_vtbl_glob;
2762 mg->mg_virtual = &PL_vtbl_arylen;
2765 mg->mg_virtual = &PL_vtbl_pos;
2768 mg->mg_virtual = &PL_vtbl_backref;
2770 case '~': /* Reserved for use by extensions not perl internals. */
2771 /* Useful for attaching extension internal data to perl vars. */
2772 /* Note that multiple extensions may clash if magical scalars */
2773 /* etc holding private data from one are passed to another. */
2777 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
2781 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
2785 Perl_sv_unmagic(pTHX_ SV *sv, int type)
2789 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
2792 for (mg = *mgp; mg; mg = *mgp) {
2793 if (mg->mg_type == type) {
2794 MGVTBL* vtbl = mg->mg_virtual;
2795 *mgp = mg->mg_moremagic;
2796 if (vtbl && (vtbl->svt_free != NULL))
2797 (VTBL->svt_free)(aTHX_ sv, mg);
2798 if (mg->mg_ptr && mg->mg_type != 'g')
2799 if (mg->mg_len >= 0)
2800 Safefree(mg->mg_ptr);
2801 else if (mg->mg_len == HEf_SVKEY)
2802 SvREFCNT_dec((SV*)mg->mg_ptr);
2803 if (mg->mg_flags & MGf_REFCOUNTED)
2804 SvREFCNT_dec(mg->mg_obj);
2808 mgp = &mg->mg_moremagic;
2812 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
2819 Perl_sv_rvweaken(pTHX_ SV *sv)
2822 if (!SvOK(sv)) /* let undefs pass */
2825 Perl_croak(aTHX_ "Can't weaken a nonreference");
2826 else if (SvWEAKREF(sv)) {
2828 if (ckWARN(WARN_MISC))
2829 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
2833 sv_add_backref(tsv, sv);
2840 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
2844 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
2845 av = (AV*)mg->mg_obj;
2848 sv_magic(tsv, (SV*)av, '<', NULL, 0);
2849 SvREFCNT_dec(av); /* for sv_magic */
2855 S_sv_del_backref(pTHX_ SV *sv)
2862 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
2863 Perl_croak(aTHX_ "panic: del_backref");
2864 av = (AV *)mg->mg_obj;
2869 svp[i] = &PL_sv_undef; /* XXX */
2876 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
2880 register char *midend;
2881 register char *bigend;
2887 Perl_croak(aTHX_ "Can't modify non-existent substring");
2888 SvPV_force(bigstr, curlen);
2889 if (offset + len > curlen) {
2890 SvGROW(bigstr, offset+len+1);
2891 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
2892 SvCUR_set(bigstr, offset+len);
2895 i = littlelen - len;
2896 if (i > 0) { /* string might grow */
2897 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
2898 mid = big + offset + len;
2899 midend = bigend = big + SvCUR(bigstr);
2902 while (midend > mid) /* shove everything down */
2903 *--bigend = *--midend;
2904 Move(little,big+offset,littlelen,char);
2910 Move(little,SvPVX(bigstr)+offset,len,char);
2915 big = SvPVX(bigstr);
2918 bigend = big + SvCUR(bigstr);
2920 if (midend > bigend)
2921 Perl_croak(aTHX_ "panic: sv_insert");
2923 if (mid - big > bigend - midend) { /* faster to shorten from end */
2925 Move(little, mid, littlelen,char);
2928 i = bigend - midend;
2930 Move(midend, mid, i,char);
2934 SvCUR_set(bigstr, mid - big);
2937 else if (i = mid - big) { /* faster from front */
2938 midend -= littlelen;
2940 sv_chop(bigstr,midend-i);
2945 Move(little, mid, littlelen,char);
2947 else if (littlelen) {
2948 midend -= littlelen;
2949 sv_chop(bigstr,midend);
2950 Move(little,midend,littlelen,char);
2953 sv_chop(bigstr,midend);
2958 /* make sv point to what nstr did */
2961 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
2963 U32 refcnt = SvREFCNT(sv);
2964 SV_CHECK_THINKFIRST(sv);
2965 if (SvREFCNT(nsv) != 1)
2966 Perl_warn(aTHX_ "Reference miscount in sv_replace()");
2967 if (SvMAGICAL(sv)) {
2971 sv_upgrade(nsv, SVt_PVMG);
2972 SvMAGIC(nsv) = SvMAGIC(sv);
2973 SvFLAGS(nsv) |= SvMAGICAL(sv);
2979 assert(!SvREFCNT(sv));
2980 StructCopy(nsv,sv,SV);
2981 SvREFCNT(sv) = refcnt;
2982 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
2987 Perl_sv_clear(pTHX_ register SV *sv)
2991 assert(SvREFCNT(sv) == 0);
2995 if (PL_defstash) { /* Still have a symbol table? */
3000 Zero(&tmpref, 1, SV);
3001 sv_upgrade(&tmpref, SVt_RV);
3003 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
3004 SvREFCNT(&tmpref) = 1;
3007 stash = SvSTASH(sv);
3008 destructor = gv_fetchmethod(SvSTASH(sv), "DESTROY");
3011 PUSHSTACKi(PERLSI_DESTROY);
3012 SvRV(&tmpref) = SvREFCNT_inc(sv);
3017 call_sv((SV*)GvCV(destructor),
3018 G_DISCARD|G_EVAL|G_KEEPERR);
3024 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
3026 del_XRV(SvANY(&tmpref));
3029 if (PL_in_clean_objs)
3030 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
3032 /* DESTROY gave object new lease on life */
3038 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
3039 SvOBJECT_off(sv); /* Curse the object. */
3040 if (SvTYPE(sv) != SVt_PVIO)
3041 --PL_sv_objcount; /* XXX Might want something more general */
3044 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
3047 switch (SvTYPE(sv)) {
3050 IoIFP(sv) != PerlIO_stdin() &&
3051 IoIFP(sv) != PerlIO_stdout() &&
3052 IoIFP(sv) != PerlIO_stderr())
3057 PerlDir_close(IoDIRP(sv));
3060 Safefree(IoTOP_NAME(sv));
3061 Safefree(IoFMT_NAME(sv));
3062 Safefree(IoBOTTOM_NAME(sv));
3077 SvREFCNT_dec(LvTARG(sv));
3081 Safefree(GvNAME(sv));
3082 /* cannot decrease stash refcount yet, as we might recursively delete
3083 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
3084 of stash until current sv is completely gone.
3085 -- JohnPC, 27 Mar 1998 */
3086 stash = GvSTASH(sv);
3092 (void)SvOOK_off(sv);
3100 SvREFCNT_dec(SvRV(sv));
3102 else if (SvPVX(sv) && SvLEN(sv))
3103 Safefree(SvPVX(sv));
3113 switch (SvTYPE(sv)) {
3129 del_XPVIV(SvANY(sv));
3132 del_XPVNV(SvANY(sv));
3135 del_XPVMG(SvANY(sv));
3138 del_XPVLV(SvANY(sv));
3141 del_XPVAV(SvANY(sv));
3144 del_XPVHV(SvANY(sv));
3147 del_XPVCV(SvANY(sv));
3150 del_XPVGV(SvANY(sv));
3151 /* code duplication for increased performance. */
3152 SvFLAGS(sv) &= SVf_BREAK;
3153 SvFLAGS(sv) |= SVTYPEMASK;
3154 /* decrease refcount of the stash that owns this GV, if any */
3156 SvREFCNT_dec(stash);
3157 return; /* not break, SvFLAGS reset already happened */
3159 del_XPVBM(SvANY(sv));
3162 del_XPVFM(SvANY(sv));
3165 del_XPVIO(SvANY(sv));
3168 SvFLAGS(sv) &= SVf_BREAK;
3169 SvFLAGS(sv) |= SVTYPEMASK;
3173 Perl_sv_newref(pTHX_ SV *sv)
3176 ATOMIC_INC(SvREFCNT(sv));
3181 Perl_sv_free(pTHX_ SV *sv)
3183 int refcount_is_zero;
3187 if (SvREFCNT(sv) == 0) {
3188 if (SvFLAGS(sv) & SVf_BREAK)
3190 if (PL_in_clean_all) /* All is fair */
3192 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
3193 /* make sure SvREFCNT(sv)==0 happens very seldom */
3194 SvREFCNT(sv) = (~(U32)0)/2;
3197 Perl_warn(aTHX_ "Attempt to free unreferenced scalar");
3200 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
3201 if (!refcount_is_zero)
3205 Perl_warn(aTHX_ "Attempt to free temp prematurely: SV 0x%lx", (unsigned long)sv);
3209 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
3210 /* make sure SvREFCNT(sv)==0 happens very seldom */
3211 SvREFCNT(sv) = (~(U32)0)/2;
3220 Perl_sv_len(pTHX_ register SV *sv)
3229 len = mg_length(sv);
3231 junk = SvPV(sv, len);
3236 Perl_sv_len_utf8(pTHX_ register SV *sv)
3247 len = mg_length(sv);
3250 s = (U8*)SvPV(sv, len);
3261 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
3266 I32 uoffset = *offsetp;
3272 start = s = (U8*)SvPV(sv, len);
3274 while (s < send && uoffset--)
3278 *offsetp = s - start;
3282 while (s < send && ulen--)
3292 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
3301 s = (U8*)SvPV(sv, len);
3303 Perl_croak(aTHX_ "panic: bad byte offset");
3304 send = s + *offsetp;
3311 Perl_warn(aTHX_ "Malformed UTF-8 character");
3319 Perl_sv_eq(pTHX_ register SV *str1, register SV *str2)
3331 pv1 = SvPV(str1, cur1);
3336 pv2 = SvPV(str2, cur2);
3341 return memEQ(pv1, pv2, cur1);
3345 Perl_sv_cmp(pTHX_ register SV *str1, register SV *str2)
3348 char *pv1 = str1 ? SvPV(str1, cur1) : (char *) NULL;
3350 char *pv2 = str2 ? SvPV(str2, cur2) : (char *) NULL;
3354 return cur2 ? -1 : 0;
3359 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
3362 return retval < 0 ? -1 : 1;
3367 return cur1 < cur2 ? -1 : 1;
3371 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
3373 #ifdef USE_LOCALE_COLLATE
3379 if (PL_collation_standard)
3383 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
3385 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
3387 if (!pv1 || !len1) {
3398 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
3401 return retval < 0 ? -1 : 1;
3404 * When the result of collation is equality, that doesn't mean
3405 * that there are no differences -- some locales exclude some
3406 * characters from consideration. So to avoid false equalities,
3407 * we use the raw string as a tiebreaker.
3413 #endif /* USE_LOCALE_COLLATE */
3415 return sv_cmp(sv1, sv2);
3418 #ifdef USE_LOCALE_COLLATE
3420 * Any scalar variable may carry an 'o' magic that contains the
3421 * scalar data of the variable transformed to such a format that
3422 * a normal memory comparison can be used to compare the data
3423 * according to the locale settings.
3426 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
3430 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
3431 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
3436 Safefree(mg->mg_ptr);
3438 if ((xf = mem_collxfrm(s, len, &xlen))) {
3439 if (SvREADONLY(sv)) {
3442 return xf + sizeof(PL_collation_ix);
3445 sv_magic(sv, 0, 'o', 0, 0);
3446 mg = mg_find(sv, 'o');
3459 if (mg && mg->mg_ptr) {
3461 return mg->mg_ptr + sizeof(PL_collation_ix);
3469 #endif /* USE_LOCALE_COLLATE */
3472 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
3477 register STDCHAR rslast;
3478 register STDCHAR *bp;
3482 SV_CHECK_THINKFIRST(sv);
3483 (void)SvUPGRADE(sv, SVt_PV);
3487 if (RsSNARF(PL_rs)) {
3491 else if (RsRECORD(PL_rs)) {
3492 I32 recsize, bytesread;
3495 /* Grab the size of the record we're getting */
3496 recsize = SvIV(SvRV(PL_rs));
3497 (void)SvPOK_only(sv); /* Validate pointer */
3498 buffer = SvGROW(sv, recsize + 1);
3501 /* VMS wants read instead of fread, because fread doesn't respect */
3502 /* RMS record boundaries. This is not necessarily a good thing to be */
3503 /* doing, but we've got no other real choice */
3504 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
3506 bytesread = PerlIO_read(fp, buffer, recsize);
3508 SvCUR_set(sv, bytesread);
3509 buffer[bytesread] = '\0';
3510 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
3512 else if (RsPARA(PL_rs)) {
3517 rsptr = SvPV(PL_rs, rslen);
3518 rslast = rslen ? rsptr[rslen - 1] : '\0';
3520 if (RsPARA(PL_rs)) { /* have to do this both before and after */
3521 do { /* to make sure file boundaries work right */
3524 i = PerlIO_getc(fp);
3528 PerlIO_ungetc(fp,i);
3534 /* See if we know enough about I/O mechanism to cheat it ! */
3536 /* This used to be #ifdef test - it is made run-time test for ease
3537 of abstracting out stdio interface. One call should be cheap
3538 enough here - and may even be a macro allowing compile
3542 if (PerlIO_fast_gets(fp)) {
3545 * We're going to steal some values from the stdio struct
3546 * and put EVERYTHING in the innermost loop into registers.
3548 register STDCHAR *ptr;
3552 #if defined(VMS) && defined(PERLIO_IS_STDIO)
3553 /* An ungetc()d char is handled separately from the regular
3554 * buffer, so we getc() it back out and stuff it in the buffer.
3556 i = PerlIO_getc(fp);
3557 if (i == EOF) return 0;
3558 *(--((*fp)->_ptr)) = (unsigned char) i;
3562 /* Here is some breathtakingly efficient cheating */
3564 cnt = PerlIO_get_cnt(fp); /* get count into register */
3565 (void)SvPOK_only(sv); /* validate pointer */
3566 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
3567 if (cnt > 80 && SvLEN(sv) > append) {
3568 shortbuffered = cnt - SvLEN(sv) + append + 1;
3569 cnt -= shortbuffered;
3573 /* remember that cnt can be negative */
3574 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
3579 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
3580 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
3581 DEBUG_P(PerlIO_printf(Perl_debug_log,
3582 "Screamer: entering, ptr=%ld, cnt=%ld\n",(long)ptr,(long)cnt));
3583 DEBUG_P(PerlIO_printf(Perl_debug_log,
3584 "Screamer: entering: FILE * thinks ptr=%ld, cnt=%ld, base=%ld\n",
3585 (long)PerlIO_get_ptr(fp), (long)PerlIO_get_cnt(fp),
3586 (long)(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
3591 while (cnt > 0) { /* this | eat */
3593 if ((*bp++ = *ptr++) == rslast) /* really | dust */
3594 goto thats_all_folks; /* screams | sed :-) */
3598 Copy(ptr, bp, cnt, char); /* this | eat */
3599 bp += cnt; /* screams | dust */
3600 ptr += cnt; /* louder | sed :-) */
3605 if (shortbuffered) { /* oh well, must extend */
3606 cnt = shortbuffered;
3608 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
3610 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3611 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
3615 DEBUG_P(PerlIO_printf(Perl_debug_log,
3616 "Screamer: going to getc, ptr=%ld, cnt=%ld\n",(long)ptr,(long)cnt));
3617 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
3618 DEBUG_P(PerlIO_printf(Perl_debug_log,
3619 "Screamer: pre: FILE * thinks ptr=%ld, cnt=%ld, base=%ld\n",
3620 (long)PerlIO_get_ptr(fp), (long)PerlIO_get_cnt(fp),
3621 (long)(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
3622 /* This used to call 'filbuf' in stdio form, but as that behaves like
3623 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
3624 another abstraction. */
3625 i = PerlIO_getc(fp); /* get more characters */
3626 DEBUG_P(PerlIO_printf(Perl_debug_log,
3627 "Screamer: post: FILE * thinks ptr=%ld, cnt=%ld, base=%ld\n",
3628 (long)PerlIO_get_ptr(fp), (long)PerlIO_get_cnt(fp),
3629 (long)(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
3630 cnt = PerlIO_get_cnt(fp);
3631 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
3632 DEBUG_P(PerlIO_printf(Perl_debug_log,
3633 "Screamer: after getc, ptr=%ld, cnt=%ld\n",(long)ptr,(long)cnt));
3635 if (i == EOF) /* all done for ever? */
3636 goto thats_really_all_folks;
3638 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
3640 SvGROW(sv, bpx + cnt + 2);
3641 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
3643 *bp++ = i; /* store character from PerlIO_getc */
3645 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
3646 goto thats_all_folks;
3650 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
3651 memNE((char*)bp - rslen, rsptr, rslen))
3652 goto screamer; /* go back to the fray */
3653 thats_really_all_folks:
3655 cnt += shortbuffered;
3656 DEBUG_P(PerlIO_printf(Perl_debug_log,
3657 "Screamer: quitting, ptr=%ld, cnt=%ld\n",(long)ptr,(long)cnt));
3658 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
3659 DEBUG_P(PerlIO_printf(Perl_debug_log,
3660 "Screamer: end: FILE * thinks ptr=%ld, cnt=%ld, base=%ld\n",
3661 (long)PerlIO_get_ptr(fp), (long)PerlIO_get_cnt(fp),
3662 (long)(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
3664 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
3665 DEBUG_P(PerlIO_printf(Perl_debug_log,
3666 "Screamer: done, len=%ld, string=|%.*s|\n",
3667 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
3672 /*The big, slow, and stupid way */
3675 /* Need to work around EPOC SDK features */
3676 /* On WINS: MS VC5 generates calls to _chkstk, */
3677 /* if a `large' stack frame is allocated */
3678 /* gcc on MARM does not generate calls like these */
3684 register STDCHAR *bpe = buf + sizeof(buf);
3686 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
3687 ; /* keep reading */
3691 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
3692 /* Accomodate broken VAXC compiler, which applies U8 cast to
3693 * both args of ?: operator, causing EOF to change into 255
3695 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
3699 sv_catpvn(sv, (char *) buf, cnt);
3701 sv_setpvn(sv, (char *) buf, cnt);
3703 if (i != EOF && /* joy */
3705 SvCUR(sv) < rslen ||
3706 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
3710 * If we're reading from a TTY and we get a short read,
3711 * indicating that the user hit his EOF character, we need
3712 * to notice it now, because if we try to read from the TTY
3713 * again, the EOF condition will disappear.
3715 * The comparison of cnt to sizeof(buf) is an optimization
3716 * that prevents unnecessary calls to feof().
3720 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
3725 if (RsPARA(PL_rs)) { /* have to do this both before and after */
3726 while (i != EOF) { /* to make sure file boundaries work right */
3727 i = PerlIO_getc(fp);
3729 PerlIO_ungetc(fp,i);
3736 win32_strip_return(sv);
3739 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
3744 Perl_sv_inc(pTHX_ register SV *sv)
3753 if (SvTHINKFIRST(sv)) {
3754 if (SvREADONLY(sv)) {
3756 if (PL_curcop != &PL_compiling)
3757 Perl_croak(aTHX_ PL_no_modify);
3761 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
3768 flags = SvFLAGS(sv);
3769 if (flags & SVp_NOK) {
3770 (void)SvNOK_only(sv);
3774 if (flags & SVp_IOK) {
3776 if (SvUVX(sv) == UV_MAX)
3777 sv_setnv(sv, (NV)UV_MAX + 1.0);
3779 (void)SvIOK_only_UV(sv);
3782 if (SvIVX(sv) == IV_MAX)
3783 sv_setnv(sv, (NV)IV_MAX + 1.0);
3785 (void)SvIOK_only(sv);
3791 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
3792 if ((flags & SVTYPEMASK) < SVt_PVNV)
3793 sv_upgrade(sv, SVt_NV);
3795 (void)SvNOK_only(sv);
3799 while (isALPHA(*d)) d++;
3800 while (isDIGIT(*d)) d++;
3802 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0); /* punt */
3806 while (d >= SvPVX(sv)) {
3814 /* MKS: The original code here died if letters weren't consecutive.
3815 * at least it didn't have to worry about non-C locales. The
3816 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
3817 * arranged in order (although not consecutively) and that only
3818 * [A-Za-z] are accepted by isALPHA in the C locale.
3820 if (*d != 'z' && *d != 'Z') {
3821 do { ++*d; } while (!isALPHA(*d));
3824 *(d--) -= 'z' - 'a';
3829 *(d--) -= 'z' - 'a' + 1;
3833 /* oh,oh, the number grew */
3834 SvGROW(sv, SvCUR(sv) + 2);
3836 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
3845 Perl_sv_dec(pTHX_ register SV *sv)
3853 if (SvTHINKFIRST(sv)) {
3854 if (SvREADONLY(sv)) {
3856 if (PL_curcop != &PL_compiling)
3857 Perl_croak(aTHX_ PL_no_modify);
3861 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
3868 flags = SvFLAGS(sv);
3869 if (flags & SVp_NOK) {
3871 (void)SvNOK_only(sv);
3874 if (flags & SVp_IOK) {
3876 if (SvUVX(sv) == 0) {
3877 (void)SvIOK_only(sv);
3881 (void)SvIOK_only_UV(sv);
3885 if (SvIVX(sv) == IV_MIN)
3886 sv_setnv(sv, (NV)IV_MIN - 1.0);
3888 (void)SvIOK_only(sv);
3894 if (!(flags & SVp_POK)) {
3895 if ((flags & SVTYPEMASK) < SVt_PVNV)
3896 sv_upgrade(sv, SVt_NV);
3898 (void)SvNOK_only(sv);
3901 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
3904 /* Make a string that will exist for the duration of the expression
3905 * evaluation. Actually, it may have to last longer than that, but
3906 * hopefully we won't free it until it has been assigned to a
3907 * permanent location. */
3910 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
3916 sv_setsv(sv,oldstr);
3918 PL_tmps_stack[++PL_tmps_ix] = sv;
3924 Perl_sv_newmortal(pTHX)
3930 SvFLAGS(sv) = SVs_TEMP;
3932 PL_tmps_stack[++PL_tmps_ix] = sv;
3936 /* same thing without the copying */
3939 Perl_sv_2mortal(pTHX_ register SV *sv)
3944 if (SvREADONLY(sv) && SvIMMORTAL(sv))
3947 PL_tmps_stack[++PL_tmps_ix] = sv;
3953 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
3960 sv_setpvn(sv,s,len);
3965 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
3970 sv_setpvn(sv,s,len);
3974 #if defined(PERL_IMPLICIT_CONTEXT)
3976 Perl_newSVpvf_nocontext(const char* pat, ...)
3983 va_start(args, pat);
3984 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
3991 Perl_newSVpvf(pTHX_ const char* pat, ...)
3997 va_start(args, pat);
3998 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4004 Perl_newSVnv(pTHX_ NV n)
4014 Perl_newSViv(pTHX_ IV i)
4024 Perl_newRV_noinc(pTHX_ SV *tmpRef)
4030 sv_upgrade(sv, SVt_RV);
4038 Perl_newRV(pTHX_ SV *tmpRef)
4040 return newRV_noinc(SvREFCNT_inc(tmpRef));
4043 /* make an exact duplicate of old */
4046 Perl_newSVsv(pTHX_ register SV *old)
4052 if (SvTYPE(old) == SVTYPEMASK) {
4053 Perl_warn(aTHX_ "semi-panic: attempt to dup freed string");
4068 Perl_sv_reset(pTHX_ register char *s, HV *stash)
4081 if (!*s) { /* reset ?? searches */
4082 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
4083 pm->op_pmdynflags &= ~PMdf_USED;
4088 /* reset variables */
4090 if (!HvARRAY(stash))
4093 Zero(todo, 256, char);
4100 for ( ; i <= max; i++) {
4103 for (i = 0; i <= (I32) HvMAX(stash); i++) {
4104 for (entry = HvARRAY(stash)[i];
4106 entry = HeNEXT(entry))
4108 if (!todo[(U8)*HeKEY(entry)])
4110 gv = (GV*)HeVAL(entry);
4112 if (SvTHINKFIRST(sv)) {
4113 if (!SvREADONLY(sv) && SvROK(sv))
4118 if (SvTYPE(sv) >= SVt_PV) {
4120 if (SvPVX(sv) != Nullch)
4127 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
4129 #ifndef VMS /* VMS has no environ array */
4131 environ[0] = Nullch;
4140 Perl_sv_2io(pTHX_ SV *sv)
4146 switch (SvTYPE(sv)) {
4154 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
4158 Perl_croak(aTHX_ PL_no_usym, "filehandle");
4160 return sv_2io(SvRV(sv));
4161 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
4167 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
4174 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
4181 return *gvp = Nullgv, Nullcv;
4182 switch (SvTYPE(sv)) {
4202 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
4203 tryAMAGICunDEREF(to_cv);
4206 if (SvTYPE(sv) == SVt_PVCV) {
4215 Perl_croak(aTHX_ "Not a subroutine reference");
4220 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
4226 if (lref && !GvCVu(gv)) {
4229 tmpsv = NEWSV(704,0);
4230 gv_efullname3(tmpsv, gv, Nullch);
4231 /* XXX this is probably not what they think they're getting.
4232 * It has the same effect as "sub name;", i.e. just a forward
4234 newSUB(start_subparse(FALSE, 0),
4235 newSVOP(OP_CONST, 0, tmpsv),
4240 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
4247 Perl_sv_true(pTHX_ register SV *sv)
4254 if ((tXpv = (XPV*)SvANY(sv)) &&
4255 (*tXpv->xpv_pv > '0' ||
4256 tXpv->xpv_cur > 1 ||
4257 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
4264 return SvIVX(sv) != 0;
4267 return SvNVX(sv) != 0.0;
4269 return sv_2bool(sv);
4275 Perl_sv_iv(pTHX_ register SV *sv)
4279 return (IV)SvUVX(sv);
4286 Perl_sv_uv(pTHX_ register SV *sv)
4291 return (UV)SvIVX(sv);
4297 Perl_sv_nv(pTHX_ register SV *sv)
4305 Perl_sv_pv(pTHX_ SV *sv)
4312 return sv_2pv(sv, &n_a);
4316 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
4322 return sv_2pv(sv, lp);
4326 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
4330 if (SvTHINKFIRST(sv) && !SvROK(sv))
4331 sv_force_normal(sv);
4337 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
4339 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
4340 PL_op_name[PL_op->op_type]);
4344 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
4349 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
4350 SvGROW(sv, len + 1);
4351 Move(s,SvPVX(sv),len,char);
4356 SvPOK_on(sv); /* validate pointer */
4358 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%lx 2pv(%s)\n",
4359 (unsigned long)sv,SvPVX(sv)));
4366 Perl_sv_reftype(pTHX_ SV *sv, int ob)
4368 if (ob && SvOBJECT(sv))
4369 return HvNAME(SvSTASH(sv));
4371 switch (SvTYPE(sv)) {
4385 case SVt_PVLV: return "LVALUE";
4386 case SVt_PVAV: return "ARRAY";
4387 case SVt_PVHV: return "HASH";
4388 case SVt_PVCV: return "CODE";
4389 case SVt_PVGV: return "GLOB";
4390 case SVt_PVFM: return "FORMAT";
4391 default: return "UNKNOWN";
4397 Perl_sv_isobject(pTHX_ SV *sv)
4412 Perl_sv_isa(pTHX_ SV *sv, const char *name)
4424 return strEQ(HvNAME(SvSTASH(sv)), name);
4428 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
4435 SV_CHECK_THINKFIRST(rv);
4438 if (SvTYPE(rv) < SVt_RV)
4439 sv_upgrade(rv, SVt_RV);
4446 HV* stash = gv_stashpv(classname, TRUE);
4447 (void)sv_bless(rv, stash);
4453 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
4456 sv_setsv(rv, &PL_sv_undef);
4460 sv_setiv(newSVrv(rv,classname), (IV)pv);
4465 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
4467 sv_setiv(newSVrv(rv,classname), iv);
4472 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
4474 sv_setnv(newSVrv(rv,classname), nv);
4479 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
4481 sv_setpvn(newSVrv(rv,classname), pv, n);
4486 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
4491 Perl_croak(aTHX_ "Can't bless non-reference value");
4493 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
4494 if (SvREADONLY(tmpRef))
4495 Perl_croak(aTHX_ PL_no_modify);
4496 if (SvOBJECT(tmpRef)) {
4497 if (SvTYPE(tmpRef) != SVt_PVIO)
4499 SvREFCNT_dec(SvSTASH(tmpRef));
4502 SvOBJECT_on(tmpRef);
4503 if (SvTYPE(tmpRef) != SVt_PVIO)
4505 (void)SvUPGRADE(tmpRef, SVt_PVMG);
4506 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
4517 S_sv_unglob(pTHX_ SV *sv)
4519 assert(SvTYPE(sv) == SVt_PVGV);
4524 SvREFCNT_dec(GvSTASH(sv));
4525 GvSTASH(sv) = Nullhv;
4527 sv_unmagic(sv, '*');
4528 Safefree(GvNAME(sv));
4530 SvFLAGS(sv) &= ~SVTYPEMASK;
4531 SvFLAGS(sv) |= SVt_PVMG;
4535 Perl_sv_unref(pTHX_ SV *sv)
4539 if (SvWEAKREF(sv)) {
4547 if (SvREFCNT(rv) != 1 || SvREADONLY(rv))
4550 sv_2mortal(rv); /* Schedule for freeing later */
4554 Perl_sv_taint(pTHX_ SV *sv)
4556 sv_magic((sv), Nullsv, 't', Nullch, 0);
4560 Perl_sv_untaint(pTHX_ SV *sv)
4562 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
4563 MAGIC *mg = mg_find(sv, 't');
4570 Perl_sv_tainted(pTHX_ SV *sv)
4572 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
4573 MAGIC *mg = mg_find(sv, 't');
4574 if (mg && ((mg->mg_len & 1) || (mg->mg_len & 2) && mg->mg_obj == sv))
4581 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
4583 char buf[TYPE_CHARS(UV)];
4585 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
4587 sv_setpvn(sv, ptr, ebuf - ptr);
4592 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
4594 char buf[TYPE_CHARS(UV)];
4596 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
4598 sv_setpvn(sv, ptr, ebuf - ptr);
4602 #if defined(PERL_IMPLICIT_CONTEXT)
4604 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
4608 va_start(args, pat);
4609 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4615 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
4619 va_start(args, pat);
4620 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4627 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
4630 va_start(args, pat);
4631 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4637 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
4640 va_start(args, pat);
4641 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4646 #if defined(PERL_IMPLICIT_CONTEXT)
4648 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
4652 va_start(args, pat);
4653 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4658 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
4662 va_start(args, pat);
4663 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4670 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
4673 va_start(args, pat);
4674 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4679 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
4682 va_start(args, pat);
4683 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4689 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *used_locale)
4691 sv_setpvn(sv, "", 0);
4692 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale);
4696 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *used_locale)
4704 static char nullstr[] = "(null)";
4706 /* no matter what, this is a string now */
4707 (void)SvPV_force(sv, origlen);
4709 /* special-case "", "%s", and "%_" */
4712 if (patlen == 2 && pat[0] == '%') {
4716 char *s = va_arg(*args, char*);
4717 sv_catpv(sv, s ? s : nullstr);
4719 else if (svix < svmax)
4720 sv_catsv(sv, *svargs);
4724 sv_catsv(sv, va_arg(*args, SV*));
4727 /* See comment on '_' below */
4732 patend = (char*)pat + patlen;
4733 for (p = (char*)pat; p < patend; p = q) {
4741 bool has_precis = FALSE;
4746 STRLEN esignlen = 0;
4748 char *eptr = Nullch;
4750 char ebuf[TYPE_DIGITS(int) * 2 + 16]; /* large enough for "%#.#f" */
4761 for (q = p; q < patend && *q != '%'; ++q) ;
4763 sv_catpvn(sv, p, q - p);
4801 case '1': case '2': case '3':
4802 case '4': case '5': case '6':
4803 case '7': case '8': case '9':
4806 width = width * 10 + (*q++ - '0');
4811 i = va_arg(*args, int);
4813 i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
4815 width = (i < 0) ? -i : i;
4826 i = va_arg(*args, int);
4828 i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
4829 precis = (i < 0) ? 0 : i;
4835 precis = precis * 10 + (*q++ - '0');
4844 #if 0 /* when quads have better support within Perl */
4845 if (*(q + 1) == 'l') {
4872 uv = va_arg(*args, int);
4874 uv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
4876 eptr = (char*)utf8buf;
4877 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
4881 c = va_arg(*args, int);
4883 c = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
4890 eptr = va_arg(*args, char*);
4892 elen = strlen(eptr);
4895 elen = sizeof nullstr - 1;
4898 else if (svix < svmax) {
4899 eptr = SvPVx(svargs[svix++], elen);
4901 if (has_precis && precis < elen) {
4903 sv_pos_u2b(svargs[svix - 1], &p, 0); /* sticks at end */
4906 if (width) { /* fudge width (can't fudge elen) */
4907 width += elen - sv_len_utf8(svargs[svix - 1]);
4915 * The "%_" hack might have to be changed someday,
4916 * if ISO or ANSI decide to use '_' for something.
4917 * So we keep it hidden from users' code.
4921 eptr = SvPVx(va_arg(*args, SV*), elen);
4924 if (has_precis && elen > precis)
4932 uv = (UV)va_arg(*args, void*);
4934 uv = (svix < svmax) ? (UV)svargs[svix++] : 0;
4945 case 'h': iv = (short)va_arg(*args, int); break;
4946 default: iv = va_arg(*args, int); break;
4947 case 'l': iv = va_arg(*args, long);