| line |
true |
false |
branch |
|
115
|
0 |
30537 |
if (UNLIKELY(!SvROK(obj))) croak("Not a reference"); |
|
117
|
30537 |
0 |
if (LIKELY(mg != NULL)) |
|
127
|
4567 |
1215 |
if (c->freelist && c->freelist->alloc_klen >= klen) { |
|
|
4537 |
30 |
if (c->freelist && c->freelist->alloc_klen >= klen) { |
|
141
|
4851 |
0 |
if (e->value) { |
|
145
|
4851 |
0 |
if (c->freelist_count < LRU_FREELIST_MAX) { |
|
158
|
938 |
5 |
if (LIKELY(e->prev != NULL)) |
|
163
|
6 |
937 |
if (LIKELY(e->next != NULL)) |
|
174
|
5572 |
309 |
if (LIKELY(c->head != NULL)) |
|
177
|
309 |
5572 |
if (UNLIKELY(c->tail == NULL)) |
|
182
|
10865 |
99 |
if (LIKELY(e == c->head)) return; /* already MRU — fast path */ |
|
196
|
17197 |
9804 |
while (e) { |
|
197
|
16784 |
413 |
if (e->hash == hash |
|
198
|
16784 |
0 |
&& e->klen == (U32)klen |
|
199
|
16784 |
0 |
&& memcmp(e->key, kpv, klen) == 0) |
|
216
|
835 |
0 |
while (*pp) { |
|
217
|
586 |
249 |
if (*pp == e) { |
|
232
|
335 |
250 |
while (*pp) { |
|
234
|
258 |
77 |
if (e->hash == hash |
|
235
|
258 |
0 |
&& e->klen == (U32)klen |
|
236
|
258 |
0 |
&& memcmp(e->key, kpv, klen) == 0) { |
|
255
|
0 |
1 |
Newxz(new_buckets, new_count, LRUEntry*); |
|
258
|
96 |
1 |
for (e = c->head; e; e = e->next) { |
|
288
|
0 |
586 |
if (UNLIKELY(!victim)) return; |
|
305
|
6563 |
0 |
PERL_HASH(hash, kpv, klen); |
|
307
|
5560 |
1003 |
if (LIKELY(e != NULL)) { |
|
319
|
2403 |
0 |
PERL_HASH(hash, kpv, klen); |
|
321
|
2403 |
0 |
if (LIKELY(e != NULL)) |
|
331
|
11186 |
0 |
PERL_HASH(hash, kpv, klen); |
|
334
|
5404 |
5782 |
if (e) { |
|
340
|
586 |
5196 |
if (c->size >= c->capacity) |
|
344
|
1 |
5781 |
if (UNLIKELY(c->size >= c->rehash_threshold)) |
|
366
|
6436 |
0 |
PERL_HASH(hash, kpv, klen); |
|
382
|
0 |
0 |
PUSHs(val ? val : &PL_sv_undef); |
|
405
|
0 |
0 |
PUSHs(lru_exists_internal(aTHX_ c, kpv, klen) ? &PL_sv_yes : &PL_sv_no); |
|
422
|
1428 |
1001 |
SETs(val ? val : &PL_sv_undef); |
|
448
|
1401 |
1003 |
SETs(lru_exists_internal(aTHX_ c, kpv, klen) ? &PL_sv_yes : &PL_sv_no); |
|
461
|
1402 |
0 |
SETs(val ? val : &PL_sv_undef); |
|
476
|
402 |
0 |
PERL_HASH(hash, kpv, klen); |
|
480
|
202 |
200 |
if (e) { |
|
498
|
2 |
1 |
if (c->tail) { |
|
500
|
0 |
2 |
XPUSHs(c->tail->value); |
|
512
|
1 |
1 |
if (c->head) { |
|
514
|
0 |
1 |
XPUSHs(c->head->value); |
|
528
|
0 |
150 |
if (!op) return FALSE; |
|
529
|
3 |
147 |
if (op->op_type == OP_RV2SV) { |
|
531
|
3 |
0 |
if (gvop && gvop->op_type == OP_GV) { |
|
|
3 |
0 |
if (gvop && gvop->op_type == OP_GV) { |
|
533
|
3 |
0 |
if (gv && GvNAMELEN(gv) == 1 && GvNAME(gv)[0] == '_') |
|
|
3 |
0 |
if (gv && GvNAMELEN(gv) == 1 && GvNAME(gv)[0] == '_') |
|
|
3 |
0 |
if (gv && GvNAMELEN(gv) == 1 && GvNAME(gv)[0] == '_') |
|
549
|
38 |
0 |
if (!OpHAS_SIBLING(pushop)) |
|
552
|
38 |
0 |
cacheop = OpSIBLING(pushop); |
|
553
|
0 |
38 |
if (!cacheop) return entersubop; |
|
555
|
38 |
0 |
keyop = OpSIBLING(cacheop); |
|
556
|
0 |
38 |
if (!keyop) return entersubop; |
|
558
|
38 |
0 |
cvop = OpSIBLING(keyop); |
|
559
|
0 |
38 |
if (!cvop) return entersubop; |
|
561
|
38 |
0 |
if (OpSIBLING(keyop) != cvop) return entersubop; |
|
|
0 |
38 |
if (OpSIBLING(keyop) != cvop) return entersubop; |
|
588
|
23 |
0 |
if (!OpHAS_SIBLING(pushop)) |
|
591
|
23 |
0 |
cacheop = OpSIBLING(pushop); |
|
592
|
0 |
23 |
if (!cacheop) return entersubop; |
|
594
|
23 |
0 |
keyop = OpSIBLING(cacheop); |
|
595
|
0 |
23 |
if (!keyop) return entersubop; |
|
597
|
23 |
0 |
valop = OpSIBLING(keyop); |
|
598
|
0 |
23 |
if (!valop) return entersubop; |
|
600
|
23 |
0 |
cvop = OpSIBLING(valop); |
|
601
|
0 |
23 |
if (!cvop) return entersubop; |
|
603
|
23 |
0 |
if (OpSIBLING(valop) != cvop) return entersubop; |
|
|
0 |
23 |
if (OpSIBLING(valop) != cvop) return entersubop; |
|
606
|
0 |
23 |
lru_op_is_dollar_underscore(aTHX_ keyop) || |
|
634
|
5 |
0 |
if (!OpHAS_SIBLING(pushop)) |
|
637
|
5 |
0 |
cacheop = OpSIBLING(pushop); |
|
638
|
0 |
5 |
if (!cacheop) return entersubop; |
|
640
|
5 |
0 |
cvop = OpSIBLING(cacheop); |
|
641
|
0 |
5 |
if (!cvop) return entersubop; |
|
643
|
5 |
0 |
if (OpSIBLING(cacheop) != cvop) return entersubop; |
|
|
0 |
5 |
if (OpSIBLING(cacheop) != cvop) return entersubop; |
|
645
|
0 |
5 |
if (lru_op_is_dollar_underscore(aTHX_ cacheop)) |
|
734
|
0 |
6 |
if (items != 2) croak("Usage: lru_get($cache, $key)"); |
|
740
|
6 |
0 |
if (val) { ST(0) = val; XSRETURN(1); } |
|
747
|
0 |
0 |
if (items != 3) croak("Usage: lru_set($cache, $key, $value)"); |
|
760
|
0 |
4 |
if (items != 2) croak("Usage: lru_exists($cache, $key)"); |
|
765
|
2 |
2 |
if (lru_exists_internal(aTHX_ c, kpv, klen)) XSRETURN_YES; |
|
772
|
0 |
0 |
if (items != 2) croak("Usage: lru_peek($cache, $key)"); |
|
778
|
0 |
0 |
if (val) { ST(0) = val; XSRETURN(1); } |
|
786
|
0 |
0 |
if (items != 2) croak("Usage: lru_delete($cache, $key)"); |
|
794
|
0 |
0 |
PERL_HASH(hash, kpv, klen); |
|
796
|
0 |
0 |
if (e) { |
|
811
|
0 |
0 |
if (items != 1) croak("Usage: lru_oldest($cache)"); |
|
815
|
0 |
0 |
if (c->tail) { |
|
816
|
0 |
0 |
EXTEND(SP, 2); |
|
827
|
0 |
0 |
if (items != 1) croak("Usage: lru_newest($cache)"); |
|
831
|
0 |
0 |
if (c->head) { |
|
832
|
0 |
0 |
EXTEND(SP, 2); |
|
850
|
12 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
12 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
12 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
0 |
12 |
pkg = CopSTASHPV(PL_curcop); |
|
|
0 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
12 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
0 |
12 |
pkg = CopSTASHPV(PL_curcop); |
|
852
|
6 |
12 |
for (i = 1; i < items; i++) { |
|
855
|
6 |
0 |
if (len == 6 && strEQ(arg, "import")) { |
|
|
6 |
0 |
if (len == 6 && strEQ(arg, "import")) { |
|
860
|
6 |
6 |
if (want_import) { |
|
883
|
931 |
115 |
for (e = c->head; e; e = next) { |
|
885
|
931 |
0 |
if (e->value) SvREFCNT_dec(e->value); |
|
890
|
314 |
115 |
for (e = c->freelist; e; e = next) { |
|
910
|
115 |
0 |
if (items < 1 || items > 2) |
|
|
0 |
115 |
if (items < 1 || items > 2) |
|
913
|
26 |
89 |
capacity = SvIV(items == 2 ? ST(1) : ST(0)); |
|
914
|
0 |
115 |
if (capacity < 1) croak("Capacity must be positive"); |
|
924
|
0 |
115 |
Newxz(c->buckets, c->bucket_count, LRUEntry*); |
|
944
|
0 |
9110 |
if (items != 3) croak("Usage: $cache->set($key, $value)"); |
|
956
|
0 |
4128 |
if (items != 2) croak("Usage: $cache->get($key)"); |
|
962
|
4126 |
2 |
if (val) { |
|
972
|
0 |
1001 |
if (items != 2) croak("Usage: $cache->peek($key)"); |
|
978
|
1001 |
0 |
if (val) { |
|
988
|
0 |
4028 |
if (items != 2) croak("Usage: $cache->exists($key)"); |
|
993
|
2014 |
2014 |
if (lru_exists_internal(aTHX_ c, kpv, klen)) |
|
1002
|
0 |
106 |
if (items != 2) croak("Usage: $cache->delete($key)"); |
|
1010
|
106 |
0 |
PERL_HASH(hash, kpv, klen); |
|
1012
|
56 |
50 |
if (e) { |
|
1027
|
0 |
2011 |
if (items != 1) croak("Usage: $cache->size"); |
|
1036
|
0 |
1002 |
if (items != 1) croak("Usage: $cache->capacity"); |
|
1046
|
0 |
203 |
if (items != 1) croak("Usage: $cache->clear"); |
|
1051
|
4007 |
203 |
while (e) { |
|
1057
|
0 |
203 |
Zero(c->buckets, c->bucket_count, LRUEntry*); |
|
1067
|
0 |
203 |
if (items != 1) croak("Usage: $cache->keys"); |
|
1072
|
203 |
0 |
EXTEND(SP, c->size); |
|
|
0 |
203 |
EXTEND(SP, c->size); |
|
1073
|
4009 |
203 |
for (e = c->head; e; e = e->next) |
|
1081
|
0 |
8 |
if (items != 1) croak("Usage: $cache->oldest"); |
|
1085
|
6 |
2 |
if (c->tail) { |
|
1086
|
0 |
6 |
EXTEND(SP, 2); |
|
1097
|
0 |
9 |
if (items != 1) croak("Usage: $cache->newest"); |
|
1101
|
7 |
2 |
if (c->head) { |
|
1102
|
0 |
7 |
EXTEND(SP, 2); |