using C<is_utf8_string()> to determine if it is Unicode.
If PERL_PV_ESCAPE_ALL is set then all input chars will be output
-using C<\x01F1> style escapes, otherwise only chars above 255 will be
-escaped using this style, other non printable chars will use octal or
-common escaped patterns like C<\n>. If PERL_PV_ESCAPE_NOBACKSLASH
-then all chars below 255 will be treated as printable and
+using C<\x01F1> style escapes, otherwise if PERL_PV_ESCAPE_NONASCII is set, only
+chars above 127 will be escaped using this style; otherwise, only chars above
+255 will be so escaped; other non printable chars will use octal or
+common escaped patterns like C<\n>. Otherwise, if PERL_PV_ESCAPE_NOBACKSLASH
+then all chars below 255 will be treated as printable and
will be output as literals.
If PERL_PV_ESCAPE_FIRSTCHAR is set then only the first char of the
-string will be escaped, regardles of max. If the string is utf8 and
-the chars value is >255 then it will be returned as a plain hex
-sequence. Thus the output will either be a single char,
-an octal escape sequence, a special escape like C<\n> or a 3 or
-more digit hex value.
+string will be escaped, regardless of max. If the output is to be in hex,
+then it will be returned as a plain hex
+sequence. Thus the output will either be a single char,
+an octal escape sequence, a special escape like C<\n> or a hex value.
If PERL_PV_ESCAPE_RE is set then the escape char used will be a '%' and
not a '\\'. This is because regexes very often contain backslashed
const UV u= (isuni) ? utf8_to_uvchr((U8*)pv, &readsize) : (U8)*pv;
const U8 c = (U8)u & 0xFF;
- if ( ( u > 255 ) || (flags & PERL_PV_ESCAPE_ALL)) {
+ if ( ( u > 255 )
+ || (flags & PERL_PV_ESCAPE_ALL)
+ || (( u > 127 ) && (flags & PERL_PV_ESCAPE_NONASCII)))
+ {
if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
chsize = my_snprintf( octbuf, PV_ESCAPE_OCTBUFSIZE,
"%"UVxf, u);
double quoted with any double quotes in the string escaped. Otherwise
if the PERL_PV_PRETTY_LTGT flag is set then the result be wrapped in
angle brackets.
-
+
If the PERL_PV_PRETTY_ELLIPSES flag is set and not all characters in
string were output then an ellipsis C<...> will be appended to the
string. Note that this happens AFTER it has been quoted.
-
+
If start_color is non-null then it will be inserted after the opening
quote (if there is one) but before the escaped text. If end_color
is non-null then it will be inserted after the escaped text but before
any quotes or ellipses.
Returns a pointer to the prettified text as held by dsv.
-
+
=cut
*/
const struct flag_to_name op_flags_names[] = {
{OPf_KIDS, ",KIDS"},
{OPf_PARENS, ",PARENS"},
- {OPf_STACKED, ",STACKED"},
{OPf_REF, ",REF"},
{OPf_MOD, ",MOD"},
+ {OPf_STACKED, ",STACKED"},
{OPf_SPECIAL, ",SPECIAL"}
};
const struct flag_to_name op_trans_names[] = {
+ {OPpTRANS_FROM_UTF, ",FROM_UTF"},
+ {OPpTRANS_TO_UTF, ",TO_UTF"},
+ {OPpTRANS_IDENTICAL, ",IDENTICAL"},
{OPpTRANS_SQUASH, ",SQUASH"},
- {OPpTRANS_DELETE, ",DELETE"},
{OPpTRANS_COMPLEMENT, ",COMPLEMENT"},
- {OPpTRANS_IDENTICAL, ",IDENTICAL"},
- {OPpTRANS_GROWS, ",GROWS"}
+ {OPpTRANS_GROWS, ",GROWS"},
+ {OPpTRANS_DELETE, ",DELETE"}
};
const struct flag_to_name op_entersub_names[] = {
- {OPpENTERSUB_AMPER, ",AMPER"},
{OPpENTERSUB_DB, ",DB"},
{OPpENTERSUB_HASTARG, ",HASTARG"},
+ {OPpENTERSUB_NOMOD, ",NOMOD"},
+ {OPpENTERSUB_AMPER, ",AMPER"},
{OPpENTERSUB_NOPAREN, ",NOPAREN"},
- {OPpENTERSUB_INARGS, ",INARGS"},
- {OPpENTERSUB_NOMOD, ",NOMOD"}
+ {OPpENTERSUB_INARGS, ",INARGS"}
};
const struct flag_to_name op_const_names[] = {
- {OPpCONST_BARE, ",BARE"},
+ {OPpCONST_NOVER, ",NOVER"},
+ {OPpCONST_SHORTCIRCUIT, ",SHORTCIRCUIT"},
{OPpCONST_STRICT, ",STRICT"},
+ {OPpCONST_ENTERED, ",ENTERED"},
{OPpCONST_ARYBASE, ",ARYBASE"},
- {OPpCONST_WARNING, ",WARNING"},
- {OPpCONST_ENTERED, ",ENTERED"}
+ {OPpCONST_BARE, ",BARE"},
+ {OPpCONST_WARNING, ",WARNING"}
};
const struct flag_to_name op_sort_names[] = {
{OPpSORT_NUMERIC, ",NUMERIC"},
{OPpSORT_INTEGER, ",INTEGER"},
- {OPpSORT_REVERSE, ",REVERSE"}
+ {OPpSORT_REVERSE, ",REVERSE"},
+ {OPpSORT_INPLACE, ",INPLACE"},
+ {OPpSORT_DESCEND, ",DESCEND"},
+ {OPpSORT_QSORT, ",QSORT"},
+ {OPpSORT_STABLE, ",STABLE"}
};
const struct flag_to_name op_open_names[] = {
#define OP_PRIVATE_ONCE(op, flag, name) \
const struct flag_to_name CAT2(op, _names)[] = { \
{(flag), (name)} \
- };
+ }
OP_PRIVATE_ONCE(op_aassign, OPpASSIGN_COMMON, ",COMMON");
OP_PRIVATE_ONCE(op_leavesub, OPpREFCOUNTED, ",REFCOUNTED");
OP_PRIVATE_ONCE(op_sassign, OPpASSIGN_BACKWARDS, ",BACKWARDS");
OP_PRIVATE_ONCE(op_repeat, OPpREPEAT_DOLIST, ",DOLIST");
+OP_PRIVATE_ONCE(op_reverse, OPpREVERSE_INPLACE, ",INPLACE");
OP_PRIVATE_ONCE(op_rv2cv, OPpLVAL_INTRO, ",INTRO");
OP_PRIVATE_ONCE(op_flip, OPpFLIP_LINENUM, ",LINENUM");
OP_PRIVATE_ONCE(op_gv, OPpEARLY_CV, ",EARLY_CV");
}
else if (S_op_private_to_names(aTHX_ tmpsv, optype, o->op_private)) {
}
- else if (PL_check[optype] != MEMBER_TO_FPTR(Perl_ck_ftst)) {
+ else if (PL_check[optype] != Perl_ck_ftst) {
if (OP_IS_FILETEST_ACCESS(o->op_type) && o->op_private & OPpFT_ACCESS)
sv_catpv(tmpsv, ",FT_ACCESS");
if (o->op_private & OPpFT_STACKED)
{ PERL_MAGIC_tied, "tied(P)" },
{ PERL_MAGIC_sig, "sig(S)" },
{ PERL_MAGIC_uvar, "uvar(U)" },
+ { PERL_MAGIC_checkcall, "checkcall(])" },
{ PERL_MAGIC_overload_elem, "overload_elem(a)" },
{ PERL_MAGIC_overload_table, "overload_table(c)" },
{ PERL_MAGIC_regdatum, "regdatum(d)" },
if (mg->mg_type == PERL_MAGIC_envelem &&
mg->mg_flags & MGf_TAINTEDDIR)
Perl_dump_indent(aTHX_ level, file, " TAINTEDDIR\n");
+ if (mg->mg_type == PERL_MAGIC_regex_global &&
+ mg->mg_flags & MGf_MINMATCH)
+ Perl_dump_indent(aTHX_ level, file, " MINMATCH\n");
if (mg->mg_flags & MGf_REFCOUNTED)
Perl_dump_indent(aTHX_ level, file, " REFCOUNTED\n");
if (mg->mg_flags & MGf_GSKIP)
Perl_dump_indent(aTHX_ level, file, " GSKIP\n");
- if (mg->mg_type == PERL_MAGIC_regex_global &&
- mg->mg_flags & MGf_MINMATCH)
- Perl_dump_indent(aTHX_ level, file, " MINMATCH\n");
+ if (mg->mg_flags & MGf_COPY)
+ Perl_dump_indent(aTHX_ level, file, " COPY\n");
+ if (mg->mg_flags & MGf_DUP)
+ Perl_dump_indent(aTHX_ level, file, " DUP\n");
+ if (mg->mg_flags & MGf_LOCAL)
+ Perl_dump_indent(aTHX_ level, file, " LOCAL\n");
}
if (mg->mg_obj) {
- Perl_dump_indent(aTHX_ level, file, " MG_OBJ = 0x%"UVxf"\n",
+ Perl_dump_indent(aTHX_ level, file, " MG_OBJ = 0x%"UVxf"\n",
PTR2UV(mg->mg_obj));
if (mg->mg_type == PERL_MAGIC_qr) {
REGEXP* const re = (REGEXP *)mg->mg_obj;
SV * const dsv = sv_newmortal();
const char * const s
- = pv_pretty(dsv, RX_WRAPPED(re), RX_WRAPLEN(re),
+ = pv_pretty(dsv, RX_WRAPPED(re), RX_WRAPLEN(re),
60, NULL, NULL,
( PERL_PV_PRETTY_QUOTE | PERL_PV_ESCAPE_RE | PERL_PV_PRETTY_ELLIPSES |
(RX_UTF8(re) ? PERL_PV_ESCAPE_UNI : 0))
Perl_dump_indent(aTHX_ level, file, "%s = 0x%"UVxf, name, PTR2UV(sv));
if (sv && (hvname = HvNAME_get(sv)))
- PerlIO_printf(file, "\t\"%s\"\n", hvname);
+ {
+ /* we have to use pv_display and HvNAMELEN_get() so that we display the real package
+ name which quite legally could contain insane things like tabs, newlines, nulls or
+ other scary crap - this should produce sane results - except maybe for unicode package
+ names - but we will wait for someone to file a bug on that - demerphq */
+ SV * const tmpsv = newSVpvs("");
+ PerlIO_printf(file, "\t%s\n", pv_display(tmpsv, hvname, HvNAMELEN_get(sv), 0, 1024));
+ }
else
PerlIO_putc(file, '\n');
}
{CVf_NODEBUG, "NODEBUG,"},
{CVf_LVALUE, "LVALUE,"},
{CVf_METHOD, "METHOD,"},
- {CVf_WEAKOUTSIDE, "WEAKOUTSIDE,"}
+ {CVf_WEAKOUTSIDE, "WEAKOUTSIDE,"},
+ {CVf_CVGV_RC, "CVGV_RC,"},
+ {CVf_ISXSUB, "ISXSUB,"}
};
const struct flag_to_name hv_flags_names[] = {
{GVf_IMPORTED_CV, " CV"},
};
+const struct flag_to_name regexp_flags_names[] = {
+ {RXf_PMf_MULTILINE, "PMf_MULTILINE,"},
+ {RXf_PMf_SINGLELINE, "PMf_SINGLELINE,"},
+ {RXf_PMf_FOLD, "PMf_FOLD,"},
+ {RXf_PMf_EXTENDED, "PMf_EXTENDED,"},
+ {RXf_PMf_KEEPCOPY, "PMf_KEEPCOPY,"},
+ {RXf_ANCH_BOL, "ANCH_BOL,"},
+ {RXf_ANCH_MBOL, "ANCH_MBOL,"},
+ {RXf_ANCH_SBOL, "ANCH_SBOL,"},
+ {RXf_ANCH_GPOS, "ANCH_GPOS,"},
+ {RXf_GPOS_SEEN, "GPOS_SEEN,"},
+ {RXf_GPOS_FLOAT, "GPOS_FLOAT,"},
+ {RXf_LOOKBEHIND_SEEN, "LOOKBEHIND_SEEN,"},
+ {RXf_EVAL_SEEN, "EVAL_SEEN,"},
+ {RXf_CANY_SEEN, "CANY_SEEN,"},
+ {RXf_NOSCAN, "NOSCAN,"},
+ {RXf_CHECK_ALL, "CHECK_ALL,"},
+ {RXf_MATCH_UTF8, "MATCH_UTF8,"},
+ {RXf_USE_INTUIT_NOML, "USE_INTUIT_NOML,"},
+ {RXf_USE_INTUIT_ML, "USE_INTUIT_ML,"},
+ {RXf_INTUIT_TAIL, "INTUIT_TAIL,"},
+ {RXf_SPLIT, "SPLIT,"},
+ {RXf_COPY_DONE, "COPY_DONE,"},
+ {RXf_TAINTED_SEEN, "TAINTED_SEEN,"},
+ {RXf_TAINTED, "TAINTED,"},
+ {RXf_START_ONLY, "START_ONLY,"},
+ {RXf_SKIPWHITE, "SKIPWHITE,"},
+ {RXf_WHITE, "WHITE,"},
+ {RXf_NULL, "NULL,"},
+};
+
void
Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
{
flags = SvFLAGS(sv);
type = SvTYPE(sv);
+ /* process general SV flags */
+
d = Perl_newSVpvf(aTHX_
"(0x%"UVxf") at 0x%"UVxf"\n%*s REFCNT = %"IVdf"\n%*s FLAGS = (",
PTR2UV(SvANY(sv)), PTR2UV(sv),
sv_catpv(d, "SCREAM,");
}
+ /* process type-specific SV flags */
+
switch (type) {
case SVt_PVCV:
case SVt_PVFM:
sv_catpv(d, ")");
s = SvPVX_const(d);
+ /* dump initial SV details */
+
#ifdef DEBUG_LEAKING_SCALARS
Perl_dump_indent(aTHX_ level, file,
- "ALLOCATED at %s:%d %s %s%s; serial %"UVuf"\n",
+ "ALLOCATED at %s:%d %s %s (parent 0x%"UVxf"); serial %"UVuf"\n",
sv->sv_debug_file ? sv->sv_debug_file : "(unknown)",
sv->sv_debug_line,
sv->sv_debug_inpad ? "for" : "by",
sv->sv_debug_optype ? PL_op_name[sv->sv_debug_optype]: "(none)",
- sv->sv_debug_cloned ? " (cloned)" : "",
+ PTR2UV(sv->sv_debug_parent),
sv->sv_debug_serial
);
#endif
Perl_dump_indent(aTHX_ level, file, "SV = ");
+
+ /* Dump SV type */
+
if (type < SVt_LAST) {
PerlIO_printf(file, "%s%s\n", svtypenames[type], s);
SvREFCNT_dec(d);
return;
}
+
+ /* Dump general SV fields */
+
if ((type >= SVt_PVIV && type != SVt_PVAV && type != SVt_PVHV
&& type != SVt_PVCV && !isGV_with_GP(sv) && type != SVt_PVFM
&& type != SVt_PVIO && type != SVt_REGEXP)
#endif
PerlIO_putc(file, '\n');
}
+
if ((type == SVt_PVNV || type == SVt_PVMG) && SvFLAGS(sv) & SVpad_NAME) {
Perl_dump_indent(aTHX_ level, file, " COP_LOW = %"UVuf"\n",
(UV) COP_SEQ_RANGE_LOW(sv));
#endif
RESTORE_NUMERIC_LOCAL();
}
+
if (SvROK(sv)) {
Perl_dump_indent(aTHX_ level, file, " RV = 0x%"UVxf"\n", PTR2UV(SvRV(sv)));
if (nest < maxnest)
do_sv_dump(level+1, file, SvRV(sv), nest+1, maxnest, dumpops, pvlim);
}
+
if (type < SVt_PV) {
SvREFCNT_dec(d);
return;
}
+
if ((type <= SVt_PVLV && !isGV_with_GP(sv)) || type == SVt_PVFM) {
if (SvPVX_const(sv)) {
STRLEN delta;
else
Perl_dump_indent(aTHX_ level, file, " PV = 0\n");
}
- if (type == SVt_REGEXP) {
- /* FIXME dumping
- Perl_dump_indent(aTHX_ level, file, " REGEXP = 0x%"UVxf"\n",
- PTR2UV(((struct regexp *)SvANY(sv))->xrx_regexp));
- */
- }
+
if (type >= SVt_PVMG) {
if (type == SVt_PVMG && SvPAD_OUR(sv)) {
HV * const ost = SvOURSTASH(sv);
do_hv_dump(level, file, " OURSTASH", ost);
} else {
if (SvMAGIC(sv))
- do_magic_dump(level, file, SvMAGIC(sv), nest, maxnest, dumpops, pvlim);
+ do_magic_dump(level, file, SvMAGIC(sv), nest+1, maxnest, dumpops, pvlim);
}
if (SvSTASH(sv))
do_hv_dump(level, file, " STASH", SvSTASH(sv));
}
+
+ /* Dump type-specific SV fields */
+
switch (type) {
case SVt_PVAV:
Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%"UVxf, PTR2UV(AvARRAY(sv)));
AV * const backrefs
= *Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(sv));
struct mro_meta * const meta = HvAUX(sv)->xhv_mro_meta;
+ if (HvAUX(sv)->xhv_name_count)
+ Perl_dump_indent(aTHX_
+ level, file, " NAMECOUNT = %"IVdf"\n",
+ (IV)HvAUX(sv)->xhv_name_count
+ );
+ if (HvAUX(sv)->xhv_name_u.xhvnameu_name && HvENAME_HEK_NN(sv)) {
+ const I32 count = HvAUX(sv)->xhv_name_count;
+ if (count) {
+ SV * const names = newSVpvs_flags("", SVs_TEMP);
+ /* The starting point is the first element if count is
+ positive and the second element if count is negative. */
+ HEK *const *hekp = HvAUX(sv)->xhv_name_u.xhvnameu_names
+ + (count < 0 ? 1 : 0);
+ HEK *const *const endp = HvAUX(sv)->xhv_name_u.xhvnameu_names
+ + (count < 0 ? -count : count);
+ while (hekp < endp) {
+ if (*hekp) {
+ sv_catpvs(names, ", \"");
+ sv_catpvn(names, HEK_KEY(*hekp), HEK_LEN(*hekp));
+ sv_catpvs(names, "\"");
+ } else {
+ /* This should never happen. */
+ sv_catpvs(names, ", (null)");
+ }
+ ++hekp;
+ }
+ Perl_dump_indent(aTHX_
+ level, file, " ENAME = %s\n", SvPV_nolen(names)+2
+ );
+ }
+ else
+ Perl_dump_indent(aTHX_
+ level, file, " ENAME = \"%s\"\n", HvENAME_get(sv)
+ );
+ }
if (backrefs) {
Perl_dump_indent(aTHX_ level, file, " BACKREFS = 0x%"UVxf"\n",
PTR2UV(backrefs));
}
}
}
- if (nest < maxnest && !HvEITER_get(sv)) { /* Try to preserve iterator */
- HE *he;
- HV * const hv = MUTABLE_HV(sv);
- int count = maxnest - nest;
-
- hv_iterinit(hv);
- while ((he = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))
- && count--) {
- STRLEN len;
- const U32 hash = HeHASH(he);
- SV * const keysv = hv_iterkeysv(he);
- const char * const keypv = SvPV_const(keysv, len);
- SV * const elt = hv_iterval(hv, he);
-
- Perl_dump_indent(aTHX_ level+1, file, "Elt %s ", pv_display(d, keypv, len, 0, pvlim));
- if (SvUTF8(keysv))
- PerlIO_printf(file, "[UTF8 \"%s\"] ", sv_uni_display(d, keysv, 6 * SvCUR(keysv), UNI_DISPLAY_QQ));
- if (HeKREHASH(he))
- PerlIO_printf(file, "[REHASH] ");
- PerlIO_printf(file, "HASH = 0x%"UVxf"\n", (UV)hash);
- do_sv_dump(level+1, file, elt, nest+1, maxnest, dumpops, pvlim);
+ if (nest < maxnest) {
+ if (HvEITER_get(sv)) /* preserve iterator */
+ Perl_dump_indent(aTHX_ level, file,
+ " (*** Active iterator; skipping element dump ***)\n");
+ else {
+ HE *he;
+ HV * const hv = MUTABLE_HV(sv);
+ int count = maxnest - nest;
+
+ hv_iterinit(hv);
+ while ((he = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))
+ && count--) {
+ STRLEN len;
+ const U32 hash = HeHASH(he);
+ SV * const keysv = hv_iterkeysv(he);
+ const char * const keypv = SvPV_const(keysv, len);
+ SV * const elt = hv_iterval(hv, he);
+
+ Perl_dump_indent(aTHX_ level+1, file, "Elt %s ", pv_display(d, keypv, len, 0, pvlim));
+ if (SvUTF8(keysv))
+ PerlIO_printf(file, "[UTF8 \"%s\"] ", sv_uni_display(d, keysv, 6 * SvCUR(keysv), UNI_DISPLAY_QQ));
+ if (HeKREHASH(he))
+ PerlIO_printf(file, "[REHASH] ");
+ PerlIO_printf(file, "HASH = 0x%"UVxf"\n", (UV)hash);
+ do_sv_dump(level+1, file, elt, nest+1, maxnest, dumpops, pvlim);
+ }
+ hv_iterinit(hv); /* Return to status quo */
}
- hv_iterinit(hv); /* Return to status quo */
}
break;
+
case SVt_PVCV:
if (SvPOK(sv)) {
STRLEN len;
if (nest < maxnest && (CvCLONE(sv) || CvCLONED(sv)))
do_sv_dump(level+1, file, MUTABLE_SV(CvOUTSIDE(sv)), nest+1, maxnest, dumpops, pvlim);
break;
+
case SVt_PVGV:
case SVt_PVLV:
if (type == SVt_PVLV) {
Perl_dump_indent(aTHX_ level, file, " TYPE = '\\%o'\n", IoTYPE(sv));
Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%"UVxf"\n", (UV)IoFLAGS(sv));
break;
+ case SVt_REGEXP:
+ {
+ struct regexp * const r = (struct regexp *)SvANY(sv);
+ flags = RX_EXTFLAGS((REGEXP*)sv);
+ sv_setpv(d,"");
+ append_flags(d, flags, regexp_flags_names);
+ if (*(SvEND(d) - 1) == ',') {
+ SvCUR_set(d, SvCUR(d) - 1);
+ SvPVX(d)[SvCUR(d)] = '\0';
+ }
+ Perl_dump_indent(aTHX_ level, file, " EXTFLAGS = 0x%"UVxf" (%s)\n",
+ (UV)flags, SvPVX_const(d));
+ Perl_dump_indent(aTHX_ level, file, " INTFLAGS = 0x%"UVxf"\n",
+ (UV)(r->intflags));
+ Perl_dump_indent(aTHX_ level, file, " NPARENS = %"UVuf"\n",
+ (UV)(r->nparens));
+ Perl_dump_indent(aTHX_ level, file, " LASTPAREN = %"UVuf"\n",
+ (UV)(r->lastparen));
+ Perl_dump_indent(aTHX_ level, file, " LASTCLOSEPAREN = %"UVuf"\n",
+ (UV)(r->lastcloseparen));
+ Perl_dump_indent(aTHX_ level, file, " MINLEN = %"IVdf"\n",
+ (IV)(r->minlen));
+ Perl_dump_indent(aTHX_ level, file, " MINLENRET = %"IVdf"\n",
+ (IV)(r->minlenret));
+ Perl_dump_indent(aTHX_ level, file, " GOFS = %"UVuf"\n",
+ (UV)(r->gofs));
+ Perl_dump_indent(aTHX_ level, file, " PRE_PREFIX = %"UVuf"\n",
+ (UV)(r->pre_prefix));
+ Perl_dump_indent(aTHX_ level, file, " SEEN_EVALS = %"UVuf"\n",
+ (UV)(r->seen_evals));
+ Perl_dump_indent(aTHX_ level, file, " SUBLEN = %"IVdf"\n",
+ (IV)(r->sublen));
+ if (r->subbeg)
+ Perl_dump_indent(aTHX_ level, file, " SUBBEG = 0x%"UVxf" %s\n",
+ PTR2UV(r->subbeg),
+ pv_display(d, r->subbeg, r->sublen, 50, pvlim));
+ else
+ Perl_dump_indent(aTHX_ level, file, " SUBBEG = 0x0\n");
+ Perl_dump_indent(aTHX_ level, file, " ENGINE = 0x%"UVxf"\n",
+ PTR2UV(r->engine));
+ Perl_dump_indent(aTHX_ level, file, " MOTHER_RE = 0x%"UVxf"\n",
+ PTR2UV(r->mother_re));
+ Perl_dump_indent(aTHX_ level, file, " PAREN_NAMES = 0x%"UVxf"\n",
+ PTR2UV(r->paren_names));
+ Perl_dump_indent(aTHX_ level, file, " SUBSTRS = 0x%"UVxf"\n",
+ PTR2UV(r->substrs));
+ Perl_dump_indent(aTHX_ level, file, " PPRIVATE = 0x%"UVxf"\n",
+ PTR2UV(r->pprivate));
+ Perl_dump_indent(aTHX_ level, file, " OFFS = 0x%"UVxf"\n",
+ PTR2UV(r->offs));
+#ifdef PERL_OLD_COPY_ON_WRITE
+ Perl_dump_indent(aTHX_ level, file, " SAVED_COPY = 0x%"UVxf"\n",
+ PTR2UV(r->saved_copy));
+#endif
+ }
+ break;
}
SvREFCNT_dec(d);
}
if (DEBUG_t_TEST_) debop(PL_op);
if (DEBUG_P_TEST_) debprof(PL_op);
}
- } while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX)));
+ } while ((PL_op = PL_op->op_ppaddr(aTHX)));
DEBUG_l(Perl_deb(aTHX_ "leaving RUNOPS level\n"));
TAINT_NOT;
}
void
-Perl_xmldump_all_perl(pTHX_ bool justperl)
+Perl_xmldump_all_perl(pTHX_ bool justperl PERL_UNUSED_DECL)
{
PerlIO_setlinebuf(PL_xmlfp);
if (PL_main_root)
op_xmldump(PL_main_root);
- xmldump_packsubs_perl(PL_defstash, justperl);
+ /* someday we might call this, when it outputs XML: */
+ /* xmldump_packsubs_perl(PL_defstash, justperl); */
if (PL_xmlfp != (PerlIO*)PerlIO_stdout())
PerlIO_close(PL_xmlfp);
PL_xmlfp = 0;
}
char *
+Perl_sv_catxmlpv(pTHX_ SV *dsv, const char *pv, int utf8)
+{
+ PERL_ARGS_ASSERT_SV_CATXMLPV;
+ return sv_catxmlpvn(dsv, pv, strlen(pv), utf8);
+}
+
+char *
Perl_sv_catxmlpvn(pTHX_ SV *dsv, const char *pv, STRLEN len, int utf8)
{
unsigned int c;
sv_catpv(t, " BIND=\"");
break;
case SVt_REGEXP:
- sv_catpv(t, " ORANGE=\"");
+ sv_catpv(t, " REGEXP=\"");
break;
case SVt_PVFM:
sv_catpv(t, " FM=\"");
if (o->op_private & OPpHUSH_VMSISH)
sv_catpv(tmpsv, ",HUSH_VMSISH");
}
- else if (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)) {
+ else if (PL_check[o->op_type] != Perl_ck_ftst) {
if (OP_IS_FILETEST_ACCESS(o->op_type) && o->op_private & OPpFT_ACCESS)
sv_catpv(tmpsv, ",FT_ACCESS");
if (o->op_private & OPpFT_STACKED)