line |
true |
false |
branch |
13
|
18 |
6 |
if (SvROK(source)) { |
15
|
6 |
12 |
if (type == SVt_PVHV && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
|
6 |
0 |
if (type == SVt_PVHV && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
|
5 |
1 |
if (type == SVt_PVHV && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
|
5 |
0 |
if (type == SVt_PVHV && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
19
|
12 |
1 |
else if (type == SVt_PVAV && (flags & MERGE_ARRAY_CM) && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
|
10 |
2 |
else if (type == SVt_PVAV && (flags & MERGE_ARRAY_CM) && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
|
10 |
0 |
else if (type == SVt_PVAV && (flags & MERGE_ARRAY_CM) && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
|
9 |
1 |
else if (type == SVt_PVAV && (flags & MERGE_ARRAY_CM) && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
|
9 |
0 |
else if (type == SVt_PVAV && (flags & MERGE_ARRAY_CM) && dest != NULL && SvROK(dest) && SvTYPE(SvRV(dest)) == type) { |
24
|
2 |
2 |
if ((flags & MERGE_LAZY) && SvOK(dest)) return; |
|
2 |
0 |
if ((flags & MERGE_LAZY) && SvOK(dest)) return; |
|
2 |
0 |
if ((flags & MERGE_LAZY) && SvOK(dest)) return; |
|
0 |
2 |
if ((flags & MERGE_LAZY) && SvOK(dest)) return; |
26
|
3 |
1 |
if (flags & MERGE_COPY_SOURCE) { // deep copy reference value |
28
|
3 |
0 |
SvSetSV_nosteal(dest, copy); |
33
|
1 |
0 |
SvSetSV_nosteal(dest, source); |
36
|
2 |
4 |
if ((flags & MERGE_LAZY) && SvOK(dest)) return; |
|
1 |
1 |
if ((flags & MERGE_LAZY) && SvOK(dest)) return; |
|
1 |
0 |
if ((flags & MERGE_LAZY) && SvOK(dest)) return; |
|
0 |
1 |
if ((flags & MERGE_LAZY) && SvOK(dest)) return; |
37
|
5 |
0 |
SvSetSV_nosteal(dest, source); |
44
|
1 |
18 |
if (!hvarr) return; |
45
|
144 |
18 |
for (STRLEN i = 0; i <= hvmax; ++i) { |
47
|
50 |
144 |
for (entry = hvarr[i]; entry; entry = HeNEXT(entry)) { |
50
|
3 |
47 |
if ((flags & MERGE_SKIP_UNDEF) && !SvOK(valueSV)) continue; // skip undefs |
|
1 |
2 |
if ((flags & MERGE_SKIP_UNDEF) && !SvOK(valueSV)) continue; // skip undefs |
|
1 |
0 |
if ((flags & MERGE_SKIP_UNDEF) && !SvOK(valueSV)) continue; // skip undefs |
|
1 |
0 |
if ((flags & MERGE_SKIP_UNDEF) && !SvOK(valueSV)) continue; // skip undefs |
51
|
3 |
46 |
if ((flags & MERGE_DELETE_UNDEF) && !SvOK(valueSV)) { |
|
2 |
1 |
if ((flags & MERGE_DELETE_UNDEF) && !SvOK(valueSV)) { |
|
2 |
0 |
if ((flags & MERGE_DELETE_UNDEF) && !SvOK(valueSV)) { |
|
2 |
0 |
if ((flags & MERGE_DELETE_UNDEF) && !SvOK(valueSV)) { |
55
|
10 |
37 |
if (MERGE_CAN_LAZY(flags, valueSV)) { |
|
6 |
4 |
if (MERGE_CAN_LAZY(flags, valueSV)) { |
57
|
2 |
4 |
if (elemref != NULL && SvOK(*elemref)) continue; |
|
0 |
2 |
if (elemref != NULL && SvOK(*elemref)) continue; |
|
0 |
0 |
if (elemref != NULL && SvOK(*elemref)) continue; |
|
0 |
0 |
if (elemref != NULL && SvOK(*elemref)) continue; |
59
|
38 |
7 |
if (MERGE_CAN_ALIAS(flags, valueSV)) { // make aliases for simple values |
|
32 |
6 |
if (MERGE_CAN_ALIAS(flags, valueSV)) { // make aliases for simple values |
72
|
0 |
9 |
if (SvREADONLY(dest)) Perl_croak_no_modify(); |
76
|
2 |
7 |
if (flags & MERGE_ARRAY_CONCAT) { |
80
|
0 |
2 |
if (flags & MERGE_COPY_SOURCE) { |
81
|
0 |
0 |
while (srcfill-- >= 0) { |
83
|
0 |
0 |
dstlist[savei++] = elem == NULL ? newSV(0) : clone(aTHX_ elem, false); |
86
|
6 |
2 |
while (srcfill-- >= 0) { |
88
|
0 |
6 |
if (elem == NULL) dstlist[savei++] = newSV(0); |
100
|
19 |
7 |
for (int i = 0; i <= srcfill; ++i) { |
102
|
0 |
19 |
if (elem == NULL) continue; // skip empty slots |
103
|
2 |
17 |
if ((flags & MERGE_SKIP_UNDEF) && !SvOK(elem)) continue; // skip undefs |
|
1 |
1 |
if ((flags & MERGE_SKIP_UNDEF) && !SvOK(elem)) continue; // skip undefs |
|
1 |
0 |
if ((flags & MERGE_SKIP_UNDEF) && !SvOK(elem)) continue; // skip undefs |
|
1 |
0 |
if ((flags & MERGE_SKIP_UNDEF) && !SvOK(elem)) continue; // skip undefs |
104
|
6 |
12 |
if (MERGE_CAN_LAZY(flags, elem) && dstlist[i] && SvOK(dstlist[i])) continue; |
|
4 |
2 |
if (MERGE_CAN_LAZY(flags, elem) && dstlist[i] && SvOK(dstlist[i])) continue; |
|
4 |
0 |
if (MERGE_CAN_LAZY(flags, elem) && dstlist[i] && SvOK(dstlist[i])) continue; |
|
0 |
4 |
if (MERGE_CAN_LAZY(flags, elem) && dstlist[i] && SvOK(dstlist[i])) continue; |
|
0 |
0 |
if (MERGE_CAN_LAZY(flags, elem) && dstlist[i] && SvOK(dstlist[i])) continue; |
|
0 |
0 |
if (MERGE_CAN_LAZY(flags, elem) && dstlist[i] && SvOK(dstlist[i])) continue; |
105
|
13 |
1 |
if (MERGE_CAN_ALIAS(flags, elem)) { // hardcode for speed - make aliases for simple values |
|
11 |
2 |
if (MERGE_CAN_ALIAS(flags, elem)) { // hardcode for speed - make aliases for simple values |
107
|
11 |
0 |
if (AvREAL(dest)) SvREFCNT_dec(dstlist[i]); |
111
|
0 |
3 |
if (!dstlist[i]) dstlist[i] = newSV(0); |
114
|
0 |
7 |
if (AvFILLp(dest) < srcfill) AvFILLp(dest) = srcfill; |
119
|
2 |
15 |
if (!dest) dest = newHV(); |
120
|
3 |
12 |
else if (flags & MERGE_COPY_DEST) dest = (HV*)clone(aTHX_ (SV*)dest, false); |
121
|
14 |
3 |
if (source) _hash_merge(aTHX_ dest, source, flags); |
126
|
1 |
7 |
if ((flags & MERGE_COPY) && dest) dest = clone(aTHX_ dest, false); |
|
1 |
0 |
if ((flags & MERGE_COPY) && dest) dest = clone(aTHX_ dest, false); |
127
|
0 |
8 |
if (!source) source = &PL_sv_undef; |
132
|
11 |
0 |
}} |
|
11 |
0 |
}} |