/* dump.c
*
- * Copyright (c) 1991-1997, Larry Wall
+ * Copyright (c) 1991-1999, Larry Wall
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
if (!SvPVX(sv))
sv_catpv(t, "(null)");
else {
- SV *tmp = newSVpv("", 0);
+ SV *tmp = newSVpvn("", 0);
sv_catpv(t, "(");
if (SvOOK(sv))
sv_catpvf(t, "[%s]", pv_display(tmp, SvPVX(sv)-SvIVX(sv), SvIVX(sv), 0, 127));
SET_NUMERIC_STANDARD();
sv_catpvf(t, "(%g)",SvNVX(sv));
}
- else if (SvIOKp(sv))
- sv_catpvf(t, "(%ld)",(long)SvIVX(sv));
+ else if (SvIOKp(sv)) { /* XXXX: IV, UV? */
+ if (SvIsUV(sv))
+ sv_catpvf(t, "(%lu)",(unsigned long)SvUVX(sv));
+ else
+ sv_catpvf(t, "(%ld)",(long)SvIVX(sv));
+ }
else
sv_catpv(t, "()");
op_dump(pm->op_pmreplroot);
}
if (pm->op_pmflags || (pm->op_pmregexp && pm->op_pmregexp->check_substr)) {
- SV *tmpsv = newSVpv("", 0);
+ SV *tmpsv = newSVpvn("", 0);
if (pm->op_pmdynflags & PMdf_USED)
sv_catpv(tmpsv, ",USED");
if (pm->op_pmdynflags & PMdf_TAINTED)
dump_indent(level, file, "ADDR = 0x%lx => 0x%lx\n",o, o->op_next);
#endif
if (o->op_flags) {
- SV *tmpsv = newSVpv("", 0);
+ SV *tmpsv = newSVpvn("", 0);
switch (o->op_flags & OPf_WANT) {
case OPf_WANT_VOID:
sv_catpv(tmpsv, ",VOID");
SvREFCNT_dec(tmpsv);
}
if (o->op_private) {
- SV *tmpsv = newSVpv("", 0);
+ SV *tmpsv = newSVpvn("", 0);
if (o->op_type == OP_AASSIGN) {
if (o->op_private & OPpASSIGN_COMMON)
sv_catpv(tmpsv, ",COMMON");
#ifdef USE_LOCALE_COLLATE
else if (v == &PL_vtbl_collxfrm) s = "collxfrm";
#endif
-#ifdef OVERLOAD
else if (v == &PL_vtbl_amagic) s = "amagic";
else if (v == &PL_vtbl_amagicelem) s = "amagicelem";
-#endif
+ else if (v == &PL_vtbl_backref) s = "backref";
if (s)
dump_indent(level, file, " MG_VIRTUAL = &PL_vtbl_%s\n", s);
else
if (mg->mg_ptr) {
dump_indent(level, file, " MG_PTR = 0x%lx", (long)mg->mg_ptr);
if (mg->mg_len >= 0) {
- SV *sv = newSVpv("", 0);
+ SV *sv = newSVpvn("", 0);
PerlIO_printf(file, " %s", pv_display(sv, mg->mg_ptr, mg->mg_len, 0, pvlim));
SvREFCNT_dec(sv);
}
if (flags & SVf_IOK) sv_catpv(d, "IOK,");
if (flags & SVf_NOK) sv_catpv(d, "NOK,");
if (flags & SVf_POK) sv_catpv(d, "POK,");
- if (flags & SVf_ROK) sv_catpv(d, "ROK,");
+ if (flags & SVf_ROK) {
+ sv_catpv(d, "ROK,");
+ if (SvWEAKREF(sv)) sv_catpv(d, "WEAKREF,");
+ }
if (flags & SVf_OOK) sv_catpv(d, "OOK,");
if (flags & SVf_FAKE) sv_catpv(d, "FAKE,");
if (flags & SVf_READONLY) sv_catpv(d, "READONLY,");
-#ifdef OVERLOAD
if (flags & SVf_AMAGIC) sv_catpv(d, "OVERLOAD,");
-#endif /* OVERLOAD */
if (flags & SVp_IOK) sv_catpv(d, "pIOK,");
if (flags & SVp_NOK) sv_catpv(d, "pNOK,");
if (flags & SVp_POK) sv_catpv(d, "pPOK,");
if (CvCLONE(sv)) sv_catpv(d, "CLONE,");
if (CvCLONED(sv)) sv_catpv(d, "CLONED,");
if (CvNODEBUG(sv)) sv_catpv(d, "NODEBUG,");
+ if (SvCOMPILED(sv)) sv_catpv(d, "COMPILED,");
break;
case SVt_PVHV:
if (HvSHAREKEYS(sv)) sv_catpv(d, "SHAREKEYS,");
sv_catpv(d, " ),");
}
}
+ /* FALL THROGH */
+ default:
+ if (SvEVALED(sv)) sv_catpv(d, "EVALED,");
+ if (SvIsUV(sv)) sv_catpv(d, "IsUV,");
+ break;
case SVt_PVBM:
if (SvTAIL(sv)) sv_catpv(d, "TAIL,");
- if (SvCOMPILED(sv)) sv_catpv(d, "COMPILED,");
+ if (SvVALID(sv)) sv_catpv(d, "VALID,");
break;
}
return;
}
if (type >= SVt_PVIV || type == SVt_IV) {
- dump_indent(level, file, " IV = %ld", (long)SvIVX(sv));
+ if (SvIsUV(sv))
+ dump_indent(level, file, " UV = %lu", (unsigned long)SvUVX(sv));
+ else
+ dump_indent(level, file, " IV = %ld", (long)SvIVX(sv));
if (SvOOK(sv))
PerlIO_printf(file, " (OFFSET)");
PerlIO_putc(file, '\n');
dump_indent(level, file, " PAGE = %ld\n", (long)IoPAGE(sv));
dump_indent(level, file, " PAGE_LEN = %ld\n", (long)IoPAGE_LEN(sv));
dump_indent(level, file, " LINES_LEFT = %ld\n", (long)IoLINES_LEFT(sv));
- dump_indent(level, file, " TOP_NAME = \"%s\"\n", IoTOP_NAME(sv));
+ if (IoTOP_NAME(sv))
+ dump_indent(level, file, " TOP_NAME = \"%s\"\n", IoTOP_NAME(sv));
do_gv_dump (level, file, " TOP_GV", IoTOP_GV(sv));
- dump_indent(level, file, " FMT_NAME = \"%s\"\n", IoFMT_NAME(sv));
+ if (IoFMT_NAME(sv))
+ dump_indent(level, file, " FMT_NAME = \"%s\"\n", IoFMT_NAME(sv));
do_gv_dump (level, file, " FMT_GV", IoFMT_GV(sv));
- dump_indent(level, file, " BOTTOM_NAME = \"%s\"\n", IoBOTTOM_NAME(sv));
+ if (IoBOTTOM_NAME(sv))
+ dump_indent(level, file, " BOTTOM_NAME = \"%s\"\n", IoBOTTOM_NAME(sv));
do_gv_dump (level, file, " BOTTOM_GV", IoBOTTOM_GV(sv));
dump_indent(level, file, " SUBPROCESS = %ld\n", (long)IoSUBPROCESS(sv));
- dump_indent(level, file, " TYPE = %c\n", IoTYPE(sv));
+ if (isPRINT(IoTYPE(sv)))
+ dump_indent(level, file, " TYPE = '%c'\n", IoTYPE(sv));
+ else
+ dump_indent(level, file, " TYPE = '\\%o'\n", IoTYPE(sv));
dump_indent(level, file, " FLAGS = 0x%lx\n", (long)IoFLAGS(sv));
break;
}