3 * Copyright (c) 1991-1997, 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.
18 /* Use an overridden DBL_DIG */
22 # define DBL_DIG OVR_DBL_DIG
24 /* The following is all to get DBL_DIG, in order to pick a nice
25 default value for printing floating point numbers in Gconvert.
35 #define DBL_DIG 15 /* A guess that works lots of places */
39 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE) && !defined(__QNX__)
43 static IV asIV _((SV* sv));
44 static UV asUV _((SV* sv));
45 static SV *more_sv _((void));
46 static XPVIV *more_xiv _((void));
47 static XPVNV *more_xnv _((void));
48 static XPV *more_xpv _((void));
49 static XRV *more_xrv _((void));
50 static XPVIV *new_xiv _((void));
51 static XPVNV *new_xnv _((void));
52 static XPV *new_xpv _((void));
53 static XRV *new_xrv _((void));
54 static void del_xiv _((XPVIV* p));
55 static void del_xnv _((XPVNV* p));
56 static void del_xpv _((XPV* p));
57 static void del_xrv _((XRV* p));
58 static void sv_mortalgrow _((void));
59 static void sv_unglob _((SV* sv));
61 typedef void (*SVFUNC) _((SV*));
67 (p) = (SV*)safemalloc(sizeof(SV)); \
80 #define REGHASH(sv,size) ((((U32)(sv)) >> 2) % (size))
82 #define REG_REPLACE(sv,a,b) \
84 void* p = sv->sv_any; \
85 I32 h = REGHASH(sv, regsize); \
87 while (registry[i] != (a)) { \
91 die("SV registry bug"); \
96 #define REG_ADD(sv) REG_REPLACE(sv,Nullsv,sv)
97 #define REG_REMOVE(sv) REG_REPLACE(sv,sv,Nullsv)
103 if (sv_count >= (regsize >> 1))
105 SV **oldreg = registry;
106 I32 oldsize = regsize;
108 regsize = regsize ? ((regsize << 2) + 1) : 2037;
109 registry = (SV**)safemalloc(regsize * sizeof(SV*));
110 memzero(registry, regsize * sizeof(SV*));
115 for (i = 0; i < oldsize; ++i) {
116 SV* oldsv = oldreg[i];
142 for (i = 0; i < regsize; ++i) {
143 SV* sv = registry[i];
150 sv_add_arena(ptr, size, flags)
155 if (!(flags & SVf_FAKE))
162 * "A time to plant, and a time to uproot what was planted..."
165 #define plant_SV(p) \
167 SvANY(p) = (void *)sv_root; \
168 SvFLAGS(p) = SVTYPEMASK; \
173 #define uproot_SV(p) \
176 sv_root = (SV*)SvANY(p); \
203 for (sva = sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
205 svend = &sva[SvREFCNT(sva)];
206 if (p >= sv && p < svend)
210 warn("Attempt to free non-arena SV: 0x%lx", (unsigned long)p);
217 #else /* ! DEBUGGING */
219 #define del_SV(p) plant_SV(p)
221 #endif /* DEBUGGING */
224 sv_add_arena(ptr, size, flags)
232 Zero(sva, size, char);
234 /* The first SV in an arena isn't an SV. */
235 SvANY(sva) = (void *) sv_arenaroot; /* ptr to next arena */
236 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
237 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
242 svend = &sva[SvREFCNT(sva) - 1];
245 SvANY(sv) = (void *)(SV*)(sv + 1);
246 SvFLAGS(sv) = SVTYPEMASK;
250 SvFLAGS(sv) = SVTYPEMASK;
259 sv_add_arena(nice_chunk, nice_chunk_size, 0);
263 char *chunk; /* must use New here to match call to */
264 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
265 sv_add_arena(chunk, 1008, 0);
279 for (sva = sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
280 svend = &sva[SvREFCNT(sva)];
281 for (sv = sva + 1; sv < svend; ++sv) {
282 if (SvTYPE(sv) != SVTYPEMASK)
294 if (SvTYPE(sv) != SVTYPEMASK) {
295 /* XXX Perhaps this ought to go to Perl_debug_log, if DEBUGGING. */
296 PerlIO_printf(PerlIO_stderr(), "****\n");
304 visit(do_report_used);
313 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
314 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
320 /* XXX Might want to check arrays, etc. */
323 #ifndef DISABLE_DESTRUCTOR_KLUDGE
325 do_clean_named_objs(sv)
328 if (SvTYPE(sv) == SVt_PVGV && GvSV(sv))
329 do_clean_objs(GvSV(sv));
333 static bool in_clean_objs = FALSE;
338 in_clean_objs = TRUE;
339 #ifndef DISABLE_DESTRUCTOR_KLUDGE
340 visit(do_clean_named_objs);
342 visit(do_clean_objs);
343 in_clean_objs = FALSE;
350 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops:\n "), sv_dump(sv));)
351 SvFLAGS(sv) |= SVf_BREAK;
355 static bool in_clean_all = FALSE;
362 in_clean_all = FALSE;
371 /* Free arenas here, but be careful about fake ones. (We assume
372 contiguity of the fake ones with the corresponding real ones.) */
374 for (sva = sv_arenaroot; sva; sva = svanext) {
375 svanext = (SV*) SvANY(sva);
376 while (svanext && SvFAKE(svanext))
377 svanext = (SV*) SvANY(svanext);
380 Safefree((void *)sva);
394 * See comment in more_xiv() -- RAM.
396 xiv_root = (IV**)*xiv;
397 return (XPVIV*)((char*)xiv - sizeof(XPV));
406 IV** xiv = (IV**)((char*)(p) + sizeof(XPV));
407 *xiv = (IV *)xiv_root;
415 register IV** xivend;
416 XPV* ptr = (XPV*)safemalloc(1008);
417 ptr->xpv_pv = (char*)xiv_arenaroot; /* linked list of xiv arenas */
418 xiv_arenaroot = ptr; /* to keep Purify happy */
421 xivend = &xiv[1008 / sizeof(IV *) - 1];
422 xiv += (sizeof(XPV) - 1) / sizeof(IV *) + 1; /* fudge by size of XPV */
424 while (xiv < xivend) {
425 *xiv = (IV *)(xiv + 1);
438 xnv_root = *(double**)xnv;
439 return (XPVNV*)((char*)xnv - sizeof(XPVIV));
448 double* xnv = (double*)((char*)(p) + sizeof(XPVIV));
449 *(double**)xnv = xnv_root;
456 register double* xnv;
457 register double* xnvend;
458 xnv = (double*)safemalloc(1008);
459 xnvend = &xnv[1008 / sizeof(double) - 1];
460 xnv += (sizeof(XPVIV) - 1) / sizeof(double) + 1; /* fudge by sizeof XPVIV */
462 while (xnv < xnvend) {
463 *(double**)xnv = (double*)(xnv + 1);
476 xrv_root = (XRV*)xrv->xrv_rv;
486 p->xrv_rv = (SV*)xrv_root;
494 register XRV* xrvend;
495 xrv_root = (XRV*)safemalloc(1008);
497 xrvend = &xrv[1008 / sizeof(XRV) - 1];
498 while (xrv < xrvend) {
499 xrv->xrv_rv = (SV*)(xrv + 1);
512 xpv_root = (XPV*)xpv->xpv_pv;
522 p->xpv_pv = (char*)xpv_root;
530 register XPV* xpvend;
531 xpv_root = (XPV*)safemalloc(1008);
533 xpvend = &xpv[1008 / sizeof(XPV) - 1];
534 while (xpv < xpvend) {
535 xpv->xpv_pv = (char*)(xpv + 1);
543 #define new_XIV() (void*)safemalloc(sizeof(XPVIV))
544 #define del_XIV(p) free((char*)p)
546 #define new_XIV() (void*)new_xiv()
547 #define del_XIV(p) del_xiv(p)
551 #define new_XNV() (void*)safemalloc(sizeof(XPVNV))
552 #define del_XNV(p) free((char*)p)
554 #define new_XNV() (void*)new_xnv()
555 #define del_XNV(p) del_xnv(p)
559 #define new_XRV() (void*)safemalloc(sizeof(XRV))
560 #define del_XRV(p) free((char*)p)
562 #define new_XRV() (void*)new_xrv()
563 #define del_XRV(p) del_xrv(p)
567 #define new_XPV() (void*)safemalloc(sizeof(XPV))
568 #define del_XPV(p) free((char*)p)
570 #define new_XPV() (void*)new_xpv()
571 #define del_XPV(p) del_xpv(p)
574 #define new_XPVIV() (void*)safemalloc(sizeof(XPVIV))
575 #define del_XPVIV(p) free((char*)p)
577 #define new_XPVNV() (void*)safemalloc(sizeof(XPVNV))
578 #define del_XPVNV(p) free((char*)p)
580 #define new_XPVMG() (void*)safemalloc(sizeof(XPVMG))
581 #define del_XPVMG(p) free((char*)p)
583 #define new_XPVLV() (void*)safemalloc(sizeof(XPVLV))
584 #define del_XPVLV(p) free((char*)p)
586 #define new_XPVAV() (void*)safemalloc(sizeof(XPVAV))
587 #define del_XPVAV(p) free((char*)p)
589 #define new_XPVHV() (void*)safemalloc(sizeof(XPVHV))
590 #define del_XPVHV(p) free((char*)p)
592 #define new_XPVCV() (void*)safemalloc(sizeof(XPVCV))
593 #define del_XPVCV(p) free((char*)p)
595 #define new_XPVGV() (void*)safemalloc(sizeof(XPVGV))
596 #define del_XPVGV(p) free((char*)p)
598 #define new_XPVBM() (void*)safemalloc(sizeof(XPVBM))
599 #define del_XPVBM(p) free((char*)p)
601 #define new_XPVFM() (void*)safemalloc(sizeof(XPVFM))
602 #define del_XPVFM(p) free((char*)p)
604 #define new_XPVIO() (void*)safemalloc(sizeof(XPVIO))
605 #define del_XPVIO(p) free((char*)p)
620 if (SvTYPE(sv) == mt)
626 switch (SvTYPE(sv)) {
641 nv = (double)SvIVX(sv);
647 else if (mt < SVt_PVIV)
664 pv = (char*)SvRV(sv);
668 nv = (double)(unsigned long)pv;
684 else if (mt == SVt_NV)
695 del_XPVIV(SvANY(sv));
705 del_XPVNV(SvANY(sv));
715 del_XPVMG(SvANY(sv));
718 croak("Can't upgrade that kind of scalar");
723 croak("Can't upgrade to undef");
725 SvANY(sv) = new_XIV();
729 SvANY(sv) = new_XNV();
733 SvANY(sv) = new_XRV();
737 SvANY(sv) = new_XPV();
743 SvANY(sv) = new_XPVIV();
753 SvANY(sv) = new_XPVNV();
761 SvANY(sv) = new_XPVMG();
771 SvANY(sv) = new_XPVLV();
785 SvANY(sv) = new_XPVAV();
800 SvANY(sv) = new_XPVHV();
816 SvANY(sv) = new_XPVCV();
817 Zero(SvANY(sv), 1, XPVCV);
827 SvANY(sv) = new_XPVGV();
842 SvANY(sv) = new_XPVBM();
855 SvANY(sv) = new_XPVFM();
856 Zero(SvANY(sv), 1, XPVFM);
866 SvANY(sv) = new_XPVIO();
867 Zero(SvANY(sv), 1, XPVIO);
878 SvFLAGS(sv) &= ~SVTYPEMASK;
888 SV *t = sv_newmortal();
897 else if (sv == (SV*)0x55555555 || SvTYPE(sv) == 'U') {
901 else if (sv == &sv_undef || sv == &sv_no || sv == &sv_yes) {
902 if (sv == &sv_undef) {
903 sv_catpv(t, "SV_UNDEF");
904 if (!(SvFLAGS(sv) & (SVf_OK|SVf_OOK|SVs_OBJECT|
905 SVs_GMG|SVs_SMG|SVs_RMG)) &&
909 else if (sv == &sv_no) {
910 sv_catpv(t, "SV_NO");
911 if (!(SvFLAGS(sv) & (SVf_ROK|SVf_OOK|SVs_OBJECT|
912 SVs_GMG|SVs_SMG|SVs_RMG)) &&
913 !(~SvFLAGS(sv) & (SVf_POK|SVf_NOK|SVf_READONLY|
920 sv_catpv(t, "SV_YES");
921 if (!(SvFLAGS(sv) & (SVf_ROK|SVf_OOK|SVs_OBJECT|
922 SVs_GMG|SVs_SMG|SVs_RMG)) &&
923 !(~SvFLAGS(sv) & (SVf_POK|SVf_NOK|SVf_READONLY|
926 SvPVX(sv) && *SvPVX(sv) == '1' &&
932 else if (SvREFCNT(sv) == 0) {
938 if (SvCUR(t) + unref > 10) {
939 SvCUR(t) = unref + 3;
947 switch (SvTYPE(sv)) {
949 sv_catpv(t, "FREED");
953 sv_catpv(t, "UNDEF");
987 sv_catpvf(t, "CV(%s)", GvNAME(CvGV(sv)));
1007 sv_catpv(t, "(null)");
1009 sv_catpvf(t, "(%ld+\"%.127s\")",(long)SvIVX(sv),SvPVX(sv));
1011 sv_catpvf(t, "(\"%.127s\")",SvPVX(sv));
1013 else if (SvNOKp(sv)) {
1014 SET_NUMERIC_STANDARD();
1015 sv_catpvf(t, "(%g)",SvNVX(sv));
1017 else if (SvIOKp(sv))
1018 sv_catpvf(t, "(%ld)",(long)SvIVX(sv));
1037 char *s = SvPVX(sv);
1038 SvLEN(sv) += SvIVX(sv);
1039 SvPVX(sv) -= SvIVX(sv);
1041 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1043 SvFLAGS(sv) &= ~SVf_OOK;
1051 register I32 newlen;
1053 unsigned long newlen;
1058 #ifdef HAS_64K_LIMIT
1059 if (newlen >= 0x10000) {
1060 PerlIO_printf(Perl_debug_log, "Allocation too large: %lx\n", newlen);
1063 #endif /* HAS_64K_LIMIT */
1066 if (SvTYPE(sv) < SVt_PV) {
1067 sv_upgrade(sv, SVt_PV);
1070 else if (SvOOK(sv)) { /* pv is offset? */
1073 if (newlen > SvLEN(sv))
1074 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1078 if (newlen > SvLEN(sv)) { /* need more room? */
1080 Renew(s,newlen,char);
1082 New(703,s,newlen,char);
1084 SvLEN_set(sv, newlen);
1094 if (SvTHINKFIRST(sv)) {
1095 if (SvREADONLY(sv) && curcop != &compiling)
1100 switch (SvTYPE(sv)) {
1102 sv_upgrade(sv, SVt_IV);
1105 sv_upgrade(sv, SVt_PVNV);
1109 sv_upgrade(sv, SVt_PVIV);
1123 croak("Can't coerce %s to integer in %s", sv_reftype(sv,0),
1124 op_desc[op->op_type]);
1126 (void)SvIOK_only(sv); /* validate number */
1139 sv_setnv(sv, (double)u);
1147 if (SvTHINKFIRST(sv)) {
1148 if (SvREADONLY(sv) && curcop != &compiling)
1153 switch (SvTYPE(sv)) {
1156 sv_upgrade(sv, SVt_NV);
1162 sv_upgrade(sv, SVt_PVNV);
1169 (void)SvOOK_off(sv);
1182 croak("Can't coerce %s to number in %s", sv_reftype(sv,0),
1183 op_name[op->op_type]);
1186 (void)SvNOK_only(sv); /* validate number */
1197 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1198 /* each *s can expand to 4 chars + "...\0",
1199 i.e. need room for 8 chars */
1201 for (s = SvPVX(sv); *s && d < limit; s++) {
1203 if (ch & 128 && !isPRINT_LC(ch)) {
1212 else if (ch == '\r') {
1216 else if (ch == '\f') {
1220 else if (ch == '\\') {
1224 else if (isPRINT_LC(ch))
1239 warn("Argument \"%s\" isn't numeric in %s", tmpbuf,
1240 op_name[op->op_type]);
1242 warn("Argument \"%s\" isn't numeric", tmpbuf);
1251 if (SvGMAGICAL(sv)) {
1256 if (SvNVX(sv) < 0.0)
1257 return I_V(SvNVX(sv));
1259 return (IV) U_V(SvNVX(sv));
1261 if (SvPOKp(sv) && SvLEN(sv))
1264 if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1269 if (SvTHINKFIRST(sv)) {
1273 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
1274 return SvIV(tmpstr);
1275 #endif /* OVERLOAD */
1276 return (IV)SvRV(sv);
1278 if (SvREADONLY(sv)) {
1280 if (SvNVX(sv) < 0.0)
1281 return I_V(SvNVX(sv));
1283 return (IV) U_V(SvNVX(sv));
1285 if (SvPOKp(sv) && SvLEN(sv))
1292 switch (SvTYPE(sv)) {
1294 sv_upgrade(sv, SVt_IV);
1297 sv_upgrade(sv, SVt_PVIV);
1300 sv_upgrade(sv, SVt_PVNV);
1305 if (SvNVX(sv) < 0.0)
1306 SvIVX(sv) = I_V(SvNVX(sv));
1308 SvUVX(sv) = U_V(SvNVX(sv));
1310 else if (SvPOKp(sv) && SvLEN(sv)) {
1312 SvIVX(sv) = asIV(sv);
1315 if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1319 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%lx 2iv(%ld)\n",
1320 (unsigned long)sv,(long)SvIVX(sv)));
1330 if (SvGMAGICAL(sv)) {
1335 return U_V(SvNVX(sv));
1336 if (SvPOKp(sv) && SvLEN(sv))
1339 if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1344 if (SvTHINKFIRST(sv)) {
1348 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
1349 return SvUV(tmpstr);
1350 #endif /* OVERLOAD */
1351 return (UV)SvRV(sv);
1353 if (SvREADONLY(sv)) {
1355 return U_V(SvNVX(sv));
1357 if (SvPOKp(sv) && SvLEN(sv))
1364 switch (SvTYPE(sv)) {
1366 sv_upgrade(sv, SVt_IV);
1369 sv_upgrade(sv, SVt_PVIV);
1372 sv_upgrade(sv, SVt_PVNV);
1377 SvUVX(sv) = U_V(SvNVX(sv));
1379 else if (SvPOKp(sv) && SvLEN(sv)) {
1381 SvUVX(sv) = asUV(sv);
1384 if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1388 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%lx 2uv(%lu)\n",
1389 (unsigned long)sv,SvUVX(sv)));
1399 if (SvGMAGICAL(sv)) {
1403 if (SvPOKp(sv) && SvLEN(sv)) {
1404 if (dowarn && !SvIOKp(sv) && !looks_like_number(sv))
1406 SET_NUMERIC_STANDARD();
1407 return atof(SvPVX(sv));
1410 return (double)SvIVX(sv);
1412 if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1417 if (SvTHINKFIRST(sv)) {
1421 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)))
1422 return SvNV(tmpstr);
1423 #endif /* OVERLOAD */
1424 return (double)(unsigned long)SvRV(sv);
1426 if (SvREADONLY(sv)) {
1427 if (SvPOKp(sv) && SvLEN(sv)) {
1428 if (dowarn && !SvIOKp(sv) && !looks_like_number(sv))
1430 SET_NUMERIC_STANDARD();
1431 return atof(SvPVX(sv));
1434 return (double)SvIVX(sv);
1440 if (SvTYPE(sv) < SVt_NV) {
1441 if (SvTYPE(sv) == SVt_IV)
1442 sv_upgrade(sv, SVt_PVNV);
1444 sv_upgrade(sv, SVt_NV);
1445 DEBUG_c(SET_NUMERIC_STANDARD());
1446 DEBUG_c(PerlIO_printf(Perl_debug_log,
1447 "0x%lx num(%g)\n",(unsigned long)sv,SvNVX(sv)));
1449 else if (SvTYPE(sv) < SVt_PVNV)
1450 sv_upgrade(sv, SVt_PVNV);
1452 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
1454 SvNVX(sv) = (double)SvIVX(sv);
1456 else if (SvPOKp(sv) && SvLEN(sv)) {
1457 if (dowarn && !SvIOKp(sv) && !looks_like_number(sv))
1459 SET_NUMERIC_STANDARD();
1460 SvNVX(sv) = atof(SvPVX(sv));
1463 if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1468 DEBUG_c(SET_NUMERIC_STANDARD());
1469 DEBUG_c(PerlIO_printf(Perl_debug_log,
1470 "0x%lx 2nv(%g)\n",(unsigned long)sv,SvNVX(sv)));
1478 I32 numtype = looks_like_number(sv);
1482 return atol(SvPVX(sv));
1483 if (!numtype && dowarn)
1485 SET_NUMERIC_STANDARD();
1486 d = atof(SvPVX(sv));
1497 I32 numtype = looks_like_number(sv);
1500 return atol(SvPVX(sv));
1501 if (!numtype && dowarn)
1503 SET_NUMERIC_STANDARD();
1504 return U_V(atof(SvPVX(sv)));
1508 looks_like_number(sv)
1512 register char *send;
1513 register char *sbegin;
1521 else if (SvPOKp(sv))
1522 sbegin = SvPV(sv, len);
1525 send = sbegin + len;
1530 if (*s == '+' || *s == '-')
1533 /* next must be digit or '.' */
1537 } while (isDIGIT(*s));
1540 while (isDIGIT(*s)) /* optional digits after "." */
1544 else if (*s == '.') {
1546 /* no digits before '.' means we need digits after it */
1550 } while (isDIGIT(*s));
1559 * we return 1 if the number can be converted to _integer_ with atol()
1560 * and 2 if you need (int)atof().
1564 /* we can have an optional exponent part */
1565 if (*s == 'e' || *s == 'E') {
1568 if (*s == '+' || *s == '-')
1573 } while (isDIGIT(*s));
1582 if (len == 10 && memEQ(sbegin, "0 but true", 10))
1600 if (SvGMAGICAL(sv)) {
1607 (void)sprintf(tokenbuf,"%ld",(long)SvIVX(sv));
1612 SET_NUMERIC_STANDARD();
1613 Gconvert(SvNVX(sv), DBL_DIG, 0, tokenbuf);
1618 if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1624 if (SvTHINKFIRST(sv)) {
1628 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)))
1629 return SvPV(tmpstr,*lp);
1630 #endif /* OVERLOAD */
1635 switch (SvTYPE(sv)) {
1644 case SVt_PVMG: s = "SCALAR"; break;
1645 case SVt_PVLV: s = "LVALUE"; break;
1646 case SVt_PVAV: s = "ARRAY"; break;
1647 case SVt_PVHV: s = "HASH"; break;
1648 case SVt_PVCV: s = "CODE"; break;
1649 case SVt_PVGV: s = "GLOB"; break;
1650 case SVt_PVFM: s = "FORMATLINE"; break;
1651 case SVt_PVIO: s = "IO"; break;
1652 default: s = "UNKNOWN"; break;
1656 sv_setpvf(tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
1659 sv_catpvf(tsv, "(0x%lx)", (unsigned long)sv);
1665 if (SvREADONLY(sv)) {
1667 SET_NUMERIC_STANDARD();
1668 Gconvert(SvNVX(sv), DBL_DIG, 0, tokenbuf);
1673 (void)sprintf(tokenbuf,"%ld",(long)SvIVX(sv));
1683 if (!SvUPGRADE(sv, SVt_PV))
1686 if (SvTYPE(sv) < SVt_PVNV)
1687 sv_upgrade(sv, SVt_PVNV);
1690 olderrno = errno; /* some Xenix systems wipe out errno here */
1692 if (SvNVX(sv) == 0.0)
1693 (void)strcpy(s,"0");
1697 SET_NUMERIC_STANDARD();
1698 Gconvert(SvNVX(sv), DBL_DIG, 0, s);
1701 #ifdef FIXNEGATIVEZERO
1702 if (*s == '-' && s[1] == '0' && !s[2])
1711 else if (SvIOKp(sv)) {
1712 if (SvTYPE(sv) < SVt_PVIV)
1713 sv_upgrade(sv, SVt_PVIV);
1714 olderrno = errno; /* some Xenix systems wipe out errno here */
1715 sv_setpvf(sv, "%Vd", SvIVX(sv));
1720 if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1725 *lp = s - SvPVX(sv);
1728 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%lx 2pv(%s)\n",(unsigned long)sv,SvPVX(sv)));
1732 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
1733 /* Sneaky stuff here */
1737 tsv = newSVpv(tokenbuf, 0);
1753 len = strlen(tokenbuf);
1755 #ifdef FIXNEGATIVEZERO
1756 if (len == 2 && t[0] == '-' && t[1] == '0') {
1761 (void)SvUPGRADE(sv, SVt_PV);
1763 s = SvGROW(sv, len + 1);
1771 /* This function is only called on magical items */
1785 if (SvAMAGIC(sv) && (tmpsv = AMG_CALLun(sv,bool_)))
1786 return SvTRUE(tmpsv);
1788 #endif /* OVERLOAD */
1789 return SvRV(sv) != 0;
1793 if ((Xpv = (XPV*)SvANY(sv)) &&
1794 (*Xpv->xpv_pv > '0' ||
1796 (Xpv->xpv_cur && *Xpv->xpv_pv != '0')))
1803 return SvIVX(sv) != 0;
1806 return SvNVX(sv) != 0.0;
1813 /* Note: sv_setsv() should not be called with a source string that needs
1814 * to be reused, since it may destroy the source string if it is marked
1823 register U32 sflags;
1829 if (SvTHINKFIRST(dstr)) {
1830 if (SvREADONLY(dstr) && curcop != &compiling)
1837 stype = SvTYPE(sstr);
1838 dtype = SvTYPE(dstr);
1840 if (dtype == SVt_PVGV && (SvFLAGS(dstr) & SVf_FAKE)) {
1841 sv_unglob(dstr); /* so fake GLOB won't perpetuate */
1842 sv_setpvn(dstr, "", 0);
1843 (void)SvPOK_only(dstr);
1844 dtype = SvTYPE(dstr);
1849 #endif /* OVERLOAD */
1850 /* There's a lot of redundancy below but we're going for speed here */
1854 (void)SvOK_off(dstr);
1857 if (dtype != SVt_IV && dtype < SVt_PVIV) {
1859 sv_upgrade(dstr, SVt_IV);
1860 else if (dtype == SVt_NV)
1861 sv_upgrade(dstr, SVt_PVNV);
1863 sv_upgrade(dstr, SVt_PVIV);
1867 if (dtype != SVt_NV && dtype < SVt_PVNV) {
1869 sv_upgrade(dstr, SVt_NV);
1871 sv_upgrade(dstr, SVt_PVNV);
1876 sv_upgrade(dstr, SVt_RV);
1877 else if (dtype == SVt_PVGV &&
1878 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
1881 if (curcop->cop_stash != GvSTASH(dstr))
1882 GvIMPORTED_on(dstr);
1892 sv_upgrade(dstr, SVt_PV);
1895 if (dtype < SVt_PVIV)
1896 sv_upgrade(dstr, SVt_PVIV);
1899 if (dtype < SVt_PVNV)
1900 sv_upgrade(dstr, SVt_PVNV);
1904 sv_upgrade(dstr, SVt_PVLV);
1912 croak("Bizarre copy of %s in %s", sv_reftype(sstr, 0),
1913 op_name[op->op_type]);
1915 croak("Bizarre copy of %s", sv_reftype(sstr, 0));
1919 if (dtype <= SVt_PVGV) {
1921 if (dtype != SVt_PVGV) {
1922 char *name = GvNAME(sstr);
1923 STRLEN len = GvNAMELEN(sstr);
1924 sv_upgrade(dstr, SVt_PVGV);
1925 sv_magic(dstr, dstr, '*', name, len);
1926 GvSTASH(dstr) = GvSTASH(sstr);
1927 GvNAME(dstr) = savepvn(name, len);
1928 GvNAMELEN(dstr) = len;
1929 SvFAKE_on(dstr); /* can coerce to non-glob */
1931 /* ahem, death to those who redefine active sort subs */
1932 else if (curstack == sortstack
1933 && GvCV(dstr) && sortcop == CvSTART(GvCV(dstr)))
1934 croak("Can't redefine active sort subroutine %s",
1936 (void)SvOK_off(dstr);
1937 GvINTRO_off(dstr); /* one-shot flag */
1939 GvGP(dstr) = gp_ref(GvGP(sstr));
1941 if (curcop->cop_stash != GvSTASH(dstr))
1942 GvIMPORTED_on(dstr);
1949 if (SvGMAGICAL(sstr)) {
1951 if (SvTYPE(sstr) != stype) {
1952 stype = SvTYPE(sstr);
1953 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
1958 sv_upgrade(dstr, stype);
1961 sflags = SvFLAGS(sstr);
1963 if (sflags & SVf_ROK) {
1964 if (dtype >= SVt_PV) {
1965 if (dtype == SVt_PVGV) {
1966 SV *sref = SvREFCNT_inc(SvRV(sstr));
1968 int intro = GvINTRO(dstr);
1972 GvGP(dstr)->gp_refcnt--;
1973 GvINTRO_off(dstr); /* one-shot flag */
1974 Newz(602,gp, 1, GP);
1975 GvGP(dstr) = gp_ref(gp);
1976 GvSV(dstr) = NEWSV(72,0);
1977 GvLINE(dstr) = curcop->cop_line;
1978 GvEGV(dstr) = (GV*)dstr;
1981 switch (SvTYPE(sref)) {
1984 SAVESPTR(GvAV(dstr));
1986 dref = (SV*)GvAV(dstr);
1987 GvAV(dstr) = (AV*)sref;
1988 if (curcop->cop_stash != GvSTASH(dstr))
1989 GvIMPORTED_AV_on(dstr);
1993 SAVESPTR(GvHV(dstr));
1995 dref = (SV*)GvHV(dstr);
1996 GvHV(dstr) = (HV*)sref;
1997 if (curcop->cop_stash != GvSTASH(dstr))
1998 GvIMPORTED_HV_on(dstr);
2002 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
2003 SvREFCNT_dec(GvCV(dstr));
2004 GvCV(dstr) = Nullcv;
2005 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
2008 SAVESPTR(GvCV(dstr));
2011 dref = (SV*)GvCV(dstr);
2012 if (GvCV(dstr) != (CV*)sref) {
2013 CV* cv = GvCV(dstr);
2015 if (!GvCVGEN((GV*)dstr) &&
2016 (CvROOT(cv) || CvXSUB(cv)))
2018 /* ahem, death to those who redefine
2019 * active sort subs */
2020 if (curstack == sortstack &&
2021 sortcop == CvSTART(cv))
2023 "Can't redefine active sort subroutine %s",
2024 GvENAME((GV*)dstr));
2025 if (cv_const_sv(cv))
2026 warn("Constant subroutine %s redefined",
2027 GvENAME((GV*)dstr));
2029 warn("Subroutine %s redefined",
2030 GvENAME((GV*)dstr));
2032 cv_ckproto(cv, (GV*)dstr,
2033 SvPOK(sref) ? SvPVX(sref) : Nullch);
2035 GvCV(dstr) = (CV*)sref;
2036 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
2037 GvASSUMECV_on(dstr);
2040 if (curcop->cop_stash != GvSTASH(dstr))
2041 GvIMPORTED_CV_on(dstr);
2045 SAVESPTR(GvIOp(dstr));
2047 dref = (SV*)GvIOp(dstr);
2048 GvIOp(dstr) = (IO*)sref;
2052 SAVESPTR(GvSV(dstr));
2054 dref = (SV*)GvSV(dstr);
2056 if (curcop->cop_stash != GvSTASH(dstr))
2057 GvIMPORTED_SV_on(dstr);
2068 (void)SvOOK_off(dstr); /* backoff */
2069 Safefree(SvPVX(dstr));
2070 SvLEN(dstr)=SvCUR(dstr)=0;
2073 (void)SvOK_off(dstr);
2074 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
2076 if (sflags & SVp_NOK) {
2078 SvNVX(dstr) = SvNVX(sstr);
2080 if (sflags & SVp_IOK) {
2081 (void)SvIOK_on(dstr);
2082 SvIVX(dstr) = SvIVX(sstr);
2085 if (SvAMAGIC(sstr)) {
2088 #endif /* OVERLOAD */
2090 else if (sflags & SVp_POK) {
2093 * Check to see if we can just swipe the string. If so, it's a
2094 * possible small lose on short strings, but a big win on long ones.
2095 * It might even be a win on short strings if SvPVX(dstr)
2096 * has to be allocated and SvPVX(sstr) has to be freed.
2099 if (SvTEMP(sstr) && /* slated for free anyway? */
2100 !(sflags & SVf_OOK)) /* and not involved in OOK hack? */
2102 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
2104 SvFLAGS(dstr) &= ~SVf_OOK;
2105 Safefree(SvPVX(dstr) - SvIVX(dstr));
2108 Safefree(SvPVX(dstr));
2110 (void)SvPOK_only(dstr);
2111 SvPV_set(dstr, SvPVX(sstr));
2112 SvLEN_set(dstr, SvLEN(sstr));
2113 SvCUR_set(dstr, SvCUR(sstr));
2115 (void)SvOK_off(sstr);
2116 SvPV_set(sstr, Nullch);
2121 else { /* have to copy actual string */
2122 STRLEN len = SvCUR(sstr);
2124 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
2125 Move(SvPVX(sstr),SvPVX(dstr),len,char);
2126 SvCUR_set(dstr, len);
2127 *SvEND(dstr) = '\0';
2128 (void)SvPOK_only(dstr);
2131 if (sflags & SVp_NOK) {
2133 SvNVX(dstr) = SvNVX(sstr);
2135 if (sflags & SVp_IOK) {
2136 (void)SvIOK_on(dstr);
2137 SvIVX(dstr) = SvIVX(sstr);
2140 else if (sflags & SVp_NOK) {
2141 SvNVX(dstr) = SvNVX(sstr);
2142 (void)SvNOK_only(dstr);
2144 (void)SvIOK_on(dstr);
2145 SvIVX(dstr) = SvIVX(sstr);
2148 else if (sflags & SVp_IOK) {
2149 (void)SvIOK_only(dstr);
2150 SvIVX(dstr) = SvIVX(sstr);
2153 (void)SvOK_off(dstr);
2159 sv_setpvn(sv,ptr,len)
2161 register const char *ptr;
2162 register STRLEN len;
2164 assert(len >= 0); /* STRLEN is probably unsigned, so this may
2165 elicit a warning, but it won't hurt. */
2166 if (SvTHINKFIRST(sv)) {
2167 if (SvREADONLY(sv) && curcop != &compiling)
2176 if (SvTYPE(sv) >= SVt_PV) {
2177 if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
2180 else if (!sv_upgrade(sv, SVt_PV))
2182 SvGROW(sv, len + 1);
2183 Move(ptr,SvPVX(sv),len,char);
2186 (void)SvPOK_only(sv); /* validate pointer */
2193 register const char *ptr;
2195 register STRLEN len;
2197 if (SvTHINKFIRST(sv)) {
2198 if (SvREADONLY(sv) && curcop != &compiling)
2208 if (SvTYPE(sv) >= SVt_PV) {
2209 if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
2212 else if (!sv_upgrade(sv, SVt_PV))
2214 SvGROW(sv, len + 1);
2215 Move(ptr,SvPVX(sv),len+1,char);
2217 (void)SvPOK_only(sv); /* validate pointer */
2222 sv_usepvn(sv,ptr,len)
2225 register STRLEN len;
2227 if (SvTHINKFIRST(sv)) {
2228 if (SvREADONLY(sv) && curcop != &compiling)
2233 if (!SvUPGRADE(sv, SVt_PV))
2240 Safefree(SvPVX(sv));
2241 Renew(ptr, len+1, char);
2244 SvLEN_set(sv, len+1);
2246 (void)SvPOK_only(sv); /* validate pointer */
2251 sv_chop(sv,ptr) /* like set but assuming ptr is in sv */
2255 register STRLEN delta;
2257 if (!ptr || !SvPOKp(sv))
2259 if (SvTHINKFIRST(sv)) {
2260 if (SvREADONLY(sv) && curcop != &compiling)
2265 if (SvTYPE(sv) < SVt_PVIV)
2266 sv_upgrade(sv,SVt_PVIV);
2270 SvFLAGS(sv) |= SVf_OOK;
2272 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK);
2273 delta = ptr - SvPVX(sv);
2281 sv_catpvn(sv,ptr,len)
2284 register STRLEN len;
2289 junk = SvPV_force(sv, tlen);
2290 SvGROW(sv, tlen + len + 1);
2293 Move(ptr,SvPVX(sv)+tlen,len,char);
2296 (void)SvPOK_only(sv); /* validate pointer */
2309 if (s = SvPV(sstr, len))
2310 sv_catpvn(dstr,s,len);
2318 register STRLEN len;
2324 junk = SvPV_force(sv, tlen);
2326 SvGROW(sv, tlen + len + 1);
2329 Move(ptr,SvPVX(sv)+tlen,len+1,char);
2331 (void)SvPOK_only(sv); /* validate pointer */
2351 sv_upgrade(sv, SVt_PV);
2352 SvGROW(sv, len + 1);
2357 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
2360 sv_magic(sv, obj, how, name, namlen)
2369 if (SvREADONLY(sv) && curcop != &compiling && !strchr("gBf", how))
2371 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
2372 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
2379 if (!SvUPGRADE(sv, SVt_PVMG))
2382 Newz(702,mg, 1, MAGIC);
2383 mg->mg_moremagic = SvMAGIC(sv);
2386 if (!obj || obj == sv || how == '#')
2389 mg->mg_obj = SvREFCNT_inc(obj);
2390 mg->mg_flags |= MGf_REFCOUNTED;
2393 mg->mg_len = namlen;
2396 mg->mg_ptr = savepvn(name, namlen);
2397 else if (namlen == HEf_SVKEY)
2398 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
2402 mg->mg_virtual = &vtbl_sv;
2406 mg->mg_virtual = &vtbl_amagic;
2409 mg->mg_virtual = &vtbl_amagicelem;
2414 #endif /* OVERLOAD */
2416 mg->mg_virtual = &vtbl_bm;
2419 mg->mg_virtual = &vtbl_env;
2422 mg->mg_virtual = &vtbl_fm;
2425 mg->mg_virtual = &vtbl_envelem;
2428 mg->mg_virtual = &vtbl_mglob;
2431 mg->mg_virtual = &vtbl_isa;
2434 mg->mg_virtual = &vtbl_isaelem;
2437 mg->mg_virtual = &vtbl_nkeys;
2444 mg->mg_virtual = &vtbl_dbline;
2446 #ifdef USE_LOCALE_COLLATE
2448 mg->mg_virtual = &vtbl_collxfrm;
2450 #endif /* USE_LOCALE_COLLATE */
2452 mg->mg_virtual = &vtbl_pack;
2456 mg->mg_virtual = &vtbl_packelem;
2459 mg->mg_virtual = &vtbl_sig;
2462 mg->mg_virtual = &vtbl_sigelem;
2465 mg->mg_virtual = &vtbl_taint;
2469 mg->mg_virtual = &vtbl_uvar;
2472 mg->mg_virtual = &vtbl_vec;
2475 mg->mg_virtual = &vtbl_substr;
2478 mg->mg_virtual = &vtbl_defelem;
2481 mg->mg_virtual = &vtbl_glob;
2484 mg->mg_virtual = &vtbl_arylen;
2487 mg->mg_virtual = &vtbl_pos;
2489 case '~': /* Reserved for use by extensions not perl internals. */
2490 /* Useful for attaching extension internal data to perl vars. */
2491 /* Note that multiple extensions may clash if magical scalars */
2492 /* etc holding private data from one are passed to another. */
2496 croak("Don't know how to handle magic of type '%c'", how);
2500 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
2504 sv_unmagic(sv, type)
2510 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
2513 for (mg = *mgp; mg; mg = *mgp) {
2514 if (mg->mg_type == type) {
2515 MGVTBL* vtbl = mg->mg_virtual;
2516 *mgp = mg->mg_moremagic;
2517 if (vtbl && vtbl->svt_free)
2518 (*vtbl->svt_free)(sv, mg);
2519 if (mg->mg_ptr && mg->mg_type != 'g')
2520 if (mg->mg_len >= 0)
2521 Safefree(mg->mg_ptr);
2522 else if (mg->mg_len == HEf_SVKEY)
2523 SvREFCNT_dec((SV*)mg->mg_ptr);
2524 if (mg->mg_flags & MGf_REFCOUNTED)
2525 SvREFCNT_dec(mg->mg_obj);
2529 mgp = &mg->mg_moremagic;
2533 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
2540 sv_insert(bigstr,offset,len,little,littlelen)
2549 register char *midend;
2550 register char *bigend;
2554 croak("Can't modify non-existent substring");
2555 SvPV_force(bigstr, na);
2557 i = littlelen - len;
2558 if (i > 0) { /* string might grow */
2559 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
2560 mid = big + offset + len;
2561 midend = bigend = big + SvCUR(bigstr);
2564 while (midend > mid) /* shove everything down */
2565 *--bigend = *--midend;
2566 Move(little,big+offset,littlelen,char);
2572 Move(little,SvPVX(bigstr)+offset,len,char);
2577 big = SvPVX(bigstr);
2580 bigend = big + SvCUR(bigstr);
2582 if (midend > bigend)
2583 croak("panic: sv_insert");
2585 if (mid - big > bigend - midend) { /* faster to shorten from end */
2587 Move(little, mid, littlelen,char);
2590 i = bigend - midend;
2592 Move(midend, mid, i,char);
2596 SvCUR_set(bigstr, mid - big);
2599 else if (i = mid - big) { /* faster from front */
2600 midend -= littlelen;
2602 sv_chop(bigstr,midend-i);
2607 Move(little, mid, littlelen,char);
2609 else if (littlelen) {
2610 midend -= littlelen;
2611 sv_chop(bigstr,midend);
2612 Move(little,midend,littlelen,char);
2615 sv_chop(bigstr,midend);
2620 /* make sv point to what nstr did */
2627 U32 refcnt = SvREFCNT(sv);
2628 if (SvTHINKFIRST(sv)) {
2629 if (SvREADONLY(sv) && curcop != &compiling)
2634 if (SvREFCNT(nsv) != 1)
2635 warn("Reference miscount in sv_replace()");
2636 if (SvMAGICAL(sv)) {
2640 sv_upgrade(nsv, SVt_PVMG);
2641 SvMAGIC(nsv) = SvMAGIC(sv);
2642 SvFLAGS(nsv) |= SvMAGICAL(sv);
2648 assert(!SvREFCNT(sv));
2649 StructCopy(nsv,sv,SV);
2650 SvREFCNT(sv) = refcnt;
2651 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
2660 assert(SvREFCNT(sv) == 0);
2663 if (defstash) { /* Still have a symbol table? */
2668 SAVEFREESV(SvSTASH(sv));
2670 destructor = gv_fetchmethod(SvSTASH(sv), "DESTROY");
2675 sv_upgrade(&ref, SVt_RV);
2676 SvRV(&ref) = SvREFCNT_inc(sv);
2678 SvREFCNT(&ref) = 1; /* Fake, but otherwise
2679 creating+destructing a ref
2680 leads to disaster. */
2686 perl_call_sv((SV*)GvCV(destructor),
2687 G_DISCARD|G_EVAL|G_KEEPERR);
2688 del_XRV(SvANY(&ref));
2695 SvREFCNT_dec(SvSTASH(sv));
2697 SvOBJECT_off(sv); /* Curse the object. */
2698 if (SvTYPE(sv) != SVt_PVIO)
2699 --sv_objcount; /* XXX Might want something more general */
2704 && (ret = perl_get_sv("DB::ret", FALSE))
2705 && SvROK(ret) && SvRV(ret) == sv && SvREFCNT(sv) == 1) {
2706 /* Debugger is prone to dangling references. */
2713 croak("DESTROY created new reference to dead object");
2714 /* DESTROY gave object new lease on life */
2719 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
2721 switch (SvTYPE(sv)) {
2723 if (IoIFP(sv) != PerlIO_stdin() &&
2724 IoIFP(sv) != PerlIO_stdout() &&
2725 IoIFP(sv) != PerlIO_stderr())
2727 Safefree(IoTOP_NAME(sv));
2728 Safefree(IoFMT_NAME(sv));
2729 Safefree(IoBOTTOM_NAME(sv));
2745 Safefree(GvNAME(sv));
2752 (void)SvOOK_off(sv);
2757 SvREFCNT_dec(SvRV(sv));
2758 else if (SvPVX(sv) && SvLEN(sv))
2759 Safefree(SvPVX(sv));
2769 switch (SvTYPE(sv)) {
2785 del_XPVIV(SvANY(sv));
2788 del_XPVNV(SvANY(sv));
2791 del_XPVMG(SvANY(sv));
2794 del_XPVLV(SvANY(sv));
2797 del_XPVAV(SvANY(sv));
2800 del_XPVHV(SvANY(sv));
2803 del_XPVCV(SvANY(sv));
2806 del_XPVGV(SvANY(sv));
2809 del_XPVBM(SvANY(sv));
2812 del_XPVFM(SvANY(sv));
2815 del_XPVIO(SvANY(sv));
2818 SvFLAGS(sv) &= SVf_BREAK;
2819 SvFLAGS(sv) |= SVTYPEMASK;
2837 if (SvREADONLY(sv)) {
2838 if (sv == &sv_undef || sv == &sv_yes || sv == &sv_no)
2841 if (SvREFCNT(sv) == 0) {
2842 if (SvFLAGS(sv) & SVf_BREAK)
2844 if (in_clean_all) /* All is fair */
2846 warn("Attempt to free unreferenced scalar");
2849 if (--SvREFCNT(sv) > 0)
2853 warn("Attempt to free temp prematurely");
2875 junk = SvPV(sv, len);
2894 pv1 = SvPV(str1, cur1);
2899 pv2 = SvPV(str2, cur2);
2904 return memEQ(pv1, pv2, cur1);
2913 char *pv1 = str1 ? SvPV(str1, cur1) : NULL;
2915 char *pv2 = str2 ? SvPV(str2, cur2) : NULL;
2919 return cur2 ? -1 : 0;
2924 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
2927 return retval < 0 ? -1 : 1;
2932 return cur1 < cur2 ? -1 : 1;
2936 sv_cmp_locale(sv1, sv2)
2940 #ifdef USE_LOCALE_COLLATE
2946 if (collation_standard)
2950 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : NULL;
2952 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : NULL;
2954 if (!pv1 || !len1) {
2965 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
2968 return retval < 0 ? -1 : 1;
2971 * When the result of collation is equality, that doesn't mean
2972 * that there are no differences -- some locales exclude some
2973 * characters from consideration. So to avoid false equalities,
2974 * we use the raw string as a tiebreaker.
2980 #endif /* USE_LOCALE_COLLATE */
2982 return sv_cmp(sv1, sv2);
2985 #ifdef USE_LOCALE_COLLATE
2987 * Any scalar variable may carry an 'o' magic that contains the
2988 * scalar data of the variable transformed to such a format that
2989 * a normal memory comparison can be used to compare the data
2990 * according to the locale settings.
2993 sv_collxfrm(sv, nxp)
2999 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : NULL;
3000 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != collation_ix) {
3005 Safefree(mg->mg_ptr);
3007 if ((xf = mem_collxfrm(s, len, &xlen))) {
3008 if (SvREADONLY(sv)) {
3014 sv_magic(sv, 0, 'o', 0, 0);
3015 mg = mg_find(sv, 'o');
3028 if (mg && mg->mg_ptr) {
3030 return mg->mg_ptr + sizeof(collation_ix);
3038 #endif /* USE_LOCALE_COLLATE */
3041 sv_gets(sv,fp,append)
3043 register PerlIO *fp;
3048 register STDCHAR rslast;
3049 register STDCHAR *bp;
3053 if (SvTHINKFIRST(sv)) {
3054 if (SvREADONLY(sv) && curcop != &compiling)
3059 if (!SvUPGRADE(sv, SVt_PV))
3067 else if (RsPARA(rs)) {
3072 rsptr = SvPV(rs, rslen);
3073 rslast = rslen ? rsptr[rslen - 1] : '\0';
3075 if (RsPARA(rs)) { /* have to do this both before and after */
3076 do { /* to make sure file boundaries work right */
3079 i = PerlIO_getc(fp);
3083 PerlIO_ungetc(fp,i);
3089 /* See if we know enough about I/O mechanism to cheat it ! */
3091 /* This used to be #ifdef test - it is made run-time test for ease
3092 of abstracting out stdio interface. One call should be cheap
3093 enough here - and may even be a macro allowing compile
3097 if (PerlIO_fast_gets(fp)) {
3100 * We're going to steal some values from the stdio struct
3101 * and put EVERYTHING in the innermost loop into registers.
3103 register STDCHAR *ptr;
3107 #if defined(VMS) && defined(PERLIO_IS_STDIO)
3108 /* An ungetc()d char is handled separately from the regular
3109 * buffer, so we getc() it back out and stuff it in the buffer.
3111 i = PerlIO_getc(fp);
3112 if (i == EOF) return 0;
3113 *(--((*fp)->_ptr)) = (unsigned char) i;
3117 /* Here is some breathtakingly efficient cheating */
3119 cnt = PerlIO_get_cnt(fp); /* get count into register */
3120 (void)SvPOK_only(sv); /* validate pointer */
3121 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
3122 if (cnt > 80 && SvLEN(sv) > append) {
3123 shortbuffered = cnt - SvLEN(sv) + append + 1;
3124 cnt -= shortbuffered;
3128 /* remember that cnt can be negative */
3129 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
3134 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
3135 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
3136 DEBUG_P(PerlIO_printf(Perl_debug_log,
3137 "Screamer: entering, ptr=%ld, cnt=%ld\n",(long)ptr,(long)cnt));
3138 DEBUG_P(PerlIO_printf(Perl_debug_log,
3139 "Screamer: entering: FILE * thinks ptr=%ld, cnt=%ld, base=%ld\n",
3140 (long)PerlIO_get_ptr(fp), (long)PerlIO_get_cnt(fp),
3141 (long)(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
3146 while (cnt > 0) { /* this | eat */
3148 if ((*bp++ = *ptr++) == rslast) /* really | dust */
3149 goto thats_all_folks; /* screams | sed :-) */
3153 Copy(ptr, bp, cnt, char); /* this | eat */
3154 bp += cnt; /* screams | dust */
3155 ptr += cnt; /* louder | sed :-) */
3160 if (shortbuffered) { /* oh well, must extend */
3161 cnt = shortbuffered;
3163 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
3165 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
3166 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
3170 DEBUG_P(PerlIO_printf(Perl_debug_log,
3171 "Screamer: going to getc, ptr=%ld, cnt=%ld\n",(long)ptr,(long)cnt));
3172 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
3173 DEBUG_P(PerlIO_printf(Perl_debug_log,
3174 "Screamer: pre: FILE * thinks ptr=%ld, cnt=%ld, base=%ld\n",
3175 (long)PerlIO_get_ptr(fp), (long)PerlIO_get_cnt(fp),
3176 (long)(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
3177 /* This used to call 'filbuf' in stdio form, but as that behaves like
3178 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
3179 another abstraction. */
3180 i = PerlIO_getc(fp); /* get more characters */
3181 DEBUG_P(PerlIO_printf(Perl_debug_log,
3182 "Screamer: post: FILE * thinks ptr=%ld, cnt=%ld, base=%ld\n",
3183 (long)PerlIO_get_ptr(fp), (long)PerlIO_get_cnt(fp),
3184 (long)(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
3185 cnt = PerlIO_get_cnt(fp);
3186 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
3187 DEBUG_P(PerlIO_printf(Perl_debug_log,
3188 "Screamer: after getc, ptr=%ld, cnt=%ld\n",(long)ptr,(long)cnt));
3190 if (i == EOF) /* all done for ever? */
3191 goto thats_really_all_folks;
3193 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
3195 SvGROW(sv, bpx + cnt + 2);
3196 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
3198 *bp++ = i; /* store character from PerlIO_getc */
3200 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
3201 goto thats_all_folks;
3205 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
3206 memNE((char*)bp - rslen, rsptr, rslen))
3207 goto screamer; /* go back to the fray */
3208 thats_really_all_folks:
3210 cnt += shortbuffered;
3211 DEBUG_P(PerlIO_printf(Perl_debug_log,
3212 "Screamer: quitting, ptr=%ld, cnt=%ld\n",(long)ptr,(long)cnt));
3213 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
3214 DEBUG_P(PerlIO_printf(Perl_debug_log,
3215 "Screamer: end: FILE * thinks ptr=%ld, cnt=%ld, base=%ld\n",
3216 (long)PerlIO_get_ptr(fp), (long)PerlIO_get_cnt(fp),
3217 (long)(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
3219 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
3220 DEBUG_P(PerlIO_printf(Perl_debug_log,
3221 "Screamer: done, len=%d, string=|%.*s|\n",
3222 SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
3226 /*The big, slow, and stupid way */
3231 register STDCHAR *bpe = buf + sizeof(buf);
3233 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
3234 ; /* keep reading */
3238 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
3239 /* Accomodate broken VAXC compiler, which applies U8 cast to
3240 * both args of ?: operator, causing EOF to change into 255
3242 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
3246 sv_catpvn(sv, (char *) buf, cnt);
3248 sv_setpvn(sv, (char *) buf, cnt);
3250 if (i != EOF && /* joy */
3252 SvCUR(sv) < rslen ||
3253 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
3257 If we're reading from a TTY and we get a short read,
3258 indicating that the user hit his EOF character, we need
3259 to notice it now, because if we try to read from the TTY
3260 again, the EOF condition will disappear.
3262 The "(cnt == sizeof(buf))" check is an optimization to
3263 prevent unnecessary calls to feof(). It seems safe
3264 because as far as I can tell, whenever fread() returns a
3265 full buffer, right before EOF, it will correctly return
3266 0 bytes on the next call, even when reading from a TTY.
3267 However, I've only tested this on Linux; other platforms
3268 may vary, so it might be easier just to remove the
3269 optimization and just check for "! feof(fp)".
3273 if ((cnt == sizeof(buf)) || ! PerlIO_eof(fp))
3278 if (RsPARA(rs)) { /* have to do this both before and after */
3279 while (i != EOF) { /* to make sure file boundaries work right */
3280 i = PerlIO_getc(fp);
3282 PerlIO_ungetc(fp,i);
3288 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
3301 if (SvTHINKFIRST(sv)) {
3302 if (SvREADONLY(sv) && curcop != &compiling)
3306 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc)) return;
3307 #endif /* OVERLOAD */
3313 flags = SvFLAGS(sv);
3314 if (flags & SVp_NOK) {
3315 (void)SvNOK_only(sv);
3319 if (flags & SVp_IOK) {
3320 if (SvIVX(sv) == IV_MAX)
3321 sv_setnv(sv, (double)IV_MAX + 1.0);
3323 (void)SvIOK_only(sv);
3328 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
3329 if ((flags & SVTYPEMASK) < SVt_PVNV)
3330 sv_upgrade(sv, SVt_NV);
3332 (void)SvNOK_only(sv);
3336 while (isALPHA(*d)) d++;
3337 while (isDIGIT(*d)) d++;
3339 SET_NUMERIC_STANDARD();
3340 sv_setnv(sv,atof(SvPVX(sv)) + 1.0); /* punt */
3344 while (d >= SvPVX(sv)) {
3354 *(d--) -= 'z' - 'a' + 1;
3357 /* oh,oh, the number grew */
3358 SvGROW(sv, SvCUR(sv) + 2);
3360 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
3376 if (SvTHINKFIRST(sv)) {
3377 if (SvREADONLY(sv) && curcop != &compiling)
3381 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec)) return;
3382 #endif /* OVERLOAD */
3388 flags = SvFLAGS(sv);
3389 if (flags & SVp_NOK) {
3391 (void)SvNOK_only(sv);
3394 if (flags & SVp_IOK) {
3395 if (SvIVX(sv) == IV_MIN)
3396 sv_setnv(sv, (double)IV_MIN - 1.0);
3398 (void)SvIOK_only(sv);
3403 if (!(flags & SVp_POK)) {
3404 if ((flags & SVTYPEMASK) < SVt_PVNV)
3405 sv_upgrade(sv, SVt_NV);
3407 (void)SvNOK_only(sv);
3410 SET_NUMERIC_STANDARD();
3411 sv_setnv(sv,atof(SvPVX(sv)) - 1.0); /* punt */
3414 /* Make a string that will exist for the duration of the expression
3415 * evaluation. Actually, it may have to last longer than that, but
3416 * hopefully we won't free it until it has been assigned to a
3417 * permanent location. */
3422 tmps_max += (tmps_max < 512) ? 128 : 512;
3423 Renew(tmps_stack, tmps_max, SV*);
3427 sv_mortalcopy(oldstr)
3436 sv_setsv(sv,oldstr);
3437 if (++tmps_ix >= tmps_max)
3439 tmps_stack[tmps_ix] = sv;
3452 SvFLAGS(sv) = SVs_TEMP;
3453 if (++tmps_ix >= tmps_max)
3455 tmps_stack[tmps_ix] = sv;
3459 /* same thing without the copying */
3467 if (SvREADONLY(sv) && curcop != &compiling)
3469 if (++tmps_ix >= tmps_max)
3471 tmps_stack[tmps_ix] = sv;
3489 sv_setpvn(sv,s,len);
3495 newSVpvf(const char* pat, ...)
3499 newSVpvf(pat, va_alist)
3512 va_start(args, pat);
3516 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
3560 sv_upgrade(sv, SVt_RV);
3562 SvRV(sv) = SvREFCNT_inc(ref);
3578 #endif /* CRIPPLED_CC */
3580 /* make an exact duplicate of old */
3590 if (SvTYPE(old) == SVTYPEMASK) {
3591 warn("semi-panic: attempt to dup freed string");
3621 if (!*s) { /* reset ?? searches */
3622 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
3623 pm->op_pmflags &= ~PMf_USED;
3628 /* reset variables */
3630 if (!HvARRAY(stash))
3633 Zero(todo, 256, char);
3640 for ( ; i <= max; i++) {
3643 for (i = 0; i <= (I32) HvMAX(stash); i++) {
3644 for (entry = HvARRAY(stash)[i];
3646 entry = HeNEXT(entry)) {
3647 if (!todo[(U8)*HeKEY(entry)])
3649 gv = (GV*)HeVAL(entry);
3652 if (SvTYPE(sv) >= SVt_PV) {
3654 if (SvPVX(sv) != Nullch)
3661 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
3663 #ifndef VMS /* VMS has no environ array */
3665 environ[0] = Nullch;
3680 switch (SvTYPE(sv)) {
3688 croak("Bad filehandle: %s", GvNAME(gv));
3692 croak(no_usym, "filehandle");
3694 return sv_2io(SvRV(sv));
3695 gv = gv_fetchpv(SvPV(sv,na), FALSE, SVt_PVIO);
3701 croak("Bad filehandle: %s", SvPV(sv,na));
3708 sv_2cv(sv, st, gvp, lref)
3718 return *gvp = Nullgv, Nullcv;
3719 switch (SvTYPE(sv)) {
3739 if (SvTYPE(cv) != SVt_PVCV)
3740 croak("Not a subroutine reference");
3748 gv = gv_fetchpv(SvPV(sv, na), lref, SVt_PVCV);
3754 if (lref && !GvCVu(gv)) {
3757 tmpsv = NEWSV(704,0);
3758 gv_efullname3(tmpsv, gv, Nullch);
3759 newSUB(start_subparse(FALSE, 0),
3760 newSVOP(OP_CONST, 0, tmpsv),
3765 croak("Unable to create sub named \"%s\"", SvPV(sv,na));
3782 if ((Xpv = (XPV*)SvANY(sv)) &&
3783 (*Xpv->xpv_pv > '0' ||
3785 (Xpv->xpv_cur && *Xpv->xpv_pv != '0')))
3792 return SvIVX(sv) != 0;
3795 return SvNVX(sv) != 0.0;
3797 return sv_2bool(sv);
3801 #endif /* !SvTRUE */
3846 return sv_2pv(sv, lp);
3851 sv_pvn_force(sv, lp)
3857 if (SvREADONLY(sv) && curcop != &compiling)
3864 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
3865 if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV) {
3871 croak("Can't coerce %s to string in %s", sv_reftype(sv,0),
3872 op_name[op->op_type]);
3876 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
3881 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
3882 SvGROW(sv, len + 1);
3883 Move(s,SvPVX(sv),len,char);
3888 SvPOK_on(sv); /* validate pointer */
3890 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%lx 2pv(%s)\n",
3891 (unsigned long)sv,SvPVX(sv)));
3902 if (ob && SvOBJECT(sv))
3903 return HvNAME(SvSTASH(sv));
3905 switch (SvTYPE(sv)) {
3919 case SVt_PVLV: return "LVALUE";
3920 case SVt_PVAV: return "ARRAY";
3921 case SVt_PVHV: return "HASH";
3922 case SVt_PVCV: return "CODE";
3923 case SVt_PVGV: return "GLOB";
3924 case SVt_PVFM: return "FORMLINE";
3925 default: return "UNKNOWN";
3961 return strEQ(HvNAME(SvSTASH(sv)), name);
3965 newSVrv(rv, classname)
3975 sv_upgrade(rv, SVt_RV);
3976 SvRV(rv) = SvREFCNT_inc(sv);
3980 HV* stash = gv_stashpv(classname, TRUE);
3981 (void)sv_bless(rv, stash);
3987 sv_setref_pv(rv, classname, pv)
3993 sv_setsv(rv, &sv_undef);
3995 sv_setiv(newSVrv(rv,classname), (IV)pv);
4000 sv_setref_iv(rv, classname, iv)
4005 sv_setiv(newSVrv(rv,classname), iv);
4010 sv_setref_nv(rv, classname, nv)
4015 sv_setnv(newSVrv(rv,classname), nv);
4020 sv_setref_pvn(rv, classname, pv, n)
4026 sv_setpvn(newSVrv(rv,classname), pv, n);
4037 croak("Can't bless non-reference value");
4039 if (SvFLAGS(ref) & (SVs_OBJECT|SVf_READONLY)) {
4040 if (SvREADONLY(ref))
4042 if (SvOBJECT(ref)) {
4043 if (SvTYPE(ref) != SVt_PVIO)
4045 SvREFCNT_dec(SvSTASH(ref));
4049 if (SvTYPE(ref) != SVt_PVIO)
4051 (void)SvUPGRADE(ref, SVt_PVMG);
4052 SvSTASH(ref) = (HV*)SvREFCNT_inc(stash);
4059 #endif /* OVERLOAD */
4068 assert(SvTYPE(sv) == SVt_PVGV);
4072 sv_unmagic(sv, '*');
4073 Safefree(GvNAME(sv));
4075 SvFLAGS(sv) &= ~SVTYPEMASK;
4076 SvFLAGS(sv) |= SVt_PVMG;
4087 if (SvREFCNT(rv) != 1 || SvREADONLY(rv))
4090 sv_2mortal(rv); /* Schedule for freeing later */
4097 sv_magic((sv), Nullsv, 't', Nullch, 0);
4104 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
4105 MAGIC *mg = mg_find(sv, 't');
4115 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
4116 MAGIC *mg = mg_find(sv, 't');
4117 if (mg && ((mg->mg_len & 1) || (mg->mg_len & 2) && mg->mg_obj == sv))
4125 sv_setpvf(SV *sv, const char* pat, ...)
4129 sv_setpvf(sv, pat, va_alist)
4137 va_start(args, pat);
4141 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4147 sv_catpvf(SV *sv, const char* pat, ...)
4151 sv_catpvf(sv, pat, va_alist)
4159 va_start(args, pat);
4163 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
4168 sv_vsetpvfn(sv, pat, patlen, args, svargs, svmax, used_locale)
4177 sv_setpvn(sv, "", 0);
4178 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale);
4182 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale)
4196 static char nullstr[] = "(null)";
4198 /* no matter what, this is a string now */
4199 (void)SvPV_force(sv, origlen);
4201 /* special-case "", "%s", and "%_" */
4204 if (patlen == 2 && pat[0] == '%') {
4208 char *s = va_arg(*args, char*);
4209 sv_catpv(sv, s ? s : nullstr);
4211 else if (svix < svmax)
4212 sv_catsv(sv, *svargs);
4216 sv_catsv(sv, va_arg(*args, SV*));
4219 /* See comment on '_' below */
4224 patend = (char*)pat + patlen;
4225 for (p = (char*)pat; p < patend; p = q) {
4233 bool has_precis = FALSE;
4237 STRLEN esignlen = 0;
4239 char *eptr = Nullch;
4241 char ebuf[TYPE_DIGITS(int) * 2 + 16]; /* large enough for "%#.#f" */
4243 static char *efloatbuf = Nullch;
4244 static STRLEN efloatsize = 0;
4256 for (q = p; q < patend && *q != '%'; ++q) ;
4258 sv_catpvn(sv, p, q - p);
4296 case '1': case '2': case '3':
4297 case '4': case '5': case '6':
4298 case '7': case '8': case '9':
4301 width = width * 10 + (*q++ - '0');
4306 i = va_arg(*args, int);
4308 i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
4310 width = (i < 0) ? -i : i;
4321 i = va_arg(*args, int);
4323 i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
4324 precis = (i < 0) ? 0 : i;
4330 precis = precis * 10 + (*q++ - '0');
4339 #if 0 /* when quads have better support within Perl */
4340 if (*(q + 1) == 'l') {
4366 c = va_arg(*args, int);
4368 c = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
4375 eptr = va_arg(*args, char*);
4377 elen = strlen(eptr);
4380 elen = sizeof nullstr - 1;
4383 else if (svix < svmax)
4384 eptr = SvPVx(svargs[svix++], elen);
4389 * The "%_" hack might have to be changed someday,
4390 * if ISO or ANSI decide to use '_' for something.
4391 * So we keep it hidden from users' code.
4395 eptr = SvPVx(va_arg(*args, SV*), elen);
4398 if (has_precis && elen > precis)
4406 uv = (UV)va_arg(*args, void*);
4408 uv = (svix < svmax) ? (UV)svargs[svix++] : 0;
4419 case 'h': iv = (short)va_arg(*args, int); break;
4420 default: iv = va_arg(*args, int); break;
4421 case 'l': iv = va_arg(*args, long); break;
4422 case 'V': iv = va_arg(*args, IV); break;
4426 iv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
4428 case 'h': iv = (short)iv; break;
4429 default: iv = (int)iv; break;
4430 case 'l': iv = (long)iv; break;
4437 esignbuf[esignlen++] = plus;
4441 esignbuf[esignlen++] = '-';
4467 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
4468 default: uv = va_arg(*args, unsigned); break;
4469 case 'l': uv = va_arg(*args, unsigned long); break;
4470 case 'V': uv = va_arg(*args, UV); break;
4474 uv = (svix < svmax) ? SvUVx(svargs[svix++]) : 0;
4476 case 'h': uv = (unsigned short)uv; break;
4477 default: uv = (unsigned)uv; break;
4478 case 'l': uv = (unsigned long)uv; break;
4484 eptr = ebuf + sizeof ebuf;
4488 p = (c == 'X') ? "0123456789ABCDEF" : "0123456789abcdef";
4494 esignbuf[esignlen++] = '0';
4495 esignbuf[esignlen++] = c; /* 'x' or 'X' */
4501 *--eptr = '0' + dig;
4503 if (alt && *eptr != '0')
4506 default: /* it had better be ten or less */
4509 *--eptr = '0' + dig;
4510 } while (uv /= base);
4513 elen = (ebuf + sizeof ebuf) - eptr;
4514 if (has_precis && precis > elen)
4515 zeros = precis - elen;
4518 /* FLOATING POINT */
4521 c = 'f'; /* maybe %F isn't supported here */
4527 /* This is evil, but floating point is even more evil */
4530 nv = va_arg(*args, double);
4532 nv = (svix < svmax) ? SvNVx(svargs[svix++]) : 0.0;
4535 if (c != 'e' && c != 'E') {
4537 (void)frexp(nv, &i);
4538 if (i == PERL_INT_MIN)
4539 die("panic: frexp");
4541 need = BIT_DIGITS(i);
4543 need += has_precis ? precis : 6; /* known default */
4547 need += 20; /* fudge factor */
4548 if (efloatsize < need) {
4549 Safefree(efloatbuf);
4550 efloatsize = need + 20; /* more fudge */
4551 New(906, efloatbuf, efloatsize, char);
4554 eptr = ebuf + sizeof ebuf;
4559 do { *--eptr = '0' + (base % 10); } while (base /= 10);
4564 do { *--eptr = '0' + (base % 10); } while (base /= 10);
4574 (void)sprintf(efloatbuf, eptr, nv);
4577 elen = strlen(efloatbuf);
4581 * User-defined locales may include arbitrary characters.
4582 * And, unfortunately, some system may alloc the "C" locale
4583 * to be overridden by a malicious user.
4586 *used_locale = TRUE;
4587 #endif /* LC_NUMERIC */
4594 i = SvCUR(sv) - origlen;
4597 case 'h': *(va_arg(*args, short*)) = i; break;
4598 default: *(va_arg(*args, int*)) = i; break;
4599 case 'l': *(va_arg(*args, long*)) = i; break;
4600 case 'V': *(va_arg(*args, IV*)) = i; break;
4603 else if (svix < svmax)
4604 sv_setuv(svargs[svix++], (UV)i);
4605 continue; /* not "break" */
4611 if (!args && dowarn &&
4612 (op->op_type == OP_PRTF || op->op_type == OP_SPRINTF)) {
4613 SV *msg = sv_newmortal();
4614 sv_setpvf(msg, "Invalid conversion in %s: ",
4615 (op->op_type == OP_PRTF) ? "printf" : "sprintf");
4617 sv_catpvf(msg, isPRINT(c) ? "\"%%%c\"" : "\"%%\\%03o\"",
4620 sv_catpv(msg, "end of string");
4621 warn("%_", msg); /* yes, this is reentrant */
4623 /* output mangled stuff */
4629 have = esignlen + zeros + elen;
4630 need = (have > width ? have : width);
4633 SvGROW(sv, SvLEN(sv) + need);
4635 if (esignlen && fill == '0') {
4636 for (i = 0; i < esignlen; i++)
4640 memset(p, fill, gap);
4643 if (esignlen && fill != '0') {
4644 for (i = 0; i < esignlen; i++)
4648 for (i = zeros; i; i--)
4652 memcpy(p, eptr, elen);
4656 memset(p, ' ', gap);
4660 SvCUR(sv) = p - SvPVX(sv);
4669 SV *d = sv_newmortal();
4675 PerlIO_printf(Perl_debug_log, "SV = 0\n");
4679 flags = SvFLAGS(sv);
4682 sv_setpvf(d, "(0x%lx)\n REFCNT = %ld\n FLAGS = (",
4683 (unsigned long)SvANY(sv), (long)SvREFCNT(sv));
4684 if (flags & SVs_PADBUSY) sv_catpv(d, "PADBUSY,");
4685 if (flags & SVs_PADTMP) sv_catpv(d, "PADTMP,");
4686 if (flags & SVs_PADMY) sv_catpv(d, "PADMY,");
4687 if (flags & SVs_TEMP) sv_catpv(d, "TEMP,");
4688 if (flags & SVs_OBJECT) sv_catpv(d, "OBJECT,");
4689 if (flags & SVs_GMG) sv_catpv(d, "GMG,");
4690 if (flags & SVs_SMG) sv_catpv(d, "SMG,");
4691 if (flags & SVs_RMG) sv_catpv(d, "RMG,");
4693 if (flags & SVf_IOK) sv_catpv(d, "IOK,");
4694 if (flags & SVf_NOK) sv_catpv(d, "NOK,");
4695 if (flags & SVf_POK) sv_catpv(d, "POK,");
4696 if (flags & SVf_ROK) sv_catpv(d, "ROK,");
4697 if (flags & SVf_OOK) sv_catpv(d, "OOK,");
4698 if (flags & SVf_FAKE) sv_catpv(d, "FAKE,");
4699 if (flags & SVf_READONLY) sv_catpv(d, "READONLY,");
4702 if (flags & SVf_AMAGIC) sv_catpv(d, "OVERLOAD,");
4703 #endif /* OVERLOAD */
4704 if (flags & SVp_IOK) sv_catpv(d, "pIOK,");
4705 if (flags & SVp_NOK) sv_catpv(d, "pNOK,");
4706 if (flags & SVp_POK) sv_catpv(d, "pPOK,");
4707 if (flags & SVp_SCREAM) sv_catpv(d, "SCREAM,");
4712 if (CvANON(sv)) sv_catpv(d, "ANON,");
4713 if (CvUNIQUE(sv)) sv_catpv(d, "UNIQUE,");
4714 if (CvCLONE(sv)) sv_catpv(d, "CLONE,");
4715 if (CvCLONED(sv)) sv_catpv(d, "CLONED,");
4716 if (CvNODEBUG(sv)) sv_catpv(d, "NODEBUG,");
4719 if (HvSHAREKEYS(sv)) sv_catpv(d, "SHAREKEYS,");
4720 if (HvLAZYDEL(sv)) sv_catpv(d, "LAZYDEL,");
4723 if (GvINTRO(sv)) sv_catpv(d, "INTRO,");
4724 if (GvMULTI(sv)) sv_catpv(d, "MULTI,");
4725 if (GvASSUMECV(sv)) sv_catpv(d, "ASSUMECV,");
4726 if (GvIMPORTED(sv)) {
4727 sv_catpv(d, "IMPORT");
4728 if (GvIMPORTED(sv) == GVf_IMPORTED)
4729 sv_catpv(d, "ALL,");
4732 if (GvIMPORTED_SV(sv)) sv_catpv(d, " SV");
4733 if (GvIMPORTED_AV(sv)) sv_catpv(d, " AV");
4734 if (GvIMPORTED_HV(sv)) sv_catpv(d, " HV");
4735 if (GvIMPORTED_CV(sv)) sv_catpv(d, " CV");
4741 if (*(SvEND(d) - 1) == ',')
4742 SvPVX(d)[--SvCUR(d)] = '\0';
4746 PerlIO_printf(Perl_debug_log, "SV = ");
4749 PerlIO_printf(Perl_debug_log, "NULL%s\n", s);
4752 PerlIO_printf(Perl_debug_log, "IV%s\n", s);
4755 PerlIO_printf(Perl_debug_log, "NV%s\n", s);
4758 PerlIO_printf(Perl_debug_log, "RV%s\n", s);
4761 PerlIO_printf(Perl_debug_log, "PV%s\n", s);
4764 PerlIO_printf(Perl_debug_log, "PVIV%s\n", s);
4767 PerlIO_printf(Perl_debug_log, "PVNV%s\n", s);
4770 PerlIO_printf(Perl_debug_log, "PVBM%s\n", s);
4773 PerlIO_printf(Perl_debug_log, "PVMG%s\n", s);
4776 PerlIO_printf(Perl_debug_log, "PVLV%s\n", s);
4779 PerlIO_printf(Perl_debug_log, "PVAV%s\n", s);
4782 PerlIO_printf(Perl_debug_log, "PVHV%s\n", s);
4785 PerlIO_printf(Perl_debug_log, "PVCV%s\n", s);
4788 PerlIO_printf(Perl_debug_log, "PVGV%s\n", s);
4791 PerlIO_printf(Perl_debug_log, "PVFM%s\n", s);
4794 PerlIO_printf(Perl_debug_log, "PVIO%s\n", s);
4797 PerlIO_printf(Perl_debug_log, "UNKNOWN%s\n", s);
4800 if (type >= SVt_PVIV || type == SVt_IV)
4801 PerlIO_printf(Perl_debug_log, " IV = %ld\n", (long)SvIVX(sv));
4802 if (type >= SVt_PVNV || type == SVt_NV) {
4803 SET_NUMERIC_STANDARD();
4804 PerlIO_printf(Perl_debug_log, " NV = %.*g\n", DBL_DIG, SvNVX(sv));
4807 PerlIO_printf(Perl_debug_log, " RV = 0x%lx\n", (long)SvRV(sv));
4813 if (type <= SVt_PVLV) {
4815 PerlIO_printf(Perl_debug_log, " PV = 0x%lx \"%s\"\n CUR = %ld\n LEN = %ld\n",
4816 (long)SvPVX(sv), SvPVX(sv), (long)SvCUR(sv), (long)SvLEN(sv));
4818 PerlIO_printf(Perl_debug_log, " PV = 0\n");
4820 if (type >= SVt_PVMG) {
4822 PerlIO_printf(Perl_debug_log, " MAGIC = 0x%lx\n", (long)SvMAGIC(sv));
4825 PerlIO_printf(Perl_debug_log, " STASH = \"%s\"\n", HvNAME(SvSTASH(sv)));
4829 PerlIO_printf(Perl_debug_log, " TYPE = %c\n", LvTYPE(sv));
4830 PerlIO_printf(Perl_debug_log, " TARGOFF = %ld\n", (long)LvTARGOFF(sv));
4831 PerlIO_printf(Perl_debug_log, " TARGLEN = %ld\n", (long)LvTARGLEN(sv));
4832 PerlIO_printf(Perl_debug_log, " TARG = 0x%lx\n", (long)LvTARG(sv));
4833 sv_dump(LvTARG(sv));
4836 PerlIO_printf(Perl_debug_log, " ARRAY = 0x%lx\n", (long)AvARRAY(sv));
4837 PerlIO_printf(Perl_debug_log, " ALLOC = 0x%lx\n", (long)AvALLOC(sv));
4838 PerlIO_printf(Perl_debug_log, " FILL = %ld\n", (long)AvFILL(sv));
4839 PerlIO_printf(Perl_debug_log, " MAX = %ld\n", (long)AvMAX(sv));
4840 PerlIO_printf(Perl_debug_log, " ARYLEN = 0x%lx\n", (long)AvARYLEN(sv));
4841 flags = AvFLAGS(sv);
4843 if (flags & AVf_REAL) sv_catpv(d, ",REAL");
4844 if (flags & AVf_REIFY) sv_catpv(d, ",REIFY");
4845 if (flags & AVf_REUSED) sv_catpv(d, ",REUSED");
4846 PerlIO_printf(Perl_debug_log, " FLAGS = (%s)\n",
4847 SvCUR(d) ? SvPVX(d) + 1 : "");
4850 PerlIO_printf(Perl_debug_log, " ARRAY = 0x%lx\n",(long)HvARRAY(sv));
4851 PerlIO_printf(Perl_debug_log, " KEYS = %ld\n", (long)HvKEYS(sv));
4852 PerlIO_printf(Perl_debug_log, " FILL = %ld\n", (long)HvFILL(sv));
4853 PerlIO_printf(Perl_debug_log, " MAX = %ld\n", (long)HvMAX(sv));
4854 PerlIO_printf(Perl_debug_log, " RITER = %ld\n", (long)HvRITER(sv));
4855 PerlIO_printf(Perl_debug_log, " EITER = 0x%lx\n",(long) HvEITER(sv));
4857 PerlIO_printf(Perl_debug_log, " PMROOT = 0x%lx\n",(long)HvPMROOT(sv));
4859 PerlIO_printf(Perl_debug_log, " NAME = \"%s\"\n", HvNAME(sv));
4863 PerlIO_printf(Perl_debug_log, " PROTOTYPE = \"%s\"\n", SvPV(sv,na));
4866 PerlIO_printf(Perl_debug_log, " STASH = 0x%lx\n", (long)CvSTASH(sv));
4867 PerlIO_printf(Perl_debug_log, " START = 0x%lx\n", (long)CvSTART(sv));
4868 PerlIO_printf(Perl_debug_log, " ROOT = 0x%lx\n", (long)CvROOT(sv));
4869 PerlIO_printf(Perl_debug_log, " XSUB = 0x%lx\n", (long)CvXSUB(sv));
4870 PerlIO_printf(Perl_debug_log, " XSUBANY = %ld\n", (long)CvXSUBANY(sv).any_i32);
4871 PerlIO_printf(Perl_debug_log, " GV = 0x%lx", (long)CvGV(sv));
4872 if (CvGV(sv) && GvNAME(CvGV(sv))) {
4873 PerlIO_printf(Perl_debug_log, " \"%s\"\n", GvNAME(CvGV(sv)));
4875 PerlIO_printf(Perl_debug_log, "\n");
4877 PerlIO_printf(Perl_debug_log, " FILEGV = 0x%lx\n", (long)CvFILEGV(sv));
4878 PerlIO_printf(Perl_debug_log, " DEPTH = %ld\n", (long)CvDEPTH(sv));
4879 PerlIO_printf(Perl_debug_log, " PADLIST = 0x%lx\n", (long)CvPADLIST(sv));
4880 PerlIO_printf(Perl_debug_log, " OUTSIDE = 0x%lx\n", (long)CvOUTSIDE(sv));
4881 if (type == SVt_PVFM)
4882 PerlIO_printf(Perl_debug_log, " LINES = %ld\n", (long)FmLINES(sv));
4885 PerlIO_printf(Perl_debug_log, " NAME = \"%s\"\n", GvNAME(sv));
4886 PerlIO_printf(Perl_debug_log, " NAMELEN = %ld\n", (long)GvNAMELEN(sv));
4887 PerlIO_printf(Perl_debug_log, " STASH = \"%s\"\n", HvNAME(GvSTASH(sv)));
4888 PerlIO_printf(Perl_debug_log, " GP = 0x%lx\n", (long)GvGP(sv));
4889 PerlIO_printf(Perl_debug_log, " SV = 0x%lx\n", (long)GvSV(sv));
4890 PerlIO_printf(Perl_debug_log, " REFCNT = %ld\n", (long)GvREFCNT(sv));
4891 PerlIO_printf(Perl_debug_log, " IO = 0x%lx\n", (long)GvIOp(sv));
4892 PerlIO_printf(Perl_debug_log, " FORM = 0x%lx\n", (long)GvFORM(sv));
4893 PerlIO_printf(Perl_debug_log, " AV = 0x%lx\n", (long)GvAV(sv));
4894 PerlIO_printf(Perl_debug_log, " HV = 0x%lx\n", (long)GvHV(sv));
4895 PerlIO_printf(Perl_debug_log, " CV = 0x%lx\n", (long)GvCV(sv));
4896 PerlIO_printf(Perl_debug_log, " CVGEN = 0x%lx\n", (long)GvCVGEN(sv));
4897 PerlIO_printf(Perl_debug_log, " LASTEXPR = %ld\n", (long)GvLASTEXPR(sv));
4898 PerlIO_printf(Perl_debug_log, " LINE = %ld\n", (long)GvLINE(sv));
4899 PerlIO_printf(Perl_debug_log, " FILEGV = 0x%lx\n", (long)GvFILEGV(sv));
4900 PerlIO_printf(Perl_debug_log, " EGV = 0x%lx\n", (long)GvEGV(sv));
4903 PerlIO_printf(Perl_debug_log, " IFP = 0x%lx\n", (long)IoIFP(sv));
4904 PerlIO_printf(Perl_debug_log, " OFP = 0x%lx\n", (long)IoOFP(sv));
4905 PerlIO_printf(Perl_debug_log, " DIRP = 0x%lx\n", (long)IoDIRP(sv));
4906 PerlIO_printf(Perl_debug_log, " LINES = %ld\n", (long)IoLINES(sv));
4907 PerlIO_printf(Perl_debug_log, " PAGE = %ld\n", (long)IoPAGE(sv));
4908 PerlIO_printf(Perl_debug_log, " PAGE_LEN = %ld\n", (long)IoPAGE_LEN(sv));
4909 PerlIO_printf(Perl_debug_log, " LINES_LEFT = %ld\n", (long)IoLINES_LEFT(sv));
4910 PerlIO_printf(Perl_debug_log, " TOP_NAME = \"%s\"\n", IoTOP_NAME(sv));
4911 PerlIO_printf(Perl_debug_log, " TOP_GV = 0x%lx\n", (long)IoTOP_GV(sv));
4912 PerlIO_printf(Perl_debug_log, " FMT_NAME = \"%s\"\n", IoFMT_NAME(sv));
4913 PerlIO_printf(Perl_debug_log, " FMT_GV = 0x%lx\n", (long)IoFMT_GV(sv));
4914 PerlIO_printf(Perl_debug_log, " BOTTOM_NAME = \"%s\"\n", IoBOTTOM_NAME(sv));
4915 PerlIO_printf(Perl_debug_log, " BOTTOM_GV = 0x%lx\n", (long)IoBOTTOM_GV(sv));
4916 PerlIO_printf(Perl_debug_log, " SUBPROCESS = %ld\n", (long)IoSUBPROCESS(sv));
4917 PerlIO_printf(Perl_debug_log, " TYPE = %c\n", IoTYPE(sv));
4918 PerlIO_printf(Perl_debug_log, " FLAGS = 0x%lx\n", (long)IoFLAGS(sv));