Branch Coverage

XS.xs
Criterion Covered Total %
branch 571 796 71.7


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) {