| line |
true |
false |
branch |
|
10
|
157 |
211 |
if (SvROK(proto)) { |
|
12
|
157 |
0 |
if (SvOBJECT(val)) return SvSTASH(val); |
|
61
|
61 |
0 |
if ((op->op_spare & 1) || op->op_type != OP_ENTERSUB || !(op->op_flags & OPf_STACKED) || op->op_ppaddr != PL_ppaddr[OP_ENTERSUB]) return; |
|
|
53 |
8 |
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 |
if ((op->op_spare & 1) || op->op_type != OP_ENTERSUB || !(op->op_flags & OPf_STACKED) || op->op_ppaddr != PL_ppaddr[OP_ENTERSUB]) return; |
|
|
0 |
53 |
if ((op->op_spare & 1) || op->op_type != OP_ENTERSUB || !(op->op_flags & OPf_STACKED) || op->op_ppaddr != PL_ppaddr[OP_ENTERSUB]) return; |
|
64
|
0 |
53 |
if (!curop) return; /* Such op can be created by call_sv(G_METHOD_NAMED) */ |
|
65
|
100 |
53 |
while (OpHAS_SIBLING(curop)) curop = OpSIBLING(curop); |
|
|
100 |
0 |
while (OpHAS_SIBLING(curop)) curop = OpSIBLING(curop); |
|
68
|
53 |
0 |
if (curop->op_next == op && curop->op_type == OP_METHOD_REDIR && curop->op_ppaddr == PL_ppaddr[OP_METHOD_REDIR]) { |
|
|
46 |
7 |
if (curop->op_next == op && curop->op_type == OP_METHOD_REDIR && curop->op_ppaddr == PL_ppaddr[OP_METHOD_REDIR]) { |
|
|
46 |
0 |
if (curop->op_next == op && curop->op_type == OP_METHOD_REDIR && curop->op_ppaddr == PL_ppaddr[OP_METHOD_REDIR]) { |
|
70
|
38 |
8 |
if (!payload) return; |
|
80
|
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; |
|
82
|
0 |
7 |
if (!curop) return; |
|
84
|
15 |
7 |
while (OpHAS_SIBLING(curop)) curop = OpSIBLING(curop); |
|
|
15 |
0 |
while (OpHAS_SIBLING(curop)) curop = OpSIBLING(curop); |
|
85
|
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; |
|
88
|
7 |
0 |
if (!curop || curop->op_type != OP_GV) return; |
|
|
0 |
7 |
if (!curop || curop->op_type != OP_GV) return; |
|
90
|
0 |
7 |
if (GvCV(gv) != check) return; |
|
94
|
0 |
7 |
if (!payload) return; |
|
105
|
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)); }); |
|
106
|
0 |
0 |
*PL_stack_sp = sub ? sv_2mortal(newRV((SV*)sub)) : &PL_sv_undef; |
|
107
|
0 |
0 |
return PL_op->op_next->op_next; // skip ENTERSUB |
|
114
|
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)); }); |
|
115
|
0 |
0 |
*PL_stack_sp = sub ? sv_2mortal(newRV((SV*)sub)) : &PL_sv_undef; |
|
116
|
0 |
0 |
return PL_op->op_next; |
|
122
|
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])); }); |
|
123
|
0 |
10 |
PP_METHOD_EXEC(sub); |
|
|
0 |
0 |
PP_METHOD_EXEC(sub); |
|
130
|
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])); }); |
|
131
|
0 |
0 |
PP_SUB_EXEC(sub); |
|
137
|
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])); }); |
|
138
|
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); |
|
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_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); |
|
152
|
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)); }); |
|
153
|
0 |
62 |
PP_METHOD_EXEC(sub); |
|
|
0 |
0 |
PP_METHOD_EXEC(sub); |
|
160
|
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); }); |
|
161
|
0 |
0 |
PP_SUB_EXEC(sub); |
|
167
|
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)); }); |
|
168
|
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); |
|
175
|
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); }); |
|
176
|
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); |
|
183
|
15 |
0 |
if (ent) return (GV*)HeVAL(ent); |
|
186
|
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))); |
|
189
|
0 |
0 |
return gv_fetchpvn_flags(SvPVX(fqn), SvCUR(fqn), GV_ADD|(is_utf8 ? SVf_UTF8 : 0), SVt_PVCV); |
|
194
|
0 |
15 |
if (items < 1) croak_xs_usage(cv, "proto, ..."); |
|
203
|
8 |
7 |
if (ix == 0) { // super |
|
205
|
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); }); |
|
208
|
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); }); |
|
209
|
1 |
6 |
if (!sub) XSRETURN_EMPTY; |
|
213
|
0 |
14 |
PUSHMARK(SP); |
|
214
|
14 |
0 |
call_sv((SV*)sub, GIMME_V); |
|
215
|
0 |
0 |
LEAVE; |
|
221
|
2 |
1 |
SV* fqn = get_sv(ix == 0 ? "super::AUTOLOAD" : "super::maybe::AUTOLOAD", 0); |
|
234
|
7 |
0 |
_TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); }); |
|
|
7 |
0 |
_TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); }); |
|
|
0 |
0 |
_TRYNEXT({ sub = xs::next::method(aTHX_ proto_stash(aTHX_ proto)); }); |
|
235
|
4 |
3 |
RETVAL = sub ? newRV((SV*)sub) : &PL_sv_undef; |
|
242
|
31 |
0 |
_TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ proto)); }); |
|
|
28 |
3 |
_TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ proto)); }); |
|
|
3 |
0 |
_TRYNEXT({ sub = xs::next::method_strict(aTHX_ proto_stash(aTHX_ proto)); }); |
|
245
|
0 |
28 |
PUSHMARK(SP); |
|
246
|
26 |
2 |
call_sv((SV*)sub, GIMME_V); |
|
248
|
0 |
3 |
return; |
|
258
|
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)); }); |
|
259
|
4 |
4 |
if (!sub) XSRETURN_EMPTY; |
|
262
|
0 |
4 |
PUSHMARK(SP); |
|
263
|
4 |
0 |
call_sv((SV*)sub, GIMME_V); |
|
265
|
0 |
0 |
return; |