Branch Coverage

next.xs
Criterion Covered Total %
branch 82 262 31.3


line true false branch
50 63 0 if ((op->op_spare & 1) || op->op_type != OP_ENTERSUB || !(op->op_flags & OPf_STACKED) || op->op_ppaddr != PL_ppaddr[OP_ENTERSUB]) return;
55 8 if ((op->op_spare & 1) || op->op_type != OP_ENTERSUB || !(op->op_flags & OPf_STACKED) || op->op_ppaddr != PL_ppaddr[OP_ENTERSUB]) return;
55 0 if ((op->op_spare & 1) || op->op_type != OP_ENTERSUB || !(op->op_flags & OPf_STACKED) || op->op_ppaddr != PL_ppaddr[OP_ENTERSUB]) return;
0 55 if ((op->op_spare & 1) || op->op_type != OP_ENTERSUB || !(op->op_flags & OPf_STACKED) || op->op_ppaddr != PL_ppaddr[OP_ENTERSUB]) return;
53 0 55 if (!curop) return; /* Such op can be created by call_sv(G_METHOD_NAMED) */
54 104 55 while (OpHAS_SIBLING(curop)) curop = OpSIBLING(curop);
104 0 while (OpHAS_SIBLING(curop)) curop = OpSIBLING(curop);
57 55 0 if (curop->op_next == op && curop->op_type == OP_METHOD_REDIR && curop->op_ppaddr == PL_ppaddr[OP_METHOD_REDIR]) {
48 7 if (curop->op_next == op && curop->op_type == OP_METHOD_REDIR && curop->op_ppaddr == PL_ppaddr[OP_METHOD_REDIR]) {
48 0 if (curop->op_next == op && curop->op_type == OP_METHOD_REDIR && curop->op_ppaddr == PL_ppaddr[OP_METHOD_REDIR]) {
59 40 8 if (!payload) return;
69 7 0 if (!OP_TYPE_IS_OR_WAS(curop, OP_LIST)) return;
7 0 if (!OP_TYPE_IS_OR_WAS(curop, OP_LIST)) return;
0 7 if (!OP_TYPE_IS_OR_WAS(curop, OP_LIST)) return;
0 0 if (!OP_TYPE_IS_OR_WAS(curop, OP_LIST)) return;
71 0 7 if (!curop) return;
73 15 7 while (OpHAS_SIBLING(curop)) curop = OpSIBLING(curop);
15 0 while (OpHAS_SIBLING(curop)) curop = OpSIBLING(curop);
74 7 0 if (!OP_TYPE_IS_OR_WAS(curop, OP_RV2CV)) return;
7 0 if (!OP_TYPE_IS_OR_WAS(curop, OP_RV2CV)) return;
0 7 if (!OP_TYPE_IS_OR_WAS(curop, OP_RV2CV)) return;
0 0 if (!OP_TYPE_IS_OR_WAS(curop, OP_RV2CV)) return;
77 7 0 if (!curop || curop->op_type != OP_GV) return;
0 7 if (!curop || curop->op_type != OP_GV) return;
79 0 7 if (GvCV(gv) != check) return;
83 0 7 if (!payload) return;
91 158 212 if (SvROK(proto)) {
93 158 0 if (SvOBJECT(val)) return SvSTASH(val);
100 15 0 if (ent) return (GV*)HeVAL(ent);
103 0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
0 0 sv_catpvn(fqn, HvNAME(CopSTASH(PL_curcop)), HvNAMELEN(CopSTASH(PL_curcop)));
106 0 0 return gv_fetchpvn_flags(SvPVX(fqn), SvCUR(fqn), GV_ADD|(is_utf8 ? SVf_UTF8 : 0), SVt_PVCV);
113 0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ *PL_stack_sp)); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ *PL_stack_sp)); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ *PL_stack_sp)); });
114 0 0 *PL_stack_sp = sub ? sv_2mortal(newRV((SV*)sub)) : &PL_sv_undef;
115 0 0 return PL_op->op_next->op_next; // skip ENTERSUB
122 0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ *PL_stack_sp)); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ *PL_stack_sp)); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ *PL_stack_sp)); });
123 0 0 *PL_stack_sp = sub ? sv_2mortal(newRV((SV*)sub)) : &PL_sv_undef;
124 0 0 return PL_op->op_next;
130 10 0 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
10 0 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
0 0 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
131 0 10 PP_METHOD_EXEC(sub);
0 0 PP_METHOD_EXEC(sub);
138 0 0 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
0 0 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
0 0 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
139 0 0 PP_SUB_EXEC(sub);
145 0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
146 0 0 PP_METHOD_MAYBE_EXEC(sub);
0 0 PP_METHOD_MAYBE_EXEC(sub);
0 0 PP_METHOD_MAYBE_EXEC(sub);
0 0 PP_METHOD_MAYBE_EXEC(sub);
0 0 PP_METHOD_MAYBE_EXEC(sub);
153 0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1])); });
154 0 0 PP_SUB_MAYBE_EXEC(sub);
0 0 PP_SUB_MAYBE_EXEC(sub);
0 0 PP_SUB_MAYBE_EXEC(sub);
0 0 PP_SUB_MAYBE_EXEC(sub);
160 62 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)cMETHOPx_rclass(PL_op)); });
62 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)cMETHOPx_rclass(PL_op)); });
0 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)cMETHOPx_rclass(PL_op)); });
161 0 62 PP_METHOD_EXEC(sub);
0 0 PP_METHOD_EXEC(sub);
168 62 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)TOPs); });
62 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)TOPs); });
0 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)TOPs); });
169 0 0 PP_SUB_EXEC(sub);
175 140 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)cMETHOPx_rclass(PL_op)); });
140 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)cMETHOPx_rclass(PL_op)); });
0 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)cMETHOPx_rclass(PL_op)); });
176 69 71 PP_METHOD_MAYBE_EXEC(sub);
0 69 PP_METHOD_MAYBE_EXEC(sub);
71 0 PP_METHOD_MAYBE_EXEC(sub);
71 0 PP_METHOD_MAYBE_EXEC(sub);
0 0 PP_METHOD_MAYBE_EXEC(sub);
183 33 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)TOPs); });
33 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)TOPs); });
0 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ PL_stack_base[TOPMARK+1]), (GV*)TOPs); });
184 33 0 PP_SUB_MAYBE_EXEC(sub);
0 0 PP_SUB_MAYBE_EXEC(sub);
0 0 PP_SUB_MAYBE_EXEC(sub);
0 0 PP_SUB_MAYBE_EXEC(sub);
189 0 15 if (items < 1) croak_xs_usage(cv, "proto, ...");
198 8 7 if (ix == 0) { // super
200 8 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ proto), context); });
8 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ proto), context); });
0 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ proto), context); });
0 0 _TRYNEXT({ sub = xs::super::method_strict(aTHX_ proto_stash(aTHX_ proto), context); });
203 7 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ proto), context); });
7 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ proto), context); });
0 0 _TRYNEXT({ sub = xs::super::method(aTHX_ proto_stash(aTHX_ proto), context); });
204 1 6 if (!sub) XSRETURN_EMPTY;
208 0 14 PUSHMARK(SP);
209 14 0 call_sv((SV*)sub, GIMME_V);
210 0 0 LEAVE;
216 2 1 SV* fqn = get_sv(ix == 0 ? "super::AUTOLOAD" : "super::maybe::AUTOLOAD", 0);
229 8 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); });
8 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); });
230 4 4 RETVAL = sub ? newRV((SV*)sub) : &PL_sv_undef;
237 32 0 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ proto)); });
28 4 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ proto)); });
4 0 _TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ proto)); });
240 0 28 PUSHMARK(SP);
241 26 2 call_sv((SV*)sub, GIMME_V);
243 0 4 return;
253 8 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); });
8 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); });
0 0 _TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); });
254 4 4 if (!sub) XSRETURN_EMPTY;
257 0 4 PUSHMARK(SP);
258 4 0 call_sv((SV*)sub, GIMME_V);
260 0 0 return;