line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
#include |
2
|
|
|
|
|
|
|
#include |
3
|
|
|
|
|
|
|
#include |
4
|
|
|
|
|
|
|
#include |
5
|
|
|
|
|
|
|
#include |
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
using namespace xs; |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
MODULE = Data::Recursive PACKAGE = Data::Recursive |
10
|
|
|
|
|
|
|
PROTOTYPES: DISABLE |
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
BOOT { |
13
|
14
|
50
|
|
|
|
|
Stash s(__PACKAGE__); |
14
|
77
|
50
|
|
|
|
|
xs::exp::create_constants(s, { |
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
15
|
|
|
|
|
|
|
{"TRACK_REFS", CloneFlags::TRACK_REFS}, |
16
|
|
|
|
|
|
|
{"ARRAY_CONCAT", MergeFlags::ARRAY_CONCAT}, |
17
|
|
|
|
|
|
|
{"ARRAY_MERGE", MergeFlags::ARRAY_MERGE}, |
18
|
|
|
|
|
|
|
{"COPY_DEST", MergeFlags::COPY_DEST}, |
19
|
|
|
|
|
|
|
{"LAZY", MergeFlags::LAZY}, |
20
|
|
|
|
|
|
|
{"SKIP_UNDEF", MergeFlags::SKIP_UNDEF}, |
21
|
|
|
|
|
|
|
{"DELETE_UNDEF", MergeFlags::DELETE_UNDEF}, |
22
|
|
|
|
|
|
|
{"COPY_SOURCE", MergeFlags::COPY_SOURCE}, |
23
|
|
|
|
|
|
|
{"COPY_ALL", MergeFlags::COPY_ALL} |
24
|
70
|
50
|
|
|
|
|
}); |
25
|
|
|
|
|
|
|
} |
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
Scalar lclone (SV* source) { |
28
|
20
|
100
|
|
|
|
|
RETVAL = clone(source, 0); |
|
|
50
|
|
|
|
|
|
29
|
|
|
|
|
|
|
} |
30
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
Scalar clone (SV* source, int flags = CloneFlags::TRACK_REFS) { |
32
|
11
|
100
|
|
|
|
|
RETVAL = clone(source, flags); |
|
|
50
|
|
|
|
|
|
33
|
|
|
|
|
|
|
} |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
Scalar merge (SV* dest, SV* source, int flags = 0) { |
36
|
8
|
50
|
|
|
|
|
RETVAL = merge(Sv(dest), Sv(source), flags); |
|
|
50
|
|
|
|
|
|
37
|
|
|
|
|
|
|
} |
38
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
Scalar hash_merge (Hash dest, Hash source, int flags = 0) { |
40
|
40
|
50
|
|
|
|
|
auto result = merge(dest, source, flags); |
|
|
100
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
41
|
19
|
50
|
|
|
|
|
if (result == dest) RETVAL = ST(0); // hash not changed - return the same Ref for speed |
|
|
100
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
42
|
5
|
50
|
|
|
|
|
else RETVAL = Ref::create(result); |
43
|
|
|
|
|
|
|
} |
44
|
|
|
|
|
|
|
|
45
|
|
|
|
|
|
|
Scalar array_merge (Array dest, Array source, int flags = 0) { |
46
|
0
|
0
|
|
|
|
|
auto result = merge(dest, source, flags); |
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
47
|
0
|
0
|
|
|
|
|
if (result == dest) RETVAL = ST(0); // array not changed - return the same Ref for speed |
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
48
|
0
|
0
|
|
|
|
|
else RETVAL = Ref::create(result); |
49
|
|
|
|
|
|
|
} |
50
|
|
|
|
|
|
|
|
51
|
57
|
50
|
|
|
|
|
bool compare (Sv first, Sv second) |