diff options
author | Nicholas Clark <nick@ccl4.org> | 2010-05-28 14:33:34 +0100 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2010-05-28 15:39:38 +0100 |
commit | 1fe3abee1ef8693b6241cf4cb1670e7e5e2d4a51 (patch) | |
tree | 144ddae4cb61db264c725e117cdfc09407456896 /dump.c | |
parent | cd431fdedf8dec69c65efa7edc1d60005800919a (diff) | |
download | perl-1fe3abee1ef8693b6241cf4cb1670e7e5e2d4a51.tar.gz |
In Perl_do_op_dump(), move calls to append_flags() into S_op_private_to_names()
Diffstat (limited to 'dump.c')
-rw-r--r-- | dump.c | 46 |
1 files changed, 34 insertions, 12 deletions
@@ -833,6 +833,38 @@ const struct flag_to_name op_open_names[] = { {OPpOPEN_OUT_CRLF, ",OUT_CRLF"} }; +struct op_private_by_op { + U16 op_type; + U16 len; + const struct flag_to_name *start; +}; + +const struct op_private_by_op op_private_names[] = { + {OP_TRANS, C_ARRAY_LENGTH(op_trans_names), op_trans_names }, + {OP_CONST, C_ARRAY_LENGTH(op_const_names), op_const_names }, + {OP_SORT, C_ARRAY_LENGTH(op_sort_names), op_sort_names }, + {OP_OPEN, C_ARRAY_LENGTH(op_open_names), op_open_names }, + {OP_BACKTICK, C_ARRAY_LENGTH(op_open_names), op_open_names } +}; + +static bool +S_op_private_to_names(pTHX_ SV *tmpsv, U32 optype, U32 op_private) { + const struct op_private_by_op *start = op_private_names; + const struct op_private_by_op *const end + = op_private_names + C_ARRAY_LENGTH(op_private_names); + + /* This is a linear search, but no worse than the code that it replaced. + It's debugging code - size is more important than speed. */ + do { + if (optype == start->op_type) { + S_append_flags(aTHX_ tmpsv, op_private, start->start, + start->start + start->len); + return TRUE; + } + } while (++start < end); + return FALSE; +} + void Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o) { @@ -954,6 +986,8 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o) sv_catpv(tmpsv, ",OUR_INTRO"); } } + else if (S_op_private_to_names(aTHX_ tmpsv, optype, o->op_private)) { + } else if (optype == OP_LEAVESUB || optype == OP_LEAVE || optype == OP_LEAVESUBLV || @@ -969,16 +1003,10 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o) if (o->op_private & OPpASSIGN_BACKWARDS) sv_catpv(tmpsv, ",BACKWARDS"); } - else if (optype == OP_TRANS) { - append_flags(tmpsv, o->op_private, op_trans_names); - } else if (optype == OP_REPEAT) { if (o->op_private & OPpREPEAT_DOLIST) sv_catpv(tmpsv, ",DOLIST"); } - else if (optype == OP_CONST) { - append_flags(tmpsv, o->op_private, op_const_names); - } else if (optype == OP_FLIP) { if (o->op_private & OPpFLIP_LINENUM) sv_catpv(tmpsv, ",LINENUM"); @@ -1007,12 +1035,6 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o) if (o->op_private & OPpEXISTS_SUB) sv_catpv(tmpsv, ",EXISTS_SUB"); } - else if (optype == OP_SORT) { - append_flags(tmpsv, o->op_private, op_sort_names); - } - else if (optype == OP_OPEN || optype == OP_BACKTICK) { - append_flags(tmpsv, o->op_private, op_open_names); - } else if (optype == OP_EXIT) { if (o->op_private & OPpEXIT_VMSISH) sv_catpv(tmpsv, ",EXIT_VMSISH"); |