Branch Coverage

Clone.xs
Criterion Covered Total %
branch 120 204 58.8


line true false branch
61 3 0 if (!obj || !SvROK(obj) || !SvOBJECT(SvRV(obj)))
3 0 if (!obj || !SvROK(obj) || !SvOBJECT(SvRV(obj)))
0 3 if (!obj || !SvROK(obj) || !SvOBJECT(SvRV(obj)))
64 3 0 return stash && HvNAME(stash)
3 0 return stash && HvNAME(stash)
0 0 return stash && HvNAME(stash)
3 0 return stash && HvNAME(stash)
0 3 return stash && HvNAME(stash)
3 0 return stash && HvNAME(stash)
65 3 0 && strEQ(HvNAME(stash), "threads::shared::tie");
0 3 && strEQ(HvNAME(stash), "threads::shared::tie");
3 0 && strEQ(HvNAME(stash), "threads::shared::tie");
3 0 && strEQ(HvNAME(stash), "threads::shared::tie");
0 3 && strEQ(HvNAME(stash), "threads::shared::tie");
0 0 && strEQ(HvNAME(stash), "threads::shared::tie");
3 0 && strEQ(HvNAME(stash), "threads::shared::tie");
0 3 && strEQ(HvNAME(stash), "threads::shared::tie");
0 3 && strEQ(HvNAME(stash), "threads::shared::tie");
74 59 0 int recur = depth ? depth - 1 : 0;
81 0 59 if (HvKEYS(self) > 0)
55 4 if (HvKEYS(self) > 0)
82 0 55 hv_ksplit(clone, HvKEYS(self));
85 82 59 while ((next = hv_iternext (self)))
92 1 81 if (HeKUTF8(next))
114 0 2 if (!ref) return NULL;
119 0 2 if ((seen = CLONE_FETCH(ref))) {
125 0 2 CLONE_STORE(ref, (SV *)root_clone);
130 1 1 if (av_len(self) == 0) {
132 1 0 if (svp && SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV) {
1 0 if (svp && SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV) {
1 0 if (svp && SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV) {
137 3000 0 while (current_ref && SvROK(current_ref) &&
138 3000 0 SvTYPE(SvRV(current_ref)) == SVt_PVAV &&
144 0 2999 CLONE_STORE(inner_sv, (SV*)new_av);
148 0 2999 if (!svp) break;
154 1 0 if (current_ref) {
155 1 0 if (SvROK(current_ref) &&
156 1 0 SvTYPE(SvRV(current_ref)) == SVt_PVAV) {
161 0 0 } else if (SvROK(current_ref)) {
173 0 0 if (svp) {
186 0 1 for (i = 0; i <= arrlen; i++) {
188 0 0 if (svp) {
210 0 4028 if (depth == 0) {
228 4064 4028 for (i = 0; i <= arrlen; i++) {
230 4064 0 if (svp) {
248 0 308379 if (!ref)
258 1 308378 if (rdepth > MAX_DEPTH) {
259 0 1 if (SvTYPE(ref) == SVt_PVAV) {
264 1 0 if (SvROK(ref) && SvTYPE(SvRV(ref)) == SVt_PVAV) {
1 0 if (SvROK(ref) && SvTYPE(SvRV(ref)) == SVt_PVAV) {
267 0 1 if (SvOBJECT(SvRV(ref)))
287 6 308372 if (depth == 0)
290 308372 0 if (visible && (seen = CLONE_FETCH(ref)))
22 308350 if (visible && (seen = CLONE_FETCH(ref)))
300 200004 108346 if (SvTYPE(ref) == SVt_PVLV && SvMAGICAL(ref))
200004 0 if (SvTYPE(ref) == SVt_PVLV && SvMAGICAL(ref))
303 200004 200004 for (mg = SvMAGIC(ref); mg; mg = mg->mg_moremagic)
305 200004 0 if ((mg->mg_type == PERL_MAGIC_tiedelem
306 0 200004 || mg->mg_type == PERL_MAGIC_tiedscalar)
307 0 0 && is_threads_shared_tie(mg->mg_obj))
311 0 0 if (visible && ref != clone)
0 0 if (visible && ref != clone)
312 0 0 CLONE_STORE(ref, clone);
345 50 5 if ( SvIsCOW(ref) && !SvOOK(ref) && SvLEN(ref) > 0 ) {
50 0 if ( SvIsCOW(ref) && !SvOOK(ref) && SvLEN(ref) > 0 ) {
40 10 if ( SvIsCOW(ref) && !SvOOK(ref) && SvLEN(ref) > 0 ) {
347 38 2 if ( CowREFCNT(ref) < (SV_COW_REFCNT_MAX - 1) ) {
362 1 37 if (SvUTF8(ref))
416 308350 0 if ( visible && ref != clone )
108336 200014 if ( visible && ref != clone )
417 0 108336 CLONE_STORE(ref,clone);
423 200014 108336 if (ref == clone)
444 6 108330 if (SvMAGICAL(ref) )
449 6 6 for (mg = SvMAGIC(ref); mg; mg = mg->mg_moremagic)
456 1 5 if (mg->mg_type == '~')
465 0 1 if (mg->mg_virtual && mg->mg_virtual->svt_dup)
0 0 if (mg->mg_virtual && mg->mg_virtual->svt_dup)
485 5 0 if (mg->mg_type == PERL_MAGIC_shared_scalar
486 0 5 || mg->mg_type == PERL_MAGIC_shared)
490 3 2 if ( mg->mg_obj != NULL )
509 0 3 if (is_threads_shared_tie(mg->mg_obj))
523 3 2 if (mg->mg_len >= 0) { /* copy the pv */
524 0 3 if (mg_ptr) {
528 0 2 } else if (mg->mg_len == HEf_SVKEY) {
531 2 0 } else if (mg->mg_len == -1 && mg->mg_type == PERL_MAGIC_utf8) { /* copy the cache */
2 0 } else if (mg->mg_len == -1 && mg->mg_type == PERL_MAGIC_utf8) { /* copy the cache */
532 1 1 if (mg->mg_ptr) {
538 0 0 } else if ( mg->mg_ptr != NULL) {
551 0 6 if (has_qr && (mg = mg_find(clone, 'r')))
0 0 if (has_qr && (mg = mg_find(clone, 'r')))
555 108333 3 if ( magic_ref )
559 59 108274 else if ( SvTYPE(ref) == SVt_PVHV )
561 4028 104246 else if ( SvTYPE(ref) == SVt_PVAV )
564 4138 100108 else if (SvROK (ref))
569 54 4084 if (SvOBJECT(SvRV(ref)))
573 9 4129 if (SvWEAKREF(ref)) {
598 300085 7 AV *weakrefs = newAV();
608 9 300092 for (i = 0; i <= len; i++) {
610 9 0 if (svp && *svp && SvROK(*svp)) {
9 0 if (svp && *svp && SvROK(*svp)) {
9 0 if (svp && *svp && SvROK(*svp)) {
618 0 300092 EXTEND(SP,1);