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