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; |