| line |
true |
false |
branch |
|
72
|
59519 |
0 |
if (UNLIKELY(len == 0 || len > (MAX_INDEX_DIGITS + 1))) return 0; /* Empty or too long */ |
|
|
5 |
59514 |
if (UNLIKELY(len == 0 || len > (MAX_INDEX_DIGITS + 1))) return 0; /* Empty or too long */ |
|
75
|
17 |
59497 |
if (*s == '-') { |
|
79
|
0 |
17 |
if (UNLIKELY(len == 0)) return 0; /* Just "-" */ |
|
82
|
1 |
59513 |
if (UNLIKELY(len > MAX_INDEX_DIGITS)) return 0; /* Too many digits */ |
|
83
|
239 |
59274 |
if (len > 1 && *s == '0') return 0; /* No leading zeros */ |
|
|
8 |
231 |
if (len > 1 && *s == '0') return 0; /* No leading zeros */ |
|
85
|
59524 |
42183 |
while (s < end) { |
|
86
|
59520 |
4 |
if (UNLIKELY(*s < '0' || *s > '9')) return 0; |
|
|
17318 |
42202 |
if (UNLIKELY(*s < '0' || *s > '9')) return 0; |
|
91
|
17 |
42166 |
*idx = negative ? -val : val; |
|
97
|
68 |
4019 |
if (SvIOK(sv)) { |
|
113
|
0 |
109230 |
if (UNLIKELY(path_len == 0)) { |
|
120
|
107229 |
2001 |
if (*p == '/') p++; |
|
122
|
246176 |
4 |
while (p < end) { |
|
124
|
778676 |
101214 |
while (p < end && *p != '/') p++; |
|
|
633714 |
144962 |
while (p < end && *p != '/') p++; |
|
128
|
13 |
246163 |
if (UNLIKELY(tok_len == 0)) { |
|
135
|
289907 |
101219 |
while (check < end && *check == '/') check++; |
|
|
144963 |
144944 |
while (check < end && *check == '/') check++; |
|
138
|
101219 |
144944 |
if (check >= end) { |
|
145
|
0 |
144944 |
if (UNLIKELY(!SvROK(current))) { |
|
153
|
142922 |
2022 |
if (LIKELY(t == SVt_PVHV)) { |
|
156
|
124094 |
18828 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
124094 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
124094 |
18828 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
2006 |
122088 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
157
|
12828 |
8006 |
if (create) { |
|
160
|
21457 |
4211 |
while (next_end < end && *next_end != '/') next_end++; |
|
|
12840 |
8617 |
while (next_end < end && *next_end != '/') next_end++; |
|
164
|
9 |
12819 |
: newRV_noinc((SV*)newHV()); |
|
165
|
0 |
12828 |
if (UNLIKELY(!hv_store(hv, tok_start, tok_len, new_ref, 0))) { |
|
178
|
2022 |
0 |
} else if (t == SVt_PVAV) { |
|
180
|
0 |
2022 |
if (UNLIKELY(!is_array_index(tok_start, tok_len, &idx))) { |
|
185
|
2014 |
8 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
2014 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
2014 |
8 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
2014 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
186
|
7 |
1 |
if (create) { |
|
189
|
14 |
5 |
while (next_end < end && *next_end != '/') next_end++; |
|
|
12 |
2 |
while (next_end < end && *next_end != '/') next_end++; |
|
193
|
4 |
3 |
: newRV_noinc((SV*)newHV()); |
|
194
|
0 |
7 |
if (UNLIKELY(!av_store((AV*)inner, idx, new_ref))) { |
|
230
|
43 |
5 |
if (path_len > 0 && *start == '/') start++; |
|
|
42 |
1 |
if (path_len > 0 && *start == '/') start++; |
|
234
|
103 |
48 |
while (p < path_end) { |
|
236
|
228 |
43 |
while (p < path_end && *p != '/') p++; |
|
|
168 |
60 |
while (p < path_end && *p != '/') p++; |
|
237
|
103 |
0 |
if (p > tok_start) count++; |
|
238
|
60 |
43 |
if (p < path_end) p++; |
|
242
|
5 |
43 |
if (count == 0) { |
|
255
|
41 |
2 |
if (count > 1) { |
|
274
|
103 |
43 |
while (p < copy_end && i < count) { |
|
|
103 |
0 |
while (p < copy_end && i < count) { |
|
276
|
228 |
43 |
while (p < copy_end && *p != '/') p++; |
|
|
168 |
60 |
while (p < copy_end && *p != '/') p++; |
|
278
|
103 |
0 |
if (tok_len > 0) { |
|
285
|
60 |
43 |
if (p < copy_end) p++; /* Skip slash */ |
|
289
|
60 |
43 |
for (SSize_t j = 0; j < count - 1; j++) { |
|
298
|
48 |
0 |
if (cp) { |
|
326
|
147 |
3 |
while (p < end && *p == '/') p++; |
|
|
74 |
73 |
while (p < end && *p == '/') p++; |
|
328
|
190 |
74 |
while (p < end && SvOK(current)) { |
|
|
189 |
1 |
while (p < end && SvOK(current)) { |
|
331
|
1719 |
71 |
while (p < end && *p != '/') p++; |
|
|
1601 |
118 |
while (p < end && *p != '/') p++; |
|
334
|
5 |
184 |
if (UNLIKELY(comp_len == 0)) { |
|
335
|
5 |
0 |
if (p < end) p++; |
|
339
|
1 |
183 |
if (UNLIKELY(!SvROK(current))) { |
|
347
|
42 |
141 |
if (is_array_index(start, comp_len, &idx)) { |
|
348
|
0 |
42 |
if (UNLIKELY(SvTYPE(inner) != SVt_PVAV)) { |
|
353
|
40 |
2 |
current = elem ? *elem : &PL_sv_undef; |
|
355
|
0 |
141 |
if (UNLIKELY(SvTYPE(inner) != SVt_PVHV)) { |
|
360
|
134 |
7 |
current = svp ? *svp : &PL_sv_undef; |
|
363
|
113 |
70 |
if (p < end && *p == '/') p++; |
|
|
113 |
0 |
if (p < end && *p == '/') p++; |
|
373
|
20 |
0 |
if (p >= end || *p != '/') return 0; |
|
|
0 |
20 |
if (p >= end || *p != '/') return 0; |
|
375
|
44 |
0 |
while (p < end && *p == '/') p++; |
|
|
24 |
20 |
while (p < end && *p == '/') p++; |
|
376
|
0 |
20 |
if (p >= end) return 0; |
|
379
|
0 |
20 |
if (*p == '-') { |
|
381
|
0 |
0 |
if (p >= end || *p == '/') return 0; /* Just "-" */ |
|
|
0 |
0 |
if (p >= end || *p == '/') return 0; /* Just "-" */ |
|
385
|
22 |
4 |
while (p < end && *p != '/') { |
|
|
20 |
2 |
while (p < end && *p != '/') { |
|
386
|
19 |
1 |
if (*p < '0' || *p > '9') return 0; |
|
|
13 |
6 |
if (*p < '0' || *p > '9') return 0; |
|
391
|
6 |
0 |
if (UNLIKELY(len == 0 || len > MAX_INDEX_DIGITS)) return 0; |
|
|
0 |
6 |
if (UNLIKELY(len == 0 || len > MAX_INDEX_DIGITS)) return 0; |
|
392
|
0 |
6 |
if (len > 1 && *digits_start == '0') return 0; |
|
|
0 |
0 |
if (len > 1 && *digits_start == '0') return 0; |
|
411
|
52 |
4 |
while (p < end && *p == '/') p++; |
|
|
29 |
23 |
while (p < end && *p == '/') p++; |
|
413
|
4 |
23 |
if (UNLIKELY(p >= end)) { |
|
420
|
52 |
21 |
while (p < end) { |
|
423
|
1151 |
23 |
while (p < end && *p != '/') p++; |
|
|
1122 |
29 |
while (p < end && *p != '/') p++; |
|
426
|
4 |
48 |
if (UNLIKELY(comp_len == 0)) { |
|
427
|
4 |
0 |
if (p < end) p++; |
|
433
|
54 |
23 |
while (next_p < end && *next_p == '/') next_p++; |
|
|
29 |
25 |
while (next_p < end && *next_p == '/') next_p++; |
|
436
|
0 |
48 |
if (UNLIKELY(!SvROK(current))) { |
|
443
|
10 |
38 |
if (is_array_index(start, comp_len, &idx)) { |
|
445
|
0 |
10 |
if (UNLIKELY(SvTYPE(inner) != SVt_PVAV)) { |
|
450
|
8 |
2 |
if (is_last) { |
|
452
|
0 |
8 |
SV *copy = SvROK(value_sv) ? SvREFCNT_inc(value_sv) : newSVsv(value_sv); |
|
453
|
1 |
7 |
if (UNLIKELY(!av_store(av, idx, copy))) { |
|
460
|
0 |
2 |
if (UNLIKELY(!elem)) { |
|
463
|
0 |
2 |
if (!SvOK(*elem) || !SvROK(*elem)) { |
|
|
0 |
0 |
if (!SvOK(*elem) || !SvROK(*elem)) { |
|
466
|
0 |
2 |
if (kw_next_component_is_numeric(p, end)) { |
|
478
|
1 |
37 |
if (UNLIKELY(SvTYPE(inner) != SVt_PVHV)) { |
|
483
|
14 |
23 |
if (is_last) { |
|
485
|
1 |
13 |
SV *copy = SvROK(value_sv) ? SvREFCNT_inc(value_sv) : newSVsv(value_sv); |
|
486
|
0 |
14 |
if (UNLIKELY(!hv_store(hv, start, comp_len, copy, 0))) { |
|
493
|
0 |
23 |
if (UNLIKELY(!elem)) { |
|
496
|
7 |
16 |
if (!SvOK(*elem) || !SvROK(*elem)) { |
|
|
2 |
5 |
if (!SvOK(*elem) || !SvROK(*elem)) { |
|
499
|
6 |
12 |
if (kw_next_component_is_numeric(p, end)) { |
|
511
|
25 |
21 |
if (p < end && *p == '/') p++; |
|
|
25 |
0 |
if (p < end && *p == '/') p++; |
|
514
|
2 |
19 |
if (GIMME_V != G_VOID) |
|
532
|
63 |
3 |
while (p < end && *p == '/') p++; |
|
|
34 |
29 |
while (p < end && *p == '/') p++; |
|
534
|
3 |
29 |
if (p >= end) { |
|
546
|
65 |
0 |
while (p < end) { |
|
549
|
195 |
26 |
while (p < end && *p != '/') p++; |
|
|
156 |
39 |
while (p < end && *p != '/') p++; |
|
552
|
0 |
65 |
if (UNLIKELY(comp_len == 0)) { |
|
553
|
0 |
0 |
if (p < end) p++; |
|
563
|
78 |
27 |
while (next_p < end && *next_p == '/') next_p++; |
|
|
40 |
38 |
while (next_p < end && *next_p == '/') next_p++; |
|
566
|
27 |
38 |
if (is_last) { |
|
576
|
2 |
36 |
if (UNLIKELY(!SvROK(current))) { |
|
583
|
2 |
34 |
if (is_numeric) { |
|
584
|
0 |
2 |
if (UNLIKELY(SvTYPE(inner) != SVt_PVAV)) { |
|
589
|
2 |
0 |
current = elem ? *elem : &PL_sv_undef; |
|
591
|
0 |
34 |
if (UNLIKELY(SvTYPE(inner) != SVt_PVHV)) { |
|
596
|
34 |
0 |
current = svp ? *svp : &PL_sv_undef; |
|
599
|
36 |
0 |
if (p < end && *p == '/') p++; |
|
|
36 |
0 |
if (p < end && *p == '/') p++; |
|
604
|
27 |
0 |
if (parent && SvROK(parent)) { |
|
|
27 |
0 |
if (parent && SvROK(parent)) { |
|
606
|
6 |
21 |
if (last_is_numeric) { |
|
607
|
6 |
0 |
if (SvTYPE(inner) == SVt_PVAV) |
|
610
|
21 |
0 |
if (SvTYPE(inner) == SVt_PVHV) |
|
615
|
25 |
2 |
if (deleted) { |
|
637
|
73 |
4 |
while (p < end && *p == '/') p++; |
|
|
38 |
35 |
while (p < end && *p == '/') p++; |
|
639
|
4 |
35 |
if (p >= end) { |
|
647
|
81 |
0 |
while (p < end) { |
|
650
|
238 |
32 |
while (p < end && *p != '/') p++; |
|
|
189 |
49 |
while (p < end && *p != '/') p++; |
|
653
|
0 |
81 |
if (UNLIKELY(comp_len == 0)) { |
|
654
|
0 |
0 |
if (p < end) p++; |
|
664
|
98 |
33 |
while (next_p < end && *next_p == '/') next_p++; |
|
|
50 |
48 |
while (next_p < end && *next_p == '/') next_p++; |
|
667
|
0 |
81 |
if (UNLIKELY(!SvROK(current))) { |
|
674
|
12 |
69 |
if (is_numeric) { |
|
675
|
0 |
12 |
if (UNLIKELY(SvTYPE(inner) != SVt_PVAV)) { |
|
681
|
8 |
4 |
if (is_last) { |
|
684
|
4 |
4 |
PUSHs(exists ? &PL_sv_yes : &PL_sv_no); |
|
688
|
3 |
1 |
if (!elem || !SvOK(*elem)) { |
|
|
0 |
3 |
if (!elem || !SvOK(*elem)) { |
|
695
|
0 |
69 |
if (UNLIKELY(SvTYPE(inner) != SVt_PVHV)) { |
|
701
|
25 |
44 |
if (is_last) { |
|
704
|
17 |
8 |
PUSHs(exists ? &PL_sv_yes : &PL_sv_no); |
|
708
|
43 |
1 |
if (!svp || !SvOK(*svp)) { |
|
|
0 |
43 |
if (!svp || !SvOK(*svp)) { |
|
716
|
46 |
0 |
if (p < end && *p == '/') p++; |
|
|
46 |
0 |
if (p < end && *p == '/') p++; |
|
743
|
43 |
0 |
if (p < end && *p == '/') p++; |
|
|
42 |
1 |
if (p < end && *p == '/') p++; |
|
745
|
127 |
43 |
while (p < end) { |
|
748
|
529 |
42 |
while (p < end && *p != '/') p++; |
|
|
444 |
85 |
while (p < end && *p != '/') p++; |
|
751
|
3 |
124 |
if (comp_len == 0) { |
|
752
|
3 |
0 |
if (p < end) p++; |
|
760
|
27 |
97 |
if (is_numeric) { |
|
772
|
82 |
42 |
if (p < end && *p == '/') p++; |
|
|
82 |
0 |
if (p < end && *p == '/') p++; |
|
856
|
45 |
24 |
if (path_op->op_type == OP_CONST && |
|
857
|
45 |
0 |
(path_op->op_private & OPpCONST_BARE) == 0) |
|
860
|
45 |
0 |
if (SvPOK(path_sv)) { |
|
866
|
89 |
2 |
while (p < path + path_len && *p == '/') p++; |
|
|
46 |
43 |
while (p < path + path_len && *p == '/') p++; |
|
867
|
2 |
43 |
if (p >= path + path_len) { |
|
975
|
4 |
44250 |
if (path_len == 0) { |
|
981
|
4005 |
40245 |
if (!final_key) { |
|
982
|
1 |
4004 |
RETVAL = parent ? SvREFCNT_inc(parent) : &PL_sv_undef; |
|
983
|
40245 |
0 |
} else if (!parent || !SvROK(parent)) { |
|
|
0 |
40245 |
} else if (!parent || !SvROK(parent)) { |
|
989
|
20229 |
20016 |
if (t == SVt_PVHV) { |
|
991
|
18224 |
2005 |
RETVAL = (val && *val) ? SvREFCNT_inc(*val) : &PL_sv_undef; |
|
|
18224 |
0 |
RETVAL = (val && *val) ? SvREFCNT_inc(*val) : &PL_sv_undef; |
|
992
|
20016 |
0 |
} else if (t == SVt_PVAV) { |
|
994
|
20012 |
4 |
if (is_array_index(final_key, final_key_len, &idx)) { |
|
996
|
20009 |
3 |
RETVAL = (val && *val) ? SvREFCNT_inc(*val) : &PL_sv_undef; |
|
|
20009 |
0 |
RETVAL = (val && *val) ? SvREFCNT_inc(*val) : &PL_sv_undef; |
|
1019
|
2001 |
38536 |
if (path_len == 0) { |
|
1027
|
1 |
38535 |
if (!final_key) { |
|
1028
|
1 |
0 |
croak(parent ? "Cannot set root" : "Cannot navigate to path"); |
|
1030
|
38535 |
0 |
if (!parent || !SvROK(parent)) { |
|
|
0 |
38535 |
if (!parent || !SvROK(parent)) { |
|
1036
|
2005 |
36530 |
SV *copy = SvROK(value) ? SvREFCNT_inc(value) : newSVsv(value); /* Refs shared, scalars copied */ |
|
1038
|
18525 |
20010 |
if (t == SVt_PVHV) { |
|
1039
|
0 |
18525 |
if (UNLIKELY(!hv_store((HV*)inner, final_key, final_key_len, copy, 0))) { |
|
1043
|
20010 |
0 |
} else if (t == SVt_PVAV) { |
|
1045
|
1 |
20009 |
if (!is_array_index(final_key, final_key_len, &idx)) { |
|
1049
|
1 |
20008 |
if (UNLIKELY(!av_store((AV*)inner, idx, copy))) { |
|
1058
|
38532 |
1 |
if (GIMME_V == G_VOID) { |
|
1075
|
2001 |
24220 |
if (path_len == 0) { |
|
1083
|
2003 |
22217 |
if (!final_key) { |
|
1084
|
1 |
2002 |
if (parent) { |
|
1088
|
22217 |
0 |
} else if (!parent || !SvROK(parent)) { |
|
|
0 |
22217 |
} else if (!parent || !SvROK(parent)) { |
|
1094
|
22212 |
5 |
if (t == SVt_PVHV) { |
|
1096
|
22208 |
4 |
if (RETVAL) SvREFCNT_inc(RETVAL); |
|
1098
|
5 |
0 |
} else if (t == SVt_PVAV) { |
|
1100
|
5 |
0 |
if (is_array_index(final_key, final_key_len, &idx)) { |
|
1102
|
4 |
1 |
RETVAL = old ? SvREFCNT_inc(old) : &PL_sv_undef; |
|
1123
|
4 |
2224 |
if (path_len == 0) { |
|
1130
|
2002 |
222 |
if (!final_key) { |
|
1132
|
222 |
0 |
} else if (!parent || !SvROK(parent)) { |
|
|
0 |
222 |
} else if (!parent || !SvROK(parent)) { |
|
1138
|
214 |
8 |
if (t == SVt_PVHV) { |
|
1140
|
8 |
0 |
} else if (t == SVt_PVAV) { |
|
1143
|
8 |
0 |
? av_exists((AV*)inner, idx) : 0; |
|
1160
|
16110 |
4044 |
for (SSize_t i = 0; i < len; i++) { |
|
1162
|
16110 |
0 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { |
|
|
0 |
16110 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { |
|
|
16110 |
0 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { |
|
|
1 |
16109 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { |
|
1170
|
16073 |
36 |
if (LIKELY(t == SVt_PVHV)) { |
|
1174
|
16068 |
5 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
|
0 |
16068 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
1176
|
36 |
0 |
} else if (t == SVt_PVAV) { |
|
1178
|
3 |
33 |
if (UNLIKELY(!sv_to_index(aTHX_ *key_ptr, &idx))) { RETVAL = &PL_sv_undef; goto done; } |
|
1180
|
31 |
2 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
|
0 |
31 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
1201
|
2 |
4025 |
if (UNLIKELY(len == 0)) croak("Cannot set root"); |
|
1203
|
8029 |
4025 |
for (SSize_t i = 0; i < len - 1; i++) { |
|
1205
|
8029 |
0 |
if (UNLIKELY(!key_ptr || !*key_ptr)) croak("Invalid path element"); |
|
|
0 |
8029 |
if (UNLIKELY(!key_ptr || !*key_ptr)) croak("Invalid path element"); |
|
1206
|
0 |
8029 |
if (UNLIKELY(!SvROK(current))) croak("Cannot navigate to path"); |
|
1211
|
8025 |
4 |
if (LIKELY(t == SVt_PVHV)) { |
|
1215
|
4012 |
4013 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
4012 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
4012 |
4013 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
1 |
4011 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
1218
|
4014 |
0 |
SV *new_ref = (next_key && *next_key && sv_to_index(aTHX_ *next_key, &dummy)) |
|
|
5 |
4009 |
SV *new_ref = (next_key && *next_key && sv_to_index(aTHX_ *next_key, &dummy)) |
|
1220
|
4014 |
0 |
: newRV_noinc((SV*)newHV()); |
|
1221
|
0 |
4014 |
if (UNLIKELY(!hv_store((HV*)inner, kstr, klen, new_ref, 0))) { |
|
1229
|
4 |
0 |
} else if (t == SVt_PVAV) { |
|
1231
|
0 |
4 |
if (UNLIKELY(!sv_to_index(aTHX_ *key_ptr, &idx))) croak("Invalid array index"); |
|
1233
|
0 |
4 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
0 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
4 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
0 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
1236
|
4 |
0 |
SV *new_ref = (next_key && *next_key && sv_to_index(aTHX_ *next_key, &dummy)) |
|
|
1 |
3 |
SV *new_ref = (next_key && *next_key && sv_to_index(aTHX_ *next_key, &dummy)) |
|
1238
|
4 |
0 |
: newRV_noinc((SV*)newHV()); |
|
1239
|
0 |
4 |
if (UNLIKELY(!av_store((AV*)inner, idx, new_ref))) { |
|
1252
|
0 |
4025 |
if (UNLIKELY(!SvROK(current))) croak("Cannot set on non-reference"); |
|
1256
|
4025 |
0 |
if (UNLIKELY(!final_key_ptr || !*final_key_ptr)) croak("Invalid final key"); |
|
|
0 |
4025 |
if (UNLIKELY(!final_key_ptr || !*final_key_ptr)) croak("Invalid final key"); |
|
1257
|
1 |
4024 |
SV *copy = SvROK(value) ? SvREFCNT_inc(value) : newSVsv(value); /* Refs shared, scalars copied */ |
|
1259
|
4014 |
11 |
if (LIKELY(t == SVt_PVHV)) { |
|
1262
|
0 |
4014 |
if (UNLIKELY(!hv_store((HV*)inner, kstr, klen, copy, 0))) { |
|
1266
|
11 |
0 |
} else if (t == SVt_PVAV) { |
|
1268
|
0 |
11 |
if (UNLIKELY(!sv_to_index(aTHX_ *final_key_ptr, &idx))) { |
|
1272
|
1 |
10 |
if (UNLIKELY(!av_store((AV*)inner, idx, copy))) { |
|
1281
|
4023 |
1 |
if (GIMME_V == G_VOID) { |
|
1296
|
2 |
26 |
if (UNLIKELY(len == 0)) { RETVAL = 1; goto done; } |
|
1298
|
24 |
26 |
for (SSize_t i = 0; i < len - 1; i++) { |
|
1300
|
24 |
0 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { RETVAL = 0; goto done; } |
|
|
0 |
24 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { RETVAL = 0; goto done; } |
|
|
24 |
0 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { RETVAL = 0; goto done; } |
|
|
0 |
24 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { RETVAL = 0; goto done; } |
|
1305
|
23 |
1 |
if (LIKELY(t == SVt_PVHV)) { |
|
1309
|
23 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = 0; goto done; } |
|
|
0 |
23 |
if (UNLIKELY(!val || !*val)) { RETVAL = 0; goto done; } |
|
1311
|
1 |
0 |
} else if (t == SVt_PVAV) { |
|
1313
|
0 |
1 |
if (UNLIKELY(!sv_to_index(aTHX_ *key_ptr, &idx))) { RETVAL = 0; goto done; } |
|
1315
|
1 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = 0; goto done; } |
|
|
0 |
1 |
if (UNLIKELY(!val || !*val)) { RETVAL = 0; goto done; } |
|
1322
|
0 |
26 |
if (UNLIKELY(!SvROK(current))) { RETVAL = 0; goto done; } |
|
1326
|
26 |
0 |
if (UNLIKELY(!final_key_ptr || !*final_key_ptr)) { RETVAL = 0; goto done; } |
|
|
0 |
26 |
if (UNLIKELY(!final_key_ptr || !*final_key_ptr)) { RETVAL = 0; goto done; } |
|
1328
|
12 |
14 |
if (LIKELY(t == SVt_PVHV)) { |
|
1332
|
14 |
0 |
} else if (t == SVt_PVAV) { |
|
1334
|
14 |
0 |
RETVAL = sv_to_index(aTHX_ *final_key_ptr, &idx) ? av_exists((AV*)inner, idx) : 0; |
|
1338
|
2 |
26 |
done: |
|
1350
|
2 |
4015 |
if (UNLIKELY(len == 0)) croak("Cannot delete root"); |
|
1352
|
8011 |
4014 |
for (SSize_t i = 0; i < len - 1; i++) { |
|
1354
|
8011 |
0 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { RETVAL = &PL_sv_undef; goto done; } |
|
|
0 |
8011 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { RETVAL = &PL_sv_undef; goto done; } |
|
|
8011 |
0 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { RETVAL = &PL_sv_undef; goto done; } |
|
|
1 |
8010 |
if (UNLIKELY(!key_ptr || !*key_ptr || !SvROK(current))) { RETVAL = &PL_sv_undef; goto done; } |
|
1359
|
8010 |
0 |
if (LIKELY(t == SVt_PVHV)) { |
|
1363
|
8010 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
|
0 |
8010 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
1365
|
0 |
0 |
} else if (t == SVt_PVAV) { |
|
1367
|
0 |
0 |
if (UNLIKELY(!sv_to_index(aTHX_ *key_ptr, &idx))) { RETVAL = &PL_sv_undef; goto done; } |
|
1369
|
0 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
|
0 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
1376
|
0 |
4014 |
if (UNLIKELY(!SvROK(current))) { RETVAL = &PL_sv_undef; goto done; } |
|
1380
|
4014 |
0 |
if (UNLIKELY(!final_key_ptr || !*final_key_ptr)) { RETVAL = &PL_sv_undef; goto done; } |
|
|
0 |
4014 |
if (UNLIKELY(!final_key_ptr || !*final_key_ptr)) { RETVAL = &PL_sv_undef; goto done; } |
|
1382
|
4011 |
3 |
if (LIKELY(t == SVt_PVHV)) { |
|
1386
|
4008 |
3 |
if (RETVAL) SvREFCNT_inc(RETVAL); |
|
1388
|
3 |
0 |
} else if (t == SVt_PVAV) { |
|
1390
|
3 |
0 |
if (sv_to_index(aTHX_ *final_key_ptr, &idx)) { |
|
1392
|
3 |
0 |
RETVAL = old ? SvREFCNT_inc(old) : &PL_sv_undef; |
|
1422
|
1 |
225 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
|
225 |
0 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
|
0 |
225 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
1424
|
1 |
224 |
if (UNLIKELY(cp->count == 0)) { |
|
1432
|
459 |
222 |
while (c < end) { |
|
1433
|
1 |
458 |
if (UNLIKELY(!SvROK(current))) { |
|
1441
|
448 |
10 |
if (LIKELY(t == SVt_PVHV)) { |
|
1443
|
447 |
1 |
if (UNLIKELY(!val || !*val)) { |
|
|
0 |
447 |
if (UNLIKELY(!val || !*val)) { |
|
1448
|
10 |
0 |
} else if (t == SVt_PVAV) { |
|
1449
|
0 |
10 |
if (UNLIKELY(!c->is_numeric)) { |
|
1454
|
10 |
0 |
if (UNLIKELY(!val || !*val)) { |
|
|
0 |
10 |
if (UNLIKELY(!val || !*val)) { |
|
1478
|
0 |
212 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
|
212 |
0 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
|
0 |
212 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
1480
|
1 |
211 |
if (UNLIKELY(cp->count == 0)) croak("Cannot set root"); |
|
1488
|
215 |
210 |
while (c < last) { |
|
1489
|
0 |
215 |
if (UNLIKELY(!SvROK(current))) croak("Cannot navigate to path"); |
|
1494
|
213 |
2 |
if (LIKELY(t == SVt_PVHV)) { |
|
1496
|
206 |
7 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
206 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
206 |
7 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
1 |
205 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
1500
|
1 |
7 |
: newRV_noinc((SV*)newHV()); |
|
1501
|
0 |
8 |
if (UNLIKELY(!hv_store((HV*)inner, c->str, c->len, new_ref, 0))) { |
|
1509
|
2 |
0 |
} else if (t == SVt_PVAV) { |
|
1510
|
1 |
1 |
if (UNLIKELY(!c->is_numeric)) croak("Invalid array index"); |
|
1512
|
0 |
1 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
0 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
1 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
|
0 |
0 |
if (UNLIKELY(!val || !*val || !SvROK(*val))) { |
|
1515
|
0 |
1 |
: newRV_noinc((SV*)newHV()); |
|
1516
|
0 |
1 |
if (UNLIKELY(!av_store((AV*)inner, c->idx, new_ref))) { |
|
1531
|
0 |
210 |
if (UNLIKELY(!SvROK(current))) croak("Cannot navigate to path"); |
|
1534
|
0 |
210 |
SV *copy = SvROK(value) ? SvREFCNT_inc(value) : newSVsv(value); /* Refs shared, scalars copied */ |
|
1536
|
208 |
2 |
if (LIKELY(t == SVt_PVHV)) { |
|
1537
|
0 |
208 |
if (UNLIKELY(!hv_store((HV*)inner, last->str, last->len, copy, 0))) { |
|
1541
|
2 |
0 |
} else if (t == SVt_PVAV) { |
|
1542
|
0 |
2 |
if (UNLIKELY(!last->is_numeric)) { SvREFCNT_dec(copy); croak("Invalid array index"); } |
|
1543
|
1 |
1 |
if (UNLIKELY(!av_store((AV*)inner, last->idx, copy))) { |
|
1553
|
208 |
1 |
if (GIMME_V == G_VOID) { |
|
1566
|
0 |
11 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
|
11 |
0 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
|
0 |
11 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
1568
|
1 |
10 |
if (UNLIKELY(cp->count == 0)) { |
|
1576
|
10 |
10 |
while (c < last) { |
|
1577
|
0 |
10 |
if (UNLIKELY(!SvROK(current))) { |
|
1584
|
10 |
0 |
if (LIKELY(t == SVt_PVHV)) { |
|
1586
|
10 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = 0; goto done; } |
|
|
0 |
10 |
if (UNLIKELY(!val || !*val)) { RETVAL = 0; goto done; } |
|
1588
|
0 |
0 |
} else if (t == SVt_PVAV) { |
|
1589
|
0 |
0 |
if (UNLIKELY(!c->is_numeric)) { RETVAL = 0; goto done; } |
|
1591
|
0 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = 0; goto done; } |
|
|
0 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = 0; goto done; } |
|
1601
|
0 |
10 |
if (UNLIKELY(!SvROK(current))) { |
|
1606
|
5 |
5 |
if (LIKELY(t == SVt_PVHV)) { |
|
1608
|
5 |
0 |
} else if (t == SVt_PVAV) { |
|
1609
|
5 |
0 |
RETVAL = last->is_numeric ? av_exists((AV*)inner, last->idx) : 0; |
|
1615
|
2 |
9 |
done: |
|
1625
|
0 |
6 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
|
6 |
0 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
|
0 |
6 |
VALIDATE_COMPILED_PATH(compiled, cp); |
|
1627
|
1 |
5 |
if (UNLIKELY(cp->count == 0)) croak("Cannot delete root"); |
|
1634
|
5 |
5 |
while (c < last) { |
|
1635
|
0 |
5 |
if (UNLIKELY(!SvROK(current))) { |
|
1642
|
5 |
0 |
if (LIKELY(t == SVt_PVHV)) { |
|
1644
|
5 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
|
0 |
5 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
1646
|
0 |
0 |
} else if (t == SVt_PVAV) { |
|
1647
|
0 |
0 |
if (UNLIKELY(!c->is_numeric)) { RETVAL = &PL_sv_undef; goto done; } |
|
1649
|
0 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
|
0 |
0 |
if (UNLIKELY(!val || !*val)) { RETVAL = &PL_sv_undef; goto done; } |
|
1659
|
0 |
5 |
if (UNLIKELY(!SvROK(current))) { |
|
1665
|
4 |
1 |
if (LIKELY(t == SVt_PVHV)) { |
|
1667
|
3 |
1 |
if (RETVAL) SvREFCNT_inc(RETVAL); |
|
1669
|
1 |
0 |
} else if (t == SVt_PVAV) { |
|
1670
|
1 |
0 |
if (last->is_numeric) { |
|
1672
|
1 |
0 |
RETVAL = old ? SvREFCNT_inc(old) : &PL_sv_undef; |
|
1690
|
48 |
0 |
if (SvROK(self)) { |
|
1693
|
48 |
0 |
if (cp && cp->magic == COMPILED_PATH_MAGIC) { |
|
|
48 |
0 |
if (cp && cp->magic == COMPILED_PATH_MAGIC) { |