Coverage Report

Created: 2026-03-31 07:30

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ruby/ccan/list/list.h
Line
Count
Source
1
/* Licensed under BSD-MIT - see ccan/licenses/BSD-MIT file for details */
2
#ifndef CCAN_LIST_H
3
#define CCAN_LIST_H
4
#include <assert.h>
5
#include "ccan/str/str.h"
6
#include "ccan/container_of/container_of.h"
7
#include "ccan/check_type/check_type.h"
8
9
/**
10
 * struct ccan_list_node - an entry in a doubly-linked list
11
 * @next: next entry (self if empty)
12
 * @prev: previous entry (self if empty)
13
 *
14
 * This is used as an entry in a linked list.
15
 * Example:
16
 *  struct child {
17
 *    const char *name;
18
 *    // Linked list of all us children.
19
 *    struct ccan_list_node list;
20
 *  };
21
 */
22
struct ccan_list_node
23
{
24
  struct ccan_list_node *next, *prev;
25
};
26
27
/**
28
 * struct ccan_list_head - the head of a doubly-linked list
29
 * @h: the ccan_list_head (containing next and prev pointers)
30
 *
31
 * This is used as the head of a linked list.
32
 * Example:
33
 *  struct parent {
34
 *    const char *name;
35
 *    struct ccan_list_head children;
36
 *    unsigned int num_children;
37
 *  };
38
 */
39
struct ccan_list_head
40
{
41
  struct ccan_list_node n;
42
};
43
44
294k
#define CCAN_LIST_LOC __FILE__  ":" ccan_stringify(__LINE__)
45
1.27M
#define ccan_list_debug(h, loc) ((void)loc, h)
46
10.7k
#define ccan_list_debug_node(n, loc) ((void)loc, n)
47
48
/**
49
 * CCAN_LIST_HEAD_INIT - initializer for an empty ccan_list_head
50
 * @name: the name of the list.
51
 *
52
 * Explicit initializer for an empty list.
53
 *
54
 * See also:
55
 *  CCAN_LIST_HEAD, ccan_list_head_init()
56
 *
57
 * Example:
58
 *  static struct ccan_list_head my_list = CCAN_LIST_HEAD_INIT(my_list);
59
 */
60
#define CCAN_LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
61
62
/**
63
 * CCAN_LIST_HEAD - define and initialize an empty ccan_list_head
64
 * @name: the name of the list.
65
 *
66
 * The CCAN_LIST_HEAD macro defines a ccan_list_head and initializes it to an empty
67
 * list.  It can be prepended by "static" to define a static ccan_list_head.
68
 *
69
 * See also:
70
 *  CCAN_LIST_HEAD_INIT, ccan_list_head_init()
71
 *
72
 * Example:
73
 *  static CCAN_LIST_HEAD(my_global_list);
74
 */
75
#define CCAN_LIST_HEAD(name) \
76
  struct ccan_list_head name = CCAN_LIST_HEAD_INIT(name)
77
78
/**
79
 * ccan_list_head_init - initialize a ccan_list_head
80
 * @h: the ccan_list_head to set to the empty list
81
 *
82
 * Example:
83
 *  ...
84
 *  struct parent *parent = malloc(sizeof(*parent));
85
 *
86
 *  ccan_list_head_init(&parent->children);
87
 *  parent->num_children = 0;
88
 */
89
static inline void ccan_list_head_init(struct ccan_list_head *h)
90
234
{
91
234
  h->n.next = h->n.prev = &h->n;
92
234
}
Unexecuted instantiation: array.c:ccan_list_head_init
Unexecuted instantiation: bignum.c:ccan_list_head_init
Unexecuted instantiation: class.c:ccan_list_head_init
Unexecuted instantiation: complex.c:ccan_list_head_init
Unexecuted instantiation: enumerator.c:ccan_list_head_init
Unexecuted instantiation: error.c:ccan_list_head_init
Unexecuted instantiation: eval.c:ccan_list_head_init
Unexecuted instantiation: file.c:ccan_list_head_init
gc.c:ccan_list_head_init
Line
Count
Source
90
45
{
91
45
  h->n.next = h->n.prev = &h->n;
92
45
}
Unexecuted instantiation: hash.c:ccan_list_head_init
Unexecuted instantiation: imemo.c:ccan_list_head_init
io.c:ccan_list_head_init
Line
Count
Source
90
54
{
91
54
  h->n.next = h->n.prev = &h->n;
92
54
}
Unexecuted instantiation: io_buffer.c:ccan_list_head_init
Unexecuted instantiation: iseq.c:ccan_list_head_init
Unexecuted instantiation: load.c:ccan_list_head_init
Unexecuted instantiation: marshal.c:ccan_list_head_init
Unexecuted instantiation: memory_view.c:ccan_list_head_init
Unexecuted instantiation: node.c:ccan_list_head_init
Unexecuted instantiation: node_dump.c:ccan_list_head_init
Unexecuted instantiation: numeric.c:ccan_list_head_init
Unexecuted instantiation: object.c:ccan_list_head_init
Unexecuted instantiation: pack.c:ccan_list_head_init
Unexecuted instantiation: proc.c:ccan_list_head_init
Unexecuted instantiation: process.c:ccan_list_head_init
ractor.c:ccan_list_head_init
Line
Count
Source
90
45
{
91
45
  h->n.next = h->n.prev = &h->n;
92
45
}
Unexecuted instantiation: random.c:ccan_list_head_init
Unexecuted instantiation: rational.c:ccan_list_head_init
Unexecuted instantiation: re.c:ccan_list_head_init
Unexecuted instantiation: ruby.c:ccan_list_head_init
Unexecuted instantiation: scheduler.c:ccan_list_head_init
Unexecuted instantiation: set.c:ccan_list_head_init
Unexecuted instantiation: shape.c:ccan_list_head_init
Unexecuted instantiation: signal.c:ccan_list_head_init
Unexecuted instantiation: st.c:ccan_list_head_init
Unexecuted instantiation: string.c:ccan_list_head_init
Unexecuted instantiation: struct.c:ccan_list_head_init
Unexecuted instantiation: symbol.c:ccan_list_head_init
thread.c:ccan_list_head_init
Line
Count
Source
90
54
{
91
54
  h->n.next = h->n.prev = &h->n;
92
54
}
Unexecuted instantiation: time.c:ccan_list_head_init
Unexecuted instantiation: transcode.c:ccan_list_head_init
Unexecuted instantiation: variable.c:ccan_list_head_init
Unexecuted instantiation: version.c:ccan_list_head_init
vm.c:ccan_list_head_init
Line
Count
Source
90
36
{
91
36
  h->n.next = h->n.prev = &h->n;
92
36
}
Unexecuted instantiation: vm_backtrace.c:ccan_list_head_init
Unexecuted instantiation: vm_dump.c:ccan_list_head_init
Unexecuted instantiation: vm_sync.c:ccan_list_head_init
Unexecuted instantiation: vm_trace.c:ccan_list_head_init
Unexecuted instantiation: weakmap.c:ccan_list_head_init
Unexecuted instantiation: builtin.c:ccan_list_head_init
Unexecuted instantiation: ast.c:ccan_list_head_init
Unexecuted instantiation: box.c:ccan_list_head_init
Unexecuted instantiation: compile.c:ccan_list_head_init
Unexecuted instantiation: concurrent_set.c:ccan_list_head_init
Unexecuted instantiation: cont.c:ccan_list_head_init
Unexecuted instantiation: debug.c:ccan_list_head_init
Unexecuted instantiation: dir.c:ccan_list_head_init
Unexecuted instantiation: parse.c:ccan_list_head_init
93
94
/**
95
 * ccan_list_node_init - initialize a ccan_list_node
96
 * @n: the ccan_list_node to link to itself.
97
 *
98
 * You don't need to use this normally!  But it lets you ccan_list_del(@n)
99
 * safely.
100
 */
101
static inline void ccan_list_node_init(struct ccan_list_node *n)
102
44
{
103
44
  n->next = n->prev = n;
104
44
}
Unexecuted instantiation: array.c:ccan_list_node_init
Unexecuted instantiation: bignum.c:ccan_list_node_init
Unexecuted instantiation: class.c:ccan_list_node_init
Unexecuted instantiation: complex.c:ccan_list_node_init
Unexecuted instantiation: enumerator.c:ccan_list_node_init
Unexecuted instantiation: error.c:ccan_list_node_init
Unexecuted instantiation: eval.c:ccan_list_node_init
Unexecuted instantiation: file.c:ccan_list_node_init
Unexecuted instantiation: gc.c:ccan_list_node_init
Unexecuted instantiation: hash.c:ccan_list_node_init
Unexecuted instantiation: imemo.c:ccan_list_node_init
Unexecuted instantiation: io.c:ccan_list_node_init
Unexecuted instantiation: io_buffer.c:ccan_list_node_init
Unexecuted instantiation: iseq.c:ccan_list_node_init
Unexecuted instantiation: load.c:ccan_list_node_init
Unexecuted instantiation: marshal.c:ccan_list_node_init
Unexecuted instantiation: memory_view.c:ccan_list_node_init
Unexecuted instantiation: node.c:ccan_list_node_init
Unexecuted instantiation: node_dump.c:ccan_list_node_init
Unexecuted instantiation: numeric.c:ccan_list_node_init
Unexecuted instantiation: object.c:ccan_list_node_init
Unexecuted instantiation: pack.c:ccan_list_node_init
Unexecuted instantiation: proc.c:ccan_list_node_init
Unexecuted instantiation: process.c:ccan_list_node_init
Unexecuted instantiation: ractor.c:ccan_list_node_init
Unexecuted instantiation: random.c:ccan_list_node_init
Unexecuted instantiation: rational.c:ccan_list_node_init
Unexecuted instantiation: re.c:ccan_list_node_init
Unexecuted instantiation: ruby.c:ccan_list_node_init
Unexecuted instantiation: scheduler.c:ccan_list_node_init
Unexecuted instantiation: set.c:ccan_list_node_init
Unexecuted instantiation: shape.c:ccan_list_node_init
Unexecuted instantiation: signal.c:ccan_list_node_init
Unexecuted instantiation: st.c:ccan_list_node_init
Unexecuted instantiation: string.c:ccan_list_node_init
Unexecuted instantiation: struct.c:ccan_list_node_init
Unexecuted instantiation: symbol.c:ccan_list_node_init
thread.c:ccan_list_node_init
Line
Count
Source
102
44
{
103
44
  n->next = n->prev = n;
104
44
}
Unexecuted instantiation: time.c:ccan_list_node_init
Unexecuted instantiation: transcode.c:ccan_list_node_init
Unexecuted instantiation: variable.c:ccan_list_node_init
Unexecuted instantiation: version.c:ccan_list_node_init
Unexecuted instantiation: vm.c:ccan_list_node_init
Unexecuted instantiation: vm_backtrace.c:ccan_list_node_init
Unexecuted instantiation: vm_dump.c:ccan_list_node_init
Unexecuted instantiation: vm_sync.c:ccan_list_node_init
Unexecuted instantiation: vm_trace.c:ccan_list_node_init
Unexecuted instantiation: weakmap.c:ccan_list_node_init
Unexecuted instantiation: builtin.c:ccan_list_node_init
Unexecuted instantiation: ast.c:ccan_list_node_init
Unexecuted instantiation: box.c:ccan_list_node_init
Unexecuted instantiation: compile.c:ccan_list_node_init
Unexecuted instantiation: concurrent_set.c:ccan_list_node_init
Unexecuted instantiation: cont.c:ccan_list_node_init
Unexecuted instantiation: debug.c:ccan_list_node_init
Unexecuted instantiation: dir.c:ccan_list_node_init
Unexecuted instantiation: parse.c:ccan_list_node_init
105
106
/**
107
 * ccan_list_add_after - add an entry after an existing node in a linked list
108
 * @h: the ccan_list_head to add the node to (for debugging)
109
 * @p: the existing ccan_list_node to add the node after
110
 * @n: the new ccan_list_node to add to the list.
111
 *
112
 * The existing ccan_list_node must already be a member of the list.
113
 * The new ccan_list_node does not need to be initialized; it will be overwritten.
114
 *
115
 * Example:
116
 *  struct child c1, c2, c3;
117
 *  CCAN_LIST_HEAD(h);
118
 *
119
 *  ccan_list_add_tail(&h, &c1.list);
120
 *  ccan_list_add_tail(&h, &c3.list);
121
 *  ccan_list_add_after(&h, &c1.list, &c2.list);
122
 */
123
0
#define ccan_list_add_after(h, p, n) ccan_list_add_after_(h, p, n, CCAN_LIST_LOC)
124
static inline void ccan_list_add_after_(struct ccan_list_head *h,
125
           struct ccan_list_node *p,
126
           struct ccan_list_node *n,
127
           const char *abortstr)
128
44
{
129
44
  n->next = p->next;
130
44
  n->prev = p;
131
44
  p->next->prev = n;
132
44
  p->next = n;
133
44
  (void)ccan_list_debug(h, abortstr);
134
44
}
Unexecuted instantiation: array.c:ccan_list_add_after_
Unexecuted instantiation: bignum.c:ccan_list_add_after_
Unexecuted instantiation: class.c:ccan_list_add_after_
Unexecuted instantiation: complex.c:ccan_list_add_after_
Unexecuted instantiation: enumerator.c:ccan_list_add_after_
Unexecuted instantiation: error.c:ccan_list_add_after_
Unexecuted instantiation: eval.c:ccan_list_add_after_
Unexecuted instantiation: file.c:ccan_list_add_after_
Unexecuted instantiation: gc.c:ccan_list_add_after_
Unexecuted instantiation: hash.c:ccan_list_add_after_
Unexecuted instantiation: imemo.c:ccan_list_add_after_
Unexecuted instantiation: io.c:ccan_list_add_after_
Unexecuted instantiation: io_buffer.c:ccan_list_add_after_
Unexecuted instantiation: iseq.c:ccan_list_add_after_
Unexecuted instantiation: load.c:ccan_list_add_after_
Unexecuted instantiation: marshal.c:ccan_list_add_after_
Unexecuted instantiation: memory_view.c:ccan_list_add_after_
Unexecuted instantiation: node.c:ccan_list_add_after_
Unexecuted instantiation: node_dump.c:ccan_list_add_after_
Unexecuted instantiation: numeric.c:ccan_list_add_after_
Unexecuted instantiation: object.c:ccan_list_add_after_
Unexecuted instantiation: pack.c:ccan_list_add_after_
Unexecuted instantiation: proc.c:ccan_list_add_after_
Unexecuted instantiation: process.c:ccan_list_add_after_
Unexecuted instantiation: ractor.c:ccan_list_add_after_
Unexecuted instantiation: random.c:ccan_list_add_after_
Unexecuted instantiation: rational.c:ccan_list_add_after_
Unexecuted instantiation: re.c:ccan_list_add_after_
Unexecuted instantiation: ruby.c:ccan_list_add_after_
Unexecuted instantiation: scheduler.c:ccan_list_add_after_
Unexecuted instantiation: set.c:ccan_list_add_after_
Unexecuted instantiation: shape.c:ccan_list_add_after_
Unexecuted instantiation: signal.c:ccan_list_add_after_
Unexecuted instantiation: st.c:ccan_list_add_after_
Unexecuted instantiation: string.c:ccan_list_add_after_
Unexecuted instantiation: struct.c:ccan_list_add_after_
Unexecuted instantiation: symbol.c:ccan_list_add_after_
thread.c:ccan_list_add_after_
Line
Count
Source
128
44
{
129
44
  n->next = p->next;
130
44
  n->prev = p;
131
44
  p->next->prev = n;
132
44
  p->next = n;
133
44
  (void)ccan_list_debug(h, abortstr);
134
44
}
Unexecuted instantiation: time.c:ccan_list_add_after_
Unexecuted instantiation: transcode.c:ccan_list_add_after_
Unexecuted instantiation: variable.c:ccan_list_add_after_
Unexecuted instantiation: version.c:ccan_list_add_after_
Unexecuted instantiation: vm.c:ccan_list_add_after_
Unexecuted instantiation: vm_backtrace.c:ccan_list_add_after_
Unexecuted instantiation: vm_dump.c:ccan_list_add_after_
Unexecuted instantiation: vm_sync.c:ccan_list_add_after_
Unexecuted instantiation: vm_trace.c:ccan_list_add_after_
Unexecuted instantiation: weakmap.c:ccan_list_add_after_
Unexecuted instantiation: builtin.c:ccan_list_add_after_
Unexecuted instantiation: ast.c:ccan_list_add_after_
Unexecuted instantiation: box.c:ccan_list_add_after_
Unexecuted instantiation: compile.c:ccan_list_add_after_
Unexecuted instantiation: concurrent_set.c:ccan_list_add_after_
Unexecuted instantiation: cont.c:ccan_list_add_after_
Unexecuted instantiation: debug.c:ccan_list_add_after_
Unexecuted instantiation: dir.c:ccan_list_add_after_
Unexecuted instantiation: parse.c:ccan_list_add_after_
135
136
/**
137
 * ccan_list_add - add an entry at the start of a linked list.
138
 * @h: the ccan_list_head to add the node to
139
 * @n: the ccan_list_node to add to the list.
140
 *
141
 * The ccan_list_node does not need to be initialized; it will be overwritten.
142
 * Example:
143
 *  struct child *child = malloc(sizeof(*child));
144
 *
145
 *  child->name = "marvin";
146
 *  ccan_list_add(&parent->children, &child->list);
147
 *  parent->num_children++;
148
 */
149
44
#define ccan_list_add(h, n) ccan_list_add_(h, n, CCAN_LIST_LOC)
150
static inline void ccan_list_add_(struct ccan_list_head *h,
151
           struct ccan_list_node *n,
152
           const char *abortstr)
153
44
{
154
44
  ccan_list_add_after_(h, &h->n, n, abortstr);
155
44
}
Unexecuted instantiation: array.c:ccan_list_add_
Unexecuted instantiation: bignum.c:ccan_list_add_
Unexecuted instantiation: class.c:ccan_list_add_
Unexecuted instantiation: complex.c:ccan_list_add_
Unexecuted instantiation: enumerator.c:ccan_list_add_
Unexecuted instantiation: error.c:ccan_list_add_
Unexecuted instantiation: eval.c:ccan_list_add_
Unexecuted instantiation: file.c:ccan_list_add_
Unexecuted instantiation: gc.c:ccan_list_add_
Unexecuted instantiation: hash.c:ccan_list_add_
Unexecuted instantiation: imemo.c:ccan_list_add_
Unexecuted instantiation: io.c:ccan_list_add_
Unexecuted instantiation: io_buffer.c:ccan_list_add_
Unexecuted instantiation: iseq.c:ccan_list_add_
Unexecuted instantiation: load.c:ccan_list_add_
Unexecuted instantiation: marshal.c:ccan_list_add_
Unexecuted instantiation: memory_view.c:ccan_list_add_
Unexecuted instantiation: node.c:ccan_list_add_
Unexecuted instantiation: node_dump.c:ccan_list_add_
Unexecuted instantiation: numeric.c:ccan_list_add_
Unexecuted instantiation: object.c:ccan_list_add_
Unexecuted instantiation: pack.c:ccan_list_add_
Unexecuted instantiation: proc.c:ccan_list_add_
Unexecuted instantiation: process.c:ccan_list_add_
Unexecuted instantiation: ractor.c:ccan_list_add_
Unexecuted instantiation: random.c:ccan_list_add_
Unexecuted instantiation: rational.c:ccan_list_add_
Unexecuted instantiation: re.c:ccan_list_add_
Unexecuted instantiation: ruby.c:ccan_list_add_
Unexecuted instantiation: scheduler.c:ccan_list_add_
Unexecuted instantiation: set.c:ccan_list_add_
Unexecuted instantiation: shape.c:ccan_list_add_
Unexecuted instantiation: signal.c:ccan_list_add_
Unexecuted instantiation: st.c:ccan_list_add_
Unexecuted instantiation: string.c:ccan_list_add_
Unexecuted instantiation: struct.c:ccan_list_add_
Unexecuted instantiation: symbol.c:ccan_list_add_
thread.c:ccan_list_add_
Line
Count
Source
153
44
{
154
44
  ccan_list_add_after_(h, &h->n, n, abortstr);
155
44
}
Unexecuted instantiation: time.c:ccan_list_add_
Unexecuted instantiation: transcode.c:ccan_list_add_
Unexecuted instantiation: variable.c:ccan_list_add_
Unexecuted instantiation: version.c:ccan_list_add_
Unexecuted instantiation: vm.c:ccan_list_add_
Unexecuted instantiation: vm_backtrace.c:ccan_list_add_
Unexecuted instantiation: vm_dump.c:ccan_list_add_
Unexecuted instantiation: vm_sync.c:ccan_list_add_
Unexecuted instantiation: vm_trace.c:ccan_list_add_
Unexecuted instantiation: weakmap.c:ccan_list_add_
Unexecuted instantiation: builtin.c:ccan_list_add_
Unexecuted instantiation: ast.c:ccan_list_add_
Unexecuted instantiation: box.c:ccan_list_add_
Unexecuted instantiation: compile.c:ccan_list_add_
Unexecuted instantiation: concurrent_set.c:ccan_list_add_
Unexecuted instantiation: cont.c:ccan_list_add_
Unexecuted instantiation: debug.c:ccan_list_add_
Unexecuted instantiation: dir.c:ccan_list_add_
Unexecuted instantiation: parse.c:ccan_list_add_
156
157
/**
158
 * ccan_list_add_before - add an entry before an existing node in a linked list
159
 * @h: the ccan_list_head to add the node to (for debugging)
160
 * @p: the existing ccan_list_node to add the node before
161
 * @n: the new ccan_list_node to add to the list.
162
 *
163
 * The existing ccan_list_node must already be a member of the list.
164
 * The new ccan_list_node does not need to be initialized; it will be overwritten.
165
 *
166
 * Example:
167
 *  ccan_list_head_init(&h);
168
 *  ccan_list_add_tail(&h, &c1.list);
169
 *  ccan_list_add_tail(&h, &c3.list);
170
 *  ccan_list_add_before(&h, &c3.list, &c2.list);
171
 */
172
#define ccan_list_add_before(h, p, n) ccan_list_add_before_(h, p, n, CCAN_LIST_LOC)
173
static inline void ccan_list_add_before_(struct ccan_list_head *h,
174
            struct ccan_list_node *p,
175
            struct ccan_list_node *n,
176
            const char *abortstr)
177
10.8k
{
178
10.8k
  n->next = p;
179
10.8k
  n->prev = p->prev;
180
10.8k
  p->prev->next = n;
181
10.8k
  p->prev = n;
182
10.8k
  (void)ccan_list_debug(h, abortstr);
183
10.8k
}
Unexecuted instantiation: array.c:ccan_list_add_before_
Unexecuted instantiation: bignum.c:ccan_list_add_before_
Unexecuted instantiation: class.c:ccan_list_add_before_
Unexecuted instantiation: complex.c:ccan_list_add_before_
Unexecuted instantiation: enumerator.c:ccan_list_add_before_
Unexecuted instantiation: error.c:ccan_list_add_before_
Unexecuted instantiation: eval.c:ccan_list_add_before_
Unexecuted instantiation: file.c:ccan_list_add_before_
gc.c:ccan_list_add_before_
Line
Count
Source
177
10.7k
{
178
10.7k
  n->next = p;
179
10.7k
  n->prev = p->prev;
180
10.7k
  p->prev->next = n;
181
10.7k
  p->prev = n;
182
10.7k
  (void)ccan_list_debug(h, abortstr);
183
10.7k
}
Unexecuted instantiation: hash.c:ccan_list_add_before_
Unexecuted instantiation: imemo.c:ccan_list_add_before_
Unexecuted instantiation: io.c:ccan_list_add_before_
Unexecuted instantiation: io_buffer.c:ccan_list_add_before_
Unexecuted instantiation: iseq.c:ccan_list_add_before_
Unexecuted instantiation: load.c:ccan_list_add_before_
Unexecuted instantiation: marshal.c:ccan_list_add_before_
Unexecuted instantiation: memory_view.c:ccan_list_add_before_
Unexecuted instantiation: node.c:ccan_list_add_before_
Unexecuted instantiation: node_dump.c:ccan_list_add_before_
Unexecuted instantiation: numeric.c:ccan_list_add_before_
Unexecuted instantiation: object.c:ccan_list_add_before_
Unexecuted instantiation: pack.c:ccan_list_add_before_
Unexecuted instantiation: proc.c:ccan_list_add_before_
Unexecuted instantiation: process.c:ccan_list_add_before_
ractor.c:ccan_list_add_before_
Line
Count
Source
177
18
{
178
18
  n->next = p;
179
18
  n->prev = p->prev;
180
18
  p->prev->next = n;
181
18
  p->prev = n;
182
18
  (void)ccan_list_debug(h, abortstr);
183
18
}
Unexecuted instantiation: random.c:ccan_list_add_before_
Unexecuted instantiation: rational.c:ccan_list_add_before_
Unexecuted instantiation: re.c:ccan_list_add_before_
Unexecuted instantiation: ruby.c:ccan_list_add_before_
Unexecuted instantiation: scheduler.c:ccan_list_add_before_
Unexecuted instantiation: set.c:ccan_list_add_before_
Unexecuted instantiation: shape.c:ccan_list_add_before_
Unexecuted instantiation: signal.c:ccan_list_add_before_
Unexecuted instantiation: st.c:ccan_list_add_before_
Unexecuted instantiation: string.c:ccan_list_add_before_
Unexecuted instantiation: struct.c:ccan_list_add_before_
Unexecuted instantiation: symbol.c:ccan_list_add_before_
Unexecuted instantiation: thread.c:ccan_list_add_before_
Unexecuted instantiation: time.c:ccan_list_add_before_
Unexecuted instantiation: transcode.c:ccan_list_add_before_
Unexecuted instantiation: variable.c:ccan_list_add_before_
Unexecuted instantiation: version.c:ccan_list_add_before_
Unexecuted instantiation: vm.c:ccan_list_add_before_
Unexecuted instantiation: vm_backtrace.c:ccan_list_add_before_
Unexecuted instantiation: vm_dump.c:ccan_list_add_before_
Unexecuted instantiation: vm_sync.c:ccan_list_add_before_
Unexecuted instantiation: vm_trace.c:ccan_list_add_before_
Unexecuted instantiation: weakmap.c:ccan_list_add_before_
Unexecuted instantiation: builtin.c:ccan_list_add_before_
Unexecuted instantiation: ast.c:ccan_list_add_before_
Unexecuted instantiation: box.c:ccan_list_add_before_
Unexecuted instantiation: compile.c:ccan_list_add_before_
Unexecuted instantiation: concurrent_set.c:ccan_list_add_before_
Unexecuted instantiation: cont.c:ccan_list_add_before_
Unexecuted instantiation: debug.c:ccan_list_add_before_
Unexecuted instantiation: dir.c:ccan_list_add_before_
Unexecuted instantiation: parse.c:ccan_list_add_before_
184
185
/**
186
 * ccan_list_add_tail - add an entry at the end of a linked list.
187
 * @h: the ccan_list_head to add the node to
188
 * @n: the ccan_list_node to add to the list.
189
 *
190
 * The ccan_list_node does not need to be initialized; it will be overwritten.
191
 * Example:
192
 *  ccan_list_add_tail(&parent->children, &child->list);
193
 *  parent->num_children++;
194
 */
195
10.8k
#define ccan_list_add_tail(h, n) ccan_list_add_tail_(h, n, CCAN_LIST_LOC)
196
static inline void ccan_list_add_tail_(struct ccan_list_head *h,
197
          struct ccan_list_node *n,
198
          const char *abortstr)
199
10.8k
{
200
10.8k
  ccan_list_add_before_(h, &h->n, n, abortstr);
201
10.8k
}
Unexecuted instantiation: array.c:ccan_list_add_tail_
Unexecuted instantiation: bignum.c:ccan_list_add_tail_
Unexecuted instantiation: class.c:ccan_list_add_tail_
Unexecuted instantiation: complex.c:ccan_list_add_tail_
Unexecuted instantiation: enumerator.c:ccan_list_add_tail_
Unexecuted instantiation: error.c:ccan_list_add_tail_
Unexecuted instantiation: eval.c:ccan_list_add_tail_
Unexecuted instantiation: file.c:ccan_list_add_tail_
gc.c:ccan_list_add_tail_
Line
Count
Source
199
10.7k
{
200
10.7k
  ccan_list_add_before_(h, &h->n, n, abortstr);
201
10.7k
}
Unexecuted instantiation: hash.c:ccan_list_add_tail_
Unexecuted instantiation: imemo.c:ccan_list_add_tail_
Unexecuted instantiation: io.c:ccan_list_add_tail_
Unexecuted instantiation: io_buffer.c:ccan_list_add_tail_
Unexecuted instantiation: iseq.c:ccan_list_add_tail_
Unexecuted instantiation: load.c:ccan_list_add_tail_
Unexecuted instantiation: marshal.c:ccan_list_add_tail_
Unexecuted instantiation: memory_view.c:ccan_list_add_tail_
Unexecuted instantiation: node.c:ccan_list_add_tail_
Unexecuted instantiation: node_dump.c:ccan_list_add_tail_
Unexecuted instantiation: numeric.c:ccan_list_add_tail_
Unexecuted instantiation: object.c:ccan_list_add_tail_
Unexecuted instantiation: pack.c:ccan_list_add_tail_
Unexecuted instantiation: proc.c:ccan_list_add_tail_
Unexecuted instantiation: process.c:ccan_list_add_tail_
ractor.c:ccan_list_add_tail_
Line
Count
Source
199
18
{
200
18
  ccan_list_add_before_(h, &h->n, n, abortstr);
201
18
}
Unexecuted instantiation: random.c:ccan_list_add_tail_
Unexecuted instantiation: rational.c:ccan_list_add_tail_
Unexecuted instantiation: re.c:ccan_list_add_tail_
Unexecuted instantiation: ruby.c:ccan_list_add_tail_
Unexecuted instantiation: scheduler.c:ccan_list_add_tail_
Unexecuted instantiation: set.c:ccan_list_add_tail_
Unexecuted instantiation: shape.c:ccan_list_add_tail_
Unexecuted instantiation: signal.c:ccan_list_add_tail_
Unexecuted instantiation: st.c:ccan_list_add_tail_
Unexecuted instantiation: string.c:ccan_list_add_tail_
Unexecuted instantiation: struct.c:ccan_list_add_tail_
Unexecuted instantiation: symbol.c:ccan_list_add_tail_
Unexecuted instantiation: thread.c:ccan_list_add_tail_
Unexecuted instantiation: time.c:ccan_list_add_tail_
Unexecuted instantiation: transcode.c:ccan_list_add_tail_
Unexecuted instantiation: variable.c:ccan_list_add_tail_
Unexecuted instantiation: version.c:ccan_list_add_tail_
Unexecuted instantiation: vm.c:ccan_list_add_tail_
Unexecuted instantiation: vm_backtrace.c:ccan_list_add_tail_
Unexecuted instantiation: vm_dump.c:ccan_list_add_tail_
Unexecuted instantiation: vm_sync.c:ccan_list_add_tail_
Unexecuted instantiation: vm_trace.c:ccan_list_add_tail_
Unexecuted instantiation: weakmap.c:ccan_list_add_tail_
Unexecuted instantiation: builtin.c:ccan_list_add_tail_
Unexecuted instantiation: ast.c:ccan_list_add_tail_
Unexecuted instantiation: box.c:ccan_list_add_tail_
Unexecuted instantiation: compile.c:ccan_list_add_tail_
Unexecuted instantiation: concurrent_set.c:ccan_list_add_tail_
Unexecuted instantiation: cont.c:ccan_list_add_tail_
Unexecuted instantiation: debug.c:ccan_list_add_tail_
Unexecuted instantiation: dir.c:ccan_list_add_tail_
Unexecuted instantiation: parse.c:ccan_list_add_tail_
202
203
/**
204
 * ccan_list_empty - is a list empty?
205
 * @h: the ccan_list_head
206
 *
207
 * If the list is empty, returns true.
208
 *
209
 * Example:
210
 *  assert(ccan_list_empty(&parent->children) == (parent->num_children == 0));
211
 */
212
273k
#define ccan_list_empty(h) ccan_list_empty_(h, CCAN_LIST_LOC)
213
static inline int ccan_list_empty_(const struct ccan_list_head *h, const char* abortstr)
214
273k
{
215
273k
  (void)ccan_list_debug(h, abortstr);
216
273k
  return h->n.next == &h->n;
217
273k
}
Unexecuted instantiation: array.c:ccan_list_empty_
Unexecuted instantiation: bignum.c:ccan_list_empty_
Unexecuted instantiation: class.c:ccan_list_empty_
Unexecuted instantiation: complex.c:ccan_list_empty_
Unexecuted instantiation: enumerator.c:ccan_list_empty_
Unexecuted instantiation: error.c:ccan_list_empty_
Unexecuted instantiation: eval.c:ccan_list_empty_
Unexecuted instantiation: file.c:ccan_list_empty_
gc.c:ccan_list_empty_
Line
Count
Source
214
227k
{
215
227k
  (void)ccan_list_debug(h, abortstr);
216
227k
  return h->n.next == &h->n;
217
227k
}
Unexecuted instantiation: hash.c:ccan_list_empty_
Unexecuted instantiation: imemo.c:ccan_list_empty_
Unexecuted instantiation: io.c:ccan_list_empty_
Unexecuted instantiation: io_buffer.c:ccan_list_empty_
Unexecuted instantiation: iseq.c:ccan_list_empty_
Unexecuted instantiation: load.c:ccan_list_empty_
Unexecuted instantiation: marshal.c:ccan_list_empty_
Unexecuted instantiation: memory_view.c:ccan_list_empty_
Unexecuted instantiation: node.c:ccan_list_empty_
Unexecuted instantiation: node_dump.c:ccan_list_empty_
Unexecuted instantiation: numeric.c:ccan_list_empty_
Unexecuted instantiation: object.c:ccan_list_empty_
Unexecuted instantiation: pack.c:ccan_list_empty_
Unexecuted instantiation: proc.c:ccan_list_empty_
Unexecuted instantiation: process.c:ccan_list_empty_
Unexecuted instantiation: ractor.c:ccan_list_empty_
Unexecuted instantiation: random.c:ccan_list_empty_
Unexecuted instantiation: rational.c:ccan_list_empty_
Unexecuted instantiation: re.c:ccan_list_empty_
Unexecuted instantiation: ruby.c:ccan_list_empty_
Unexecuted instantiation: scheduler.c:ccan_list_empty_
Unexecuted instantiation: set.c:ccan_list_empty_
Unexecuted instantiation: shape.c:ccan_list_empty_
Unexecuted instantiation: signal.c:ccan_list_empty_
Unexecuted instantiation: st.c:ccan_list_empty_
Unexecuted instantiation: string.c:ccan_list_empty_
Unexecuted instantiation: struct.c:ccan_list_empty_
Unexecuted instantiation: symbol.c:ccan_list_empty_
thread.c:ccan_list_empty_
Line
Count
Source
214
45.6k
{
215
45.6k
  (void)ccan_list_debug(h, abortstr);
216
45.6k
  return h->n.next == &h->n;
217
45.6k
}
Unexecuted instantiation: time.c:ccan_list_empty_
Unexecuted instantiation: transcode.c:ccan_list_empty_
Unexecuted instantiation: variable.c:ccan_list_empty_
Unexecuted instantiation: version.c:ccan_list_empty_
Unexecuted instantiation: vm.c:ccan_list_empty_
Unexecuted instantiation: vm_backtrace.c:ccan_list_empty_
Unexecuted instantiation: vm_dump.c:ccan_list_empty_
Unexecuted instantiation: vm_sync.c:ccan_list_empty_
Unexecuted instantiation: vm_trace.c:ccan_list_empty_
Unexecuted instantiation: weakmap.c:ccan_list_empty_
Unexecuted instantiation: builtin.c:ccan_list_empty_
Unexecuted instantiation: ast.c:ccan_list_empty_
Unexecuted instantiation: box.c:ccan_list_empty_
Unexecuted instantiation: compile.c:ccan_list_empty_
Unexecuted instantiation: concurrent_set.c:ccan_list_empty_
Unexecuted instantiation: cont.c:ccan_list_empty_
Unexecuted instantiation: debug.c:ccan_list_empty_
Unexecuted instantiation: dir.c:ccan_list_empty_
Unexecuted instantiation: parse.c:ccan_list_empty_
218
219
/**
220
 * ccan_list_empty_nodebug - is a list empty (and don't perform debug checks)?
221
 * @h: the ccan_list_head
222
 *
223
 * If the list is empty, returns true.
224
 * This differs from list_empty() in that if CCAN_LIST_DEBUG is set it
225
 * will NOT perform debug checks. Only use this function if you REALLY
226
 * know what you're doing.
227
 *
228
 * Example:
229
 *  assert(ccan_list_empty_nodebug(&parent->children) == (parent->num_children == 0));
230
 */
231
#ifndef CCAN_LIST_DEBUG
232
#define ccan_list_empty_nodebug(h) ccan_list_empty(h)
233
#else
234
static inline int ccan_list_empty_nodebug(const struct ccan_list_head *h)
235
{
236
  return h->n.next == &h->n;
237
}
238
#endif
239
240
/**
241
 * ccan_list_empty_nocheck - is a list empty?
242
 * @h: the ccan_list_head
243
 *
244
 * If the list is empty, returns true. This doesn't perform any
245
 * debug check for list consistency, so it can be called without
246
 * locks, racing with the list being modified. This is ok for
247
 * checks where an incorrect result is not an issue (optimized
248
 * bail out path for example).
249
 */
250
static inline bool ccan_list_empty_nocheck(const struct ccan_list_head *h)
251
0
{
252
0
  return h->n.next == &h->n;
253
0
}
Unexecuted instantiation: array.c:ccan_list_empty_nocheck
Unexecuted instantiation: bignum.c:ccan_list_empty_nocheck
Unexecuted instantiation: class.c:ccan_list_empty_nocheck
Unexecuted instantiation: complex.c:ccan_list_empty_nocheck
Unexecuted instantiation: enumerator.c:ccan_list_empty_nocheck
Unexecuted instantiation: error.c:ccan_list_empty_nocheck
Unexecuted instantiation: eval.c:ccan_list_empty_nocheck
Unexecuted instantiation: file.c:ccan_list_empty_nocheck
Unexecuted instantiation: gc.c:ccan_list_empty_nocheck
Unexecuted instantiation: hash.c:ccan_list_empty_nocheck
Unexecuted instantiation: imemo.c:ccan_list_empty_nocheck
Unexecuted instantiation: io.c:ccan_list_empty_nocheck
Unexecuted instantiation: io_buffer.c:ccan_list_empty_nocheck
Unexecuted instantiation: iseq.c:ccan_list_empty_nocheck
Unexecuted instantiation: load.c:ccan_list_empty_nocheck
Unexecuted instantiation: marshal.c:ccan_list_empty_nocheck
Unexecuted instantiation: memory_view.c:ccan_list_empty_nocheck
Unexecuted instantiation: node.c:ccan_list_empty_nocheck
Unexecuted instantiation: node_dump.c:ccan_list_empty_nocheck
Unexecuted instantiation: numeric.c:ccan_list_empty_nocheck
Unexecuted instantiation: object.c:ccan_list_empty_nocheck
Unexecuted instantiation: pack.c:ccan_list_empty_nocheck
Unexecuted instantiation: proc.c:ccan_list_empty_nocheck
Unexecuted instantiation: process.c:ccan_list_empty_nocheck
Unexecuted instantiation: ractor.c:ccan_list_empty_nocheck
Unexecuted instantiation: random.c:ccan_list_empty_nocheck
Unexecuted instantiation: rational.c:ccan_list_empty_nocheck
Unexecuted instantiation: re.c:ccan_list_empty_nocheck
Unexecuted instantiation: ruby.c:ccan_list_empty_nocheck
Unexecuted instantiation: scheduler.c:ccan_list_empty_nocheck
Unexecuted instantiation: set.c:ccan_list_empty_nocheck
Unexecuted instantiation: shape.c:ccan_list_empty_nocheck
Unexecuted instantiation: signal.c:ccan_list_empty_nocheck
Unexecuted instantiation: st.c:ccan_list_empty_nocheck
Unexecuted instantiation: string.c:ccan_list_empty_nocheck
Unexecuted instantiation: struct.c:ccan_list_empty_nocheck
Unexecuted instantiation: symbol.c:ccan_list_empty_nocheck
Unexecuted instantiation: thread.c:ccan_list_empty_nocheck
Unexecuted instantiation: time.c:ccan_list_empty_nocheck
Unexecuted instantiation: transcode.c:ccan_list_empty_nocheck
Unexecuted instantiation: variable.c:ccan_list_empty_nocheck
Unexecuted instantiation: version.c:ccan_list_empty_nocheck
Unexecuted instantiation: vm.c:ccan_list_empty_nocheck
Unexecuted instantiation: vm_backtrace.c:ccan_list_empty_nocheck
Unexecuted instantiation: vm_dump.c:ccan_list_empty_nocheck
Unexecuted instantiation: vm_sync.c:ccan_list_empty_nocheck
Unexecuted instantiation: vm_trace.c:ccan_list_empty_nocheck
Unexecuted instantiation: weakmap.c:ccan_list_empty_nocheck
Unexecuted instantiation: builtin.c:ccan_list_empty_nocheck
Unexecuted instantiation: ast.c:ccan_list_empty_nocheck
Unexecuted instantiation: box.c:ccan_list_empty_nocheck
Unexecuted instantiation: compile.c:ccan_list_empty_nocheck
Unexecuted instantiation: concurrent_set.c:ccan_list_empty_nocheck
Unexecuted instantiation: cont.c:ccan_list_empty_nocheck
Unexecuted instantiation: debug.c:ccan_list_empty_nocheck
Unexecuted instantiation: dir.c:ccan_list_empty_nocheck
Unexecuted instantiation: parse.c:ccan_list_empty_nocheck
254
255
/**
256
 * ccan_list_del - delete an entry from an (unknown) linked list.
257
 * @n: the ccan_list_node to delete from the list.
258
 *
259
 * Note that this leaves @n in an undefined state; it can be added to
260
 * another list, but not deleted again.
261
 *
262
 * See also:
263
 *  ccan_list_del_from(), ccan_list_del_init()
264
 *
265
 * Example:
266
 *  ccan_list_del(&child->list);
267
 *  parent->num_children--;
268
 */
269
10.6k
#define ccan_list_del(n) ccan_list_del_(n, CCAN_LIST_LOC)
270
static inline void ccan_list_del_(struct ccan_list_node *n, const char* abortstr)
271
10.7k
{
272
10.7k
  (void)ccan_list_debug_node(n, abortstr);
273
10.7k
  n->next->prev = n->prev;
274
10.7k
  n->prev->next = n->next;
275
#ifdef CCAN_LIST_DEBUG
276
  /* Catch use-after-del. */
277
  n->next = n->prev = NULL;
278
#endif
279
10.7k
}
Unexecuted instantiation: array.c:ccan_list_del_
Unexecuted instantiation: bignum.c:ccan_list_del_
Unexecuted instantiation: class.c:ccan_list_del_
Unexecuted instantiation: complex.c:ccan_list_del_
Unexecuted instantiation: enumerator.c:ccan_list_del_
Unexecuted instantiation: error.c:ccan_list_del_
Unexecuted instantiation: eval.c:ccan_list_del_
Unexecuted instantiation: file.c:ccan_list_del_
gc.c:ccan_list_del_
Line
Count
Source
271
10.6k
{
272
10.6k
  (void)ccan_list_debug_node(n, abortstr);
273
10.6k
  n->next->prev = n->prev;
274
10.6k
  n->prev->next = n->next;
275
#ifdef CCAN_LIST_DEBUG
276
  /* Catch use-after-del. */
277
  n->next = n->prev = NULL;
278
#endif
279
10.6k
}
Unexecuted instantiation: hash.c:ccan_list_del_
Unexecuted instantiation: imemo.c:ccan_list_del_
Unexecuted instantiation: io.c:ccan_list_del_
Unexecuted instantiation: io_buffer.c:ccan_list_del_
Unexecuted instantiation: iseq.c:ccan_list_del_
Unexecuted instantiation: load.c:ccan_list_del_
Unexecuted instantiation: marshal.c:ccan_list_del_
Unexecuted instantiation: memory_view.c:ccan_list_del_
Unexecuted instantiation: node.c:ccan_list_del_
Unexecuted instantiation: node_dump.c:ccan_list_del_
Unexecuted instantiation: numeric.c:ccan_list_del_
Unexecuted instantiation: object.c:ccan_list_del_
Unexecuted instantiation: pack.c:ccan_list_del_
Unexecuted instantiation: proc.c:ccan_list_del_
Unexecuted instantiation: process.c:ccan_list_del_
Unexecuted instantiation: ractor.c:ccan_list_del_
Unexecuted instantiation: random.c:ccan_list_del_
Unexecuted instantiation: rational.c:ccan_list_del_
Unexecuted instantiation: re.c:ccan_list_del_
Unexecuted instantiation: ruby.c:ccan_list_del_
Unexecuted instantiation: scheduler.c:ccan_list_del_
Unexecuted instantiation: set.c:ccan_list_del_
Unexecuted instantiation: shape.c:ccan_list_del_
Unexecuted instantiation: signal.c:ccan_list_del_
Unexecuted instantiation: st.c:ccan_list_del_
Unexecuted instantiation: string.c:ccan_list_del_
Unexecuted instantiation: struct.c:ccan_list_del_
Unexecuted instantiation: symbol.c:ccan_list_del_
thread.c:ccan_list_del_
Line
Count
Source
271
35
{
272
35
  (void)ccan_list_debug_node(n, abortstr);
273
35
  n->next->prev = n->prev;
274
35
  n->prev->next = n->next;
275
#ifdef CCAN_LIST_DEBUG
276
  /* Catch use-after-del. */
277
  n->next = n->prev = NULL;
278
#endif
279
35
}
Unexecuted instantiation: time.c:ccan_list_del_
Unexecuted instantiation: transcode.c:ccan_list_del_
Unexecuted instantiation: variable.c:ccan_list_del_
Unexecuted instantiation: version.c:ccan_list_del_
Unexecuted instantiation: vm.c:ccan_list_del_
Unexecuted instantiation: vm_backtrace.c:ccan_list_del_
Unexecuted instantiation: vm_dump.c:ccan_list_del_
Unexecuted instantiation: vm_sync.c:ccan_list_del_
Unexecuted instantiation: vm_trace.c:ccan_list_del_
Unexecuted instantiation: weakmap.c:ccan_list_del_
Unexecuted instantiation: builtin.c:ccan_list_del_
Unexecuted instantiation: ast.c:ccan_list_del_
Unexecuted instantiation: box.c:ccan_list_del_
Unexecuted instantiation: compile.c:ccan_list_del_
Unexecuted instantiation: concurrent_set.c:ccan_list_del_
Unexecuted instantiation: cont.c:ccan_list_del_
Unexecuted instantiation: debug.c:ccan_list_del_
Unexecuted instantiation: dir.c:ccan_list_del_
Unexecuted instantiation: parse.c:ccan_list_del_
280
281
/**
282
 * ccan_list_del_init - delete a node, and reset it so it can be deleted again.
283
 * @n: the ccan_list_node to be deleted.
284
 *
285
 * ccan_list_del(@n) or ccan_list_del_init() again after this will be safe,
286
 * which can be useful in some cases.
287
 *
288
 * See also:
289
 *  ccan_list_del_from(), ccan_list_del()
290
 *
291
 * Example:
292
 *  ccan_list_del_init(&child->list);
293
 *  parent->num_children--;
294
 */
295
35
#define ccan_list_del_init(n) ccan_list_del_init_(n, CCAN_LIST_LOC)
296
static inline void ccan_list_del_init_(struct ccan_list_node *n, const char *abortstr)
297
35
{
298
35
  ccan_list_del_(n, abortstr);
299
35
  ccan_list_node_init(n);
300
35
}
Unexecuted instantiation: array.c:ccan_list_del_init_
Unexecuted instantiation: bignum.c:ccan_list_del_init_
Unexecuted instantiation: class.c:ccan_list_del_init_
Unexecuted instantiation: complex.c:ccan_list_del_init_
Unexecuted instantiation: enumerator.c:ccan_list_del_init_
Unexecuted instantiation: error.c:ccan_list_del_init_
Unexecuted instantiation: eval.c:ccan_list_del_init_
Unexecuted instantiation: file.c:ccan_list_del_init_
Unexecuted instantiation: gc.c:ccan_list_del_init_
Unexecuted instantiation: hash.c:ccan_list_del_init_
Unexecuted instantiation: imemo.c:ccan_list_del_init_
Unexecuted instantiation: io.c:ccan_list_del_init_
Unexecuted instantiation: io_buffer.c:ccan_list_del_init_
Unexecuted instantiation: iseq.c:ccan_list_del_init_
Unexecuted instantiation: load.c:ccan_list_del_init_
Unexecuted instantiation: marshal.c:ccan_list_del_init_
Unexecuted instantiation: memory_view.c:ccan_list_del_init_
Unexecuted instantiation: node.c:ccan_list_del_init_
Unexecuted instantiation: node_dump.c:ccan_list_del_init_
Unexecuted instantiation: numeric.c:ccan_list_del_init_
Unexecuted instantiation: object.c:ccan_list_del_init_
Unexecuted instantiation: pack.c:ccan_list_del_init_
Unexecuted instantiation: proc.c:ccan_list_del_init_
Unexecuted instantiation: process.c:ccan_list_del_init_
Unexecuted instantiation: ractor.c:ccan_list_del_init_
Unexecuted instantiation: random.c:ccan_list_del_init_
Unexecuted instantiation: rational.c:ccan_list_del_init_
Unexecuted instantiation: re.c:ccan_list_del_init_
Unexecuted instantiation: ruby.c:ccan_list_del_init_
Unexecuted instantiation: scheduler.c:ccan_list_del_init_
Unexecuted instantiation: set.c:ccan_list_del_init_
Unexecuted instantiation: shape.c:ccan_list_del_init_
Unexecuted instantiation: signal.c:ccan_list_del_init_
Unexecuted instantiation: st.c:ccan_list_del_init_
Unexecuted instantiation: string.c:ccan_list_del_init_
Unexecuted instantiation: struct.c:ccan_list_del_init_
Unexecuted instantiation: symbol.c:ccan_list_del_init_
thread.c:ccan_list_del_init_
Line
Count
Source
297
35
{
298
35
  ccan_list_del_(n, abortstr);
299
35
  ccan_list_node_init(n);
300
35
}
Unexecuted instantiation: time.c:ccan_list_del_init_
Unexecuted instantiation: transcode.c:ccan_list_del_init_
Unexecuted instantiation: variable.c:ccan_list_del_init_
Unexecuted instantiation: version.c:ccan_list_del_init_
Unexecuted instantiation: vm.c:ccan_list_del_init_
Unexecuted instantiation: vm_backtrace.c:ccan_list_del_init_
Unexecuted instantiation: vm_dump.c:ccan_list_del_init_
Unexecuted instantiation: vm_sync.c:ccan_list_del_init_
Unexecuted instantiation: vm_trace.c:ccan_list_del_init_
Unexecuted instantiation: weakmap.c:ccan_list_del_init_
Unexecuted instantiation: builtin.c:ccan_list_del_init_
Unexecuted instantiation: ast.c:ccan_list_del_init_
Unexecuted instantiation: box.c:ccan_list_del_init_
Unexecuted instantiation: compile.c:ccan_list_del_init_
Unexecuted instantiation: concurrent_set.c:ccan_list_del_init_
Unexecuted instantiation: cont.c:ccan_list_del_init_
Unexecuted instantiation: debug.c:ccan_list_del_init_
Unexecuted instantiation: dir.c:ccan_list_del_init_
Unexecuted instantiation: parse.c:ccan_list_del_init_
301
302
/**
303
 * ccan_list_del_from - delete an entry from a known linked list.
304
 * @h: the ccan_list_head the node is in.
305
 * @n: the ccan_list_node to delete from the list.
306
 *
307
 * This explicitly indicates which list a node is expected to be in,
308
 * which is better documentation and can catch more bugs.
309
 *
310
 * See also: ccan_list_del()
311
 *
312
 * Example:
313
 *  ccan_list_del_from(&parent->children, &child->list);
314
 *  parent->num_children--;
315
 */
316
static inline void ccan_list_del_from(struct ccan_list_head *h, struct ccan_list_node *n)
317
0
{
318
0
#ifdef CCAN_LIST_DEBUG
319
0
  {
320
0
    /* Thorough check: make sure it was in list! */
321
0
    struct ccan_list_node *i;
322
0
    for (i = h->n.next; i != n; i = i->next)
323
0
      assert(i != &h->n);
324
0
  }
325
0
#endif /* CCAN_LIST_DEBUG */
326
0
327
0
  /* Quick test that catches a surprising number of bugs. */
328
0
  assert(!ccan_list_empty(h));
329
0
  ccan_list_del(n);
330
0
}
Unexecuted instantiation: array.c:ccan_list_del_from
Unexecuted instantiation: bignum.c:ccan_list_del_from
Unexecuted instantiation: class.c:ccan_list_del_from
Unexecuted instantiation: complex.c:ccan_list_del_from
Unexecuted instantiation: enumerator.c:ccan_list_del_from
Unexecuted instantiation: error.c:ccan_list_del_from
Unexecuted instantiation: eval.c:ccan_list_del_from
Unexecuted instantiation: file.c:ccan_list_del_from
Unexecuted instantiation: gc.c:ccan_list_del_from
Unexecuted instantiation: hash.c:ccan_list_del_from
Unexecuted instantiation: imemo.c:ccan_list_del_from
Unexecuted instantiation: io.c:ccan_list_del_from
Unexecuted instantiation: io_buffer.c:ccan_list_del_from
Unexecuted instantiation: iseq.c:ccan_list_del_from
Unexecuted instantiation: load.c:ccan_list_del_from
Unexecuted instantiation: marshal.c:ccan_list_del_from
Unexecuted instantiation: memory_view.c:ccan_list_del_from
Unexecuted instantiation: node.c:ccan_list_del_from
Unexecuted instantiation: node_dump.c:ccan_list_del_from
Unexecuted instantiation: numeric.c:ccan_list_del_from
Unexecuted instantiation: object.c:ccan_list_del_from
Unexecuted instantiation: pack.c:ccan_list_del_from
Unexecuted instantiation: proc.c:ccan_list_del_from
Unexecuted instantiation: process.c:ccan_list_del_from
Unexecuted instantiation: ractor.c:ccan_list_del_from
Unexecuted instantiation: random.c:ccan_list_del_from
Unexecuted instantiation: rational.c:ccan_list_del_from
Unexecuted instantiation: re.c:ccan_list_del_from
Unexecuted instantiation: ruby.c:ccan_list_del_from
Unexecuted instantiation: scheduler.c:ccan_list_del_from
Unexecuted instantiation: set.c:ccan_list_del_from
Unexecuted instantiation: shape.c:ccan_list_del_from
Unexecuted instantiation: signal.c:ccan_list_del_from
Unexecuted instantiation: st.c:ccan_list_del_from
Unexecuted instantiation: string.c:ccan_list_del_from
Unexecuted instantiation: struct.c:ccan_list_del_from
Unexecuted instantiation: symbol.c:ccan_list_del_from
Unexecuted instantiation: thread.c:ccan_list_del_from
Unexecuted instantiation: time.c:ccan_list_del_from
Unexecuted instantiation: transcode.c:ccan_list_del_from
Unexecuted instantiation: variable.c:ccan_list_del_from
Unexecuted instantiation: version.c:ccan_list_del_from
Unexecuted instantiation: vm.c:ccan_list_del_from
Unexecuted instantiation: vm_backtrace.c:ccan_list_del_from
Unexecuted instantiation: vm_dump.c:ccan_list_del_from
Unexecuted instantiation: vm_sync.c:ccan_list_del_from
Unexecuted instantiation: vm_trace.c:ccan_list_del_from
Unexecuted instantiation: weakmap.c:ccan_list_del_from
Unexecuted instantiation: builtin.c:ccan_list_del_from
Unexecuted instantiation: ast.c:ccan_list_del_from
Unexecuted instantiation: box.c:ccan_list_del_from
Unexecuted instantiation: compile.c:ccan_list_del_from
Unexecuted instantiation: concurrent_set.c:ccan_list_del_from
Unexecuted instantiation: cont.c:ccan_list_del_from
Unexecuted instantiation: debug.c:ccan_list_del_from
Unexecuted instantiation: dir.c:ccan_list_del_from
Unexecuted instantiation: parse.c:ccan_list_del_from
331
332
/**
333
 * ccan_list_swap - swap out an entry from an (unknown) linked list for a new one.
334
 * @o: the ccan_list_node to replace from the list.
335
 * @n: the ccan_list_node to insert in place of the old one.
336
 *
337
 * Note that this leaves @o in an undefined state; it can be added to
338
 * another list, but not deleted/swapped again.
339
 *
340
 * See also:
341
 *  ccan_list_del()
342
 *
343
 * Example:
344
 *  struct child x1, x2;
345
 *  CCAN_LIST_HEAD(xh);
346
 *
347
 *  ccan_list_add(&xh, &x1.list);
348
 *  ccan_list_swap(&x1.list, &x2.list);
349
 */
350
#define ccan_list_swap(o, n) ccan_list_swap_(o, n, CCAN_LIST_LOC)
351
static inline void ccan_list_swap_(struct ccan_list_node *o,
352
            struct ccan_list_node *n,
353
            const char* abortstr)
354
0
{
355
0
  (void)ccan_list_debug_node(o, abortstr);
356
0
  *n = *o;
357
0
  n->next->prev = n;
358
0
  n->prev->next = n;
359
0
#ifdef CCAN_LIST_DEBUG
360
0
  /* Catch use-after-del. */
361
0
  o->next = o->prev = NULL;
362
0
#endif
363
0
}
Unexecuted instantiation: array.c:ccan_list_swap_
Unexecuted instantiation: bignum.c:ccan_list_swap_
Unexecuted instantiation: class.c:ccan_list_swap_
Unexecuted instantiation: complex.c:ccan_list_swap_
Unexecuted instantiation: enumerator.c:ccan_list_swap_
Unexecuted instantiation: error.c:ccan_list_swap_
Unexecuted instantiation: eval.c:ccan_list_swap_
Unexecuted instantiation: file.c:ccan_list_swap_
Unexecuted instantiation: gc.c:ccan_list_swap_
Unexecuted instantiation: hash.c:ccan_list_swap_
Unexecuted instantiation: imemo.c:ccan_list_swap_
Unexecuted instantiation: io.c:ccan_list_swap_
Unexecuted instantiation: io_buffer.c:ccan_list_swap_
Unexecuted instantiation: iseq.c:ccan_list_swap_
Unexecuted instantiation: load.c:ccan_list_swap_
Unexecuted instantiation: marshal.c:ccan_list_swap_
Unexecuted instantiation: memory_view.c:ccan_list_swap_
Unexecuted instantiation: node.c:ccan_list_swap_
Unexecuted instantiation: node_dump.c:ccan_list_swap_
Unexecuted instantiation: numeric.c:ccan_list_swap_
Unexecuted instantiation: object.c:ccan_list_swap_
Unexecuted instantiation: pack.c:ccan_list_swap_
Unexecuted instantiation: proc.c:ccan_list_swap_
Unexecuted instantiation: process.c:ccan_list_swap_
Unexecuted instantiation: ractor.c:ccan_list_swap_
Unexecuted instantiation: random.c:ccan_list_swap_
Unexecuted instantiation: rational.c:ccan_list_swap_
Unexecuted instantiation: re.c:ccan_list_swap_
Unexecuted instantiation: ruby.c:ccan_list_swap_
Unexecuted instantiation: scheduler.c:ccan_list_swap_
Unexecuted instantiation: set.c:ccan_list_swap_
Unexecuted instantiation: shape.c:ccan_list_swap_
Unexecuted instantiation: signal.c:ccan_list_swap_
Unexecuted instantiation: st.c:ccan_list_swap_
Unexecuted instantiation: string.c:ccan_list_swap_
Unexecuted instantiation: struct.c:ccan_list_swap_
Unexecuted instantiation: symbol.c:ccan_list_swap_
Unexecuted instantiation: thread.c:ccan_list_swap_
Unexecuted instantiation: time.c:ccan_list_swap_
Unexecuted instantiation: transcode.c:ccan_list_swap_
Unexecuted instantiation: variable.c:ccan_list_swap_
Unexecuted instantiation: version.c:ccan_list_swap_
Unexecuted instantiation: vm.c:ccan_list_swap_
Unexecuted instantiation: vm_backtrace.c:ccan_list_swap_
Unexecuted instantiation: vm_dump.c:ccan_list_swap_
Unexecuted instantiation: vm_sync.c:ccan_list_swap_
Unexecuted instantiation: vm_trace.c:ccan_list_swap_
Unexecuted instantiation: weakmap.c:ccan_list_swap_
Unexecuted instantiation: builtin.c:ccan_list_swap_
Unexecuted instantiation: ast.c:ccan_list_swap_
Unexecuted instantiation: box.c:ccan_list_swap_
Unexecuted instantiation: compile.c:ccan_list_swap_
Unexecuted instantiation: concurrent_set.c:ccan_list_swap_
Unexecuted instantiation: cont.c:ccan_list_swap_
Unexecuted instantiation: debug.c:ccan_list_swap_
Unexecuted instantiation: dir.c:ccan_list_swap_
Unexecuted instantiation: parse.c:ccan_list_swap_
364
365
/**
366
 * ccan_list_entry - convert a ccan_list_node back into the structure containing it.
367
 * @n: the ccan_list_node
368
 * @type: the type of the entry
369
 * @member: the ccan_list_node member of the type
370
 *
371
 * Example:
372
 *  // First list entry is children.next; convert back to child.
373
 *  child = ccan_list_entry(parent->children.n.next, struct child, list);
374
 *
375
 * See Also:
376
 *  ccan_list_top(), ccan_list_for_each()
377
 */
378
#define ccan_list_entry(n, type, member) ccan_container_of(n, type, member)
379
380
/**
381
 * ccan_list_top - get the first entry in a list
382
 * @h: the ccan_list_head
383
 * @type: the type of the entry
384
 * @member: the ccan_list_node member of the type
385
 *
386
 * If the list is empty, returns NULL.
387
 *
388
 * Example:
389
 *  struct child *first;
390
 *  first = ccan_list_top(&parent->children, struct child, list);
391
 *  if (!first)
392
 *    printf("Empty list!\n");
393
 */
394
#define ccan_list_top(h, type, member)          \
395
227k
  ((type *)ccan_list_top_((h), ccan_list_off_(type, member)))
396
397
static inline const void *ccan_list_top_(const struct ccan_list_head *h, size_t off)
398
227k
{
399
227k
  if (ccan_list_empty(h))
400
50.1k
    return NULL;
401
177k
  return (const char *)h->n.next - off;
402
227k
}
Unexecuted instantiation: array.c:ccan_list_top_
Unexecuted instantiation: bignum.c:ccan_list_top_
Unexecuted instantiation: class.c:ccan_list_top_
Unexecuted instantiation: complex.c:ccan_list_top_
Unexecuted instantiation: enumerator.c:ccan_list_top_
Unexecuted instantiation: error.c:ccan_list_top_
Unexecuted instantiation: eval.c:ccan_list_top_
Unexecuted instantiation: file.c:ccan_list_top_
gc.c:ccan_list_top_
Line
Count
Source
398
227k
{
399
227k
  if (ccan_list_empty(h))
400
50.1k
    return NULL;
401
177k
  return (const char *)h->n.next - off;
402
227k
}
Unexecuted instantiation: hash.c:ccan_list_top_
Unexecuted instantiation: imemo.c:ccan_list_top_
Unexecuted instantiation: io.c:ccan_list_top_
Unexecuted instantiation: io_buffer.c:ccan_list_top_
Unexecuted instantiation: iseq.c:ccan_list_top_
Unexecuted instantiation: load.c:ccan_list_top_
Unexecuted instantiation: marshal.c:ccan_list_top_
Unexecuted instantiation: memory_view.c:ccan_list_top_
Unexecuted instantiation: node.c:ccan_list_top_
Unexecuted instantiation: node_dump.c:ccan_list_top_
Unexecuted instantiation: numeric.c:ccan_list_top_
Unexecuted instantiation: object.c:ccan_list_top_
Unexecuted instantiation: pack.c:ccan_list_top_
Unexecuted instantiation: proc.c:ccan_list_top_
Unexecuted instantiation: process.c:ccan_list_top_
Unexecuted instantiation: ractor.c:ccan_list_top_
Unexecuted instantiation: random.c:ccan_list_top_
Unexecuted instantiation: rational.c:ccan_list_top_
Unexecuted instantiation: re.c:ccan_list_top_
Unexecuted instantiation: ruby.c:ccan_list_top_
Unexecuted instantiation: scheduler.c:ccan_list_top_
Unexecuted instantiation: set.c:ccan_list_top_
Unexecuted instantiation: shape.c:ccan_list_top_
Unexecuted instantiation: signal.c:ccan_list_top_
Unexecuted instantiation: st.c:ccan_list_top_
Unexecuted instantiation: string.c:ccan_list_top_
Unexecuted instantiation: struct.c:ccan_list_top_
Unexecuted instantiation: symbol.c:ccan_list_top_
thread.c:ccan_list_top_
Line
Count
Source
398
18
{
399
18
  if (ccan_list_empty(h))
400
18
    return NULL;
401
0
  return (const char *)h->n.next - off;
402
18
}
Unexecuted instantiation: time.c:ccan_list_top_
Unexecuted instantiation: transcode.c:ccan_list_top_
Unexecuted instantiation: variable.c:ccan_list_top_
Unexecuted instantiation: version.c:ccan_list_top_
Unexecuted instantiation: vm.c:ccan_list_top_
Unexecuted instantiation: vm_backtrace.c:ccan_list_top_
Unexecuted instantiation: vm_dump.c:ccan_list_top_
Unexecuted instantiation: vm_sync.c:ccan_list_top_
Unexecuted instantiation: vm_trace.c:ccan_list_top_
Unexecuted instantiation: weakmap.c:ccan_list_top_
Unexecuted instantiation: builtin.c:ccan_list_top_
Unexecuted instantiation: ast.c:ccan_list_top_
Unexecuted instantiation: box.c:ccan_list_top_
Unexecuted instantiation: compile.c:ccan_list_top_
Unexecuted instantiation: concurrent_set.c:ccan_list_top_
Unexecuted instantiation: cont.c:ccan_list_top_
Unexecuted instantiation: debug.c:ccan_list_top_
Unexecuted instantiation: dir.c:ccan_list_top_
Unexecuted instantiation: parse.c:ccan_list_top_
403
404
/**
405
 * ccan_list_pop - remove the first entry in a list
406
 * @h: the ccan_list_head
407
 * @type: the type of the entry
408
 * @member: the ccan_list_node member of the type
409
 *
410
 * If the list is empty, returns NULL.
411
 *
412
 * Example:
413
 *  struct child *one;
414
 *  one = ccan_list_pop(&parent->children, struct child, list);
415
 *  if (!one)
416
 *    printf("Empty list!\n");
417
 */
418
#define ccan_list_pop(h, type, member)          \
419
0
  ((type *)ccan_list_pop_((h), ccan_list_off_(type, member)))
420
421
static inline const void *ccan_list_pop_(const struct ccan_list_head *h, size_t off)
422
0
{
423
0
  struct ccan_list_node *n;
424
425
0
  if (ccan_list_empty(h))
426
0
    return NULL;
427
0
  n = h->n.next;
428
0
  ccan_list_del(n);
429
0
  return (const char *)n - off;
430
0
}
Unexecuted instantiation: array.c:ccan_list_pop_
Unexecuted instantiation: bignum.c:ccan_list_pop_
Unexecuted instantiation: class.c:ccan_list_pop_
Unexecuted instantiation: complex.c:ccan_list_pop_
Unexecuted instantiation: enumerator.c:ccan_list_pop_
Unexecuted instantiation: error.c:ccan_list_pop_
Unexecuted instantiation: eval.c:ccan_list_pop_
Unexecuted instantiation: file.c:ccan_list_pop_
Unexecuted instantiation: gc.c:ccan_list_pop_
Unexecuted instantiation: hash.c:ccan_list_pop_
Unexecuted instantiation: imemo.c:ccan_list_pop_
Unexecuted instantiation: io.c:ccan_list_pop_
Unexecuted instantiation: io_buffer.c:ccan_list_pop_
Unexecuted instantiation: iseq.c:ccan_list_pop_
Unexecuted instantiation: load.c:ccan_list_pop_
Unexecuted instantiation: marshal.c:ccan_list_pop_
Unexecuted instantiation: memory_view.c:ccan_list_pop_
Unexecuted instantiation: node.c:ccan_list_pop_
Unexecuted instantiation: node_dump.c:ccan_list_pop_
Unexecuted instantiation: numeric.c:ccan_list_pop_
Unexecuted instantiation: object.c:ccan_list_pop_
Unexecuted instantiation: pack.c:ccan_list_pop_
Unexecuted instantiation: proc.c:ccan_list_pop_
Unexecuted instantiation: process.c:ccan_list_pop_
Unexecuted instantiation: ractor.c:ccan_list_pop_
Unexecuted instantiation: random.c:ccan_list_pop_
Unexecuted instantiation: rational.c:ccan_list_pop_
Unexecuted instantiation: re.c:ccan_list_pop_
Unexecuted instantiation: ruby.c:ccan_list_pop_
Unexecuted instantiation: scheduler.c:ccan_list_pop_
Unexecuted instantiation: set.c:ccan_list_pop_
Unexecuted instantiation: shape.c:ccan_list_pop_
Unexecuted instantiation: signal.c:ccan_list_pop_
Unexecuted instantiation: st.c:ccan_list_pop_
Unexecuted instantiation: string.c:ccan_list_pop_
Unexecuted instantiation: struct.c:ccan_list_pop_
Unexecuted instantiation: symbol.c:ccan_list_pop_
Unexecuted instantiation: thread.c:ccan_list_pop_
Unexecuted instantiation: time.c:ccan_list_pop_
Unexecuted instantiation: transcode.c:ccan_list_pop_
Unexecuted instantiation: variable.c:ccan_list_pop_
Unexecuted instantiation: version.c:ccan_list_pop_
Unexecuted instantiation: vm.c:ccan_list_pop_
Unexecuted instantiation: vm_backtrace.c:ccan_list_pop_
Unexecuted instantiation: vm_dump.c:ccan_list_pop_
Unexecuted instantiation: vm_sync.c:ccan_list_pop_
Unexecuted instantiation: vm_trace.c:ccan_list_pop_
Unexecuted instantiation: weakmap.c:ccan_list_pop_
Unexecuted instantiation: builtin.c:ccan_list_pop_
Unexecuted instantiation: ast.c:ccan_list_pop_
Unexecuted instantiation: box.c:ccan_list_pop_
Unexecuted instantiation: compile.c:ccan_list_pop_
Unexecuted instantiation: concurrent_set.c:ccan_list_pop_
Unexecuted instantiation: cont.c:ccan_list_pop_
Unexecuted instantiation: debug.c:ccan_list_pop_
Unexecuted instantiation: dir.c:ccan_list_pop_
Unexecuted instantiation: parse.c:ccan_list_pop_
431
432
/**
433
 * ccan_list_tail - get the last entry in a list
434
 * @h: the ccan_list_head
435
 * @type: the type of the entry
436
 * @member: the ccan_list_node member of the type
437
 *
438
 * If the list is empty, returns NULL.
439
 *
440
 * Example:
441
 *  struct child *last;
442
 *  last = ccan_list_tail(&parent->children, struct child, list);
443
 *  if (!last)
444
 *    printf("Empty list!\n");
445
 */
446
#define ccan_list_tail(h, type, member) \
447
0
  ((type *)ccan_list_tail_((h), ccan_list_off_(type, member)))
448
449
static inline const void *ccan_list_tail_(const struct ccan_list_head *h, size_t off)
450
0
{
451
0
  if (ccan_list_empty(h))
452
0
    return NULL;
453
0
  return (const char *)h->n.prev - off;
454
0
}
Unexecuted instantiation: array.c:ccan_list_tail_
Unexecuted instantiation: bignum.c:ccan_list_tail_
Unexecuted instantiation: class.c:ccan_list_tail_
Unexecuted instantiation: complex.c:ccan_list_tail_
Unexecuted instantiation: enumerator.c:ccan_list_tail_
Unexecuted instantiation: error.c:ccan_list_tail_
Unexecuted instantiation: eval.c:ccan_list_tail_
Unexecuted instantiation: file.c:ccan_list_tail_
Unexecuted instantiation: gc.c:ccan_list_tail_
Unexecuted instantiation: hash.c:ccan_list_tail_
Unexecuted instantiation: imemo.c:ccan_list_tail_
Unexecuted instantiation: io.c:ccan_list_tail_
Unexecuted instantiation: io_buffer.c:ccan_list_tail_
Unexecuted instantiation: iseq.c:ccan_list_tail_
Unexecuted instantiation: load.c:ccan_list_tail_
Unexecuted instantiation: marshal.c:ccan_list_tail_
Unexecuted instantiation: memory_view.c:ccan_list_tail_
Unexecuted instantiation: node.c:ccan_list_tail_
Unexecuted instantiation: node_dump.c:ccan_list_tail_
Unexecuted instantiation: numeric.c:ccan_list_tail_
Unexecuted instantiation: object.c:ccan_list_tail_
Unexecuted instantiation: pack.c:ccan_list_tail_
Unexecuted instantiation: proc.c:ccan_list_tail_
Unexecuted instantiation: process.c:ccan_list_tail_
Unexecuted instantiation: ractor.c:ccan_list_tail_
Unexecuted instantiation: random.c:ccan_list_tail_
Unexecuted instantiation: rational.c:ccan_list_tail_
Unexecuted instantiation: re.c:ccan_list_tail_
Unexecuted instantiation: ruby.c:ccan_list_tail_
Unexecuted instantiation: scheduler.c:ccan_list_tail_
Unexecuted instantiation: set.c:ccan_list_tail_
Unexecuted instantiation: shape.c:ccan_list_tail_
Unexecuted instantiation: signal.c:ccan_list_tail_
Unexecuted instantiation: st.c:ccan_list_tail_
Unexecuted instantiation: string.c:ccan_list_tail_
Unexecuted instantiation: struct.c:ccan_list_tail_
Unexecuted instantiation: symbol.c:ccan_list_tail_
Unexecuted instantiation: thread.c:ccan_list_tail_
Unexecuted instantiation: time.c:ccan_list_tail_
Unexecuted instantiation: transcode.c:ccan_list_tail_
Unexecuted instantiation: variable.c:ccan_list_tail_
Unexecuted instantiation: version.c:ccan_list_tail_
Unexecuted instantiation: vm.c:ccan_list_tail_
Unexecuted instantiation: vm_backtrace.c:ccan_list_tail_
Unexecuted instantiation: vm_dump.c:ccan_list_tail_
Unexecuted instantiation: vm_sync.c:ccan_list_tail_
Unexecuted instantiation: vm_trace.c:ccan_list_tail_
Unexecuted instantiation: weakmap.c:ccan_list_tail_
Unexecuted instantiation: builtin.c:ccan_list_tail_
Unexecuted instantiation: ast.c:ccan_list_tail_
Unexecuted instantiation: box.c:ccan_list_tail_
Unexecuted instantiation: compile.c:ccan_list_tail_
Unexecuted instantiation: concurrent_set.c:ccan_list_tail_
Unexecuted instantiation: cont.c:ccan_list_tail_
Unexecuted instantiation: debug.c:ccan_list_tail_
Unexecuted instantiation: dir.c:ccan_list_tail_
Unexecuted instantiation: parse.c:ccan_list_tail_
455
456
/**
457
 * ccan_list_for_each - iterate through a list.
458
 * @h: the ccan_list_head (warning: evaluated multiple times!)
459
 * @i: the structure containing the ccan_list_node
460
 * @member: the ccan_list_node member of the structure
461
 *
462
 * This is a convenient wrapper to iterate @i over the entire list.  It's
463
 * a for loop, so you can break and continue as normal.
464
 *
465
 * Example:
466
 *  ccan_list_for_each(&parent->children, child, list)
467
 *    printf("Name: %s\n", child->name);
468
 */
469
#define ccan_list_for_each(h, i, member)          \
470
500k
  ccan_list_for_each_off(h, i, ccan_list_off_var_(i, member))
471
472
/**
473
 * ccan_list_for_each_rev - iterate through a list backwards.
474
 * @h: the ccan_list_head
475
 * @i: the structure containing the ccan_list_node
476
 * @member: the ccan_list_node member of the structure
477
 *
478
 * This is a convenient wrapper to iterate @i over the entire list.  It's
479
 * a for loop, so you can break and continue as normal.
480
 *
481
 * Example:
482
 *  ccan_list_for_each_rev(&parent->children, child, list)
483
 *    printf("Name: %s\n", child->name);
484
 */
485
#define ccan_list_for_each_rev(h, i, member)          \
486
  ccan_list_for_each_rev_off(h, i, ccan_list_off_var_(i, member))
487
488
/**
489
 * ccan_list_for_each_rev_safe - iterate through a list backwards,
490
 * maybe during deletion
491
 * @h: the ccan_list_head
492
 * @i: the structure containing the ccan_list_node
493
 * @nxt: the structure containing the ccan_list_node
494
 * @member: the ccan_list_node member of the structure
495
 *
496
 * This is a convenient wrapper to iterate @i over the entire list backwards.
497
 * It's a for loop, so you can break and continue as normal.  The extra
498
 * variable * @nxt is used to hold the next element, so you can delete @i
499
 * from the list.
500
 *
501
 * Example:
502
 *  struct child *next;
503
 *  ccan_list_for_each_rev_safe(&parent->children, child, next, list) {
504
 *    printf("Name: %s\n", child->name);
505
 *  }
506
 */
507
#define ccan_list_for_each_rev_safe(h, i, nxt, member)      \
508
  ccan_list_for_each_rev_safe_off(h, i, nxt, ccan_list_off_var_(i, member))
509
510
/**
511
 * ccan_list_for_each_safe - iterate through a list, maybe during deletion
512
 * @h: the ccan_list_head
513
 * @i: the structure containing the ccan_list_node
514
 * @nxt: the structure containing the ccan_list_node
515
 * @member: the ccan_list_node member of the structure
516
 *
517
 * This is a convenient wrapper to iterate @i over the entire list.  It's
518
 * a for loop, so you can break and continue as normal.  The extra variable
519
 * @nxt is used to hold the next element, so you can delete @i from the list.
520
 *
521
 * Example:
522
 *  ccan_list_for_each_safe(&parent->children, child, next, list) {
523
 *    ccan_list_del(&child->list);
524
 *    parent->num_children--;
525
 *  }
526
 */
527
#define ccan_list_for_each_safe(h, i, nxt, member)        \
528
0
  ccan_list_for_each_safe_off(h, i, nxt, ccan_list_off_var_(i, member))
529
530
/**
531
 * ccan_list_next - get the next entry in a list
532
 * @h: the ccan_list_head
533
 * @i: a pointer to an entry in the list.
534
 * @member: the ccan_list_node member of the structure
535
 *
536
 * If @i was the last entry in the list, returns NULL.
537
 *
538
 * Example:
539
 *  struct child *second;
540
 *  second = ccan_list_next(&parent->children, first, list);
541
 *  if (!second)
542
 *    printf("No second child!\n");
543
 */
544
#define ccan_list_next(h, i, member)            \
545
486k
  ((ccan_list_typeof(i))ccan_list_entry_or_null(ccan_list_debug(h,   \
546
486k
              __FILE__ ":" ccan_stringify(__LINE__)), \
547
486k
              (i)->member.next,   \
548
486k
              ccan_list_off_var_((i), member)))
549
550
/**
551
 * ccan_list_prev - get the previous entry in a list
552
 * @h: the ccan_list_head
553
 * @i: a pointer to an entry in the list.
554
 * @member: the ccan_list_node member of the structure
555
 *
556
 * If @i was the first entry in the list, returns NULL.
557
 *
558
 * Example:
559
 *  first = ccan_list_prev(&parent->children, second, list);
560
 *  if (!first)
561
 *    printf("Can't go back to first child?!\n");
562
 */
563
#define ccan_list_prev(h, i, member)            \
564
0
  ((ccan_list_typeof(i))ccan_list_entry_or_null(ccan_list_debug(h,   \
565
0
              __FILE__ ":" ccan_stringify(__LINE__)), \
566
0
              (i)->member.prev,   \
567
0
              ccan_list_off_var_((i), member)))
568
569
/**
570
 * ccan_list_append_list - empty one list onto the end of another.
571
 * @to: the list to append into
572
 * @from: the list to empty.
573
 *
574
 * This takes the entire contents of @from and moves it to the end of
575
 * @to.  After this @from will be empty.
576
 *
577
 * Example:
578
 *  struct ccan_list_head adopter;
579
 *
580
 *  ccan_list_append_list(&adopter, &parent->children);
581
 *  assert(ccan_list_empty(&parent->children));
582
 *  parent->num_children = 0;
583
 */
584
0
#define ccan_list_append_list(t, f) ccan_list_append_list_(t, f,      \
585
0
           __FILE__ ":" ccan_stringify(__LINE__))
586
static inline void ccan_list_append_list_(struct ccan_list_head *to,
587
             struct ccan_list_head *from,
588
             const char *abortstr)
589
0
{
590
0
  struct ccan_list_node *from_tail = ccan_list_debug(from, abortstr)->n.prev;
591
0
  struct ccan_list_node *to_tail = ccan_list_debug(to, abortstr)->n.prev;
592
593
  /* Sew in head and entire list. */
594
0
  to->n.prev = from_tail;
595
0
  from_tail->next = &to->n;
596
0
  to_tail->next = &from->n;
597
0
  from->n.prev = to_tail;
598
599
  /* Now remove head. */
600
0
  ccan_list_del(&from->n);
601
0
  ccan_list_head_init(from);
602
0
}
Unexecuted instantiation: array.c:ccan_list_append_list_
Unexecuted instantiation: bignum.c:ccan_list_append_list_
Unexecuted instantiation: class.c:ccan_list_append_list_
Unexecuted instantiation: complex.c:ccan_list_append_list_
Unexecuted instantiation: enumerator.c:ccan_list_append_list_
Unexecuted instantiation: error.c:ccan_list_append_list_
Unexecuted instantiation: eval.c:ccan_list_append_list_
Unexecuted instantiation: file.c:ccan_list_append_list_
Unexecuted instantiation: gc.c:ccan_list_append_list_
Unexecuted instantiation: hash.c:ccan_list_append_list_
Unexecuted instantiation: imemo.c:ccan_list_append_list_
Unexecuted instantiation: io.c:ccan_list_append_list_
Unexecuted instantiation: io_buffer.c:ccan_list_append_list_
Unexecuted instantiation: iseq.c:ccan_list_append_list_
Unexecuted instantiation: load.c:ccan_list_append_list_
Unexecuted instantiation: marshal.c:ccan_list_append_list_
Unexecuted instantiation: memory_view.c:ccan_list_append_list_
Unexecuted instantiation: node.c:ccan_list_append_list_
Unexecuted instantiation: node_dump.c:ccan_list_append_list_
Unexecuted instantiation: numeric.c:ccan_list_append_list_
Unexecuted instantiation: object.c:ccan_list_append_list_
Unexecuted instantiation: pack.c:ccan_list_append_list_
Unexecuted instantiation: proc.c:ccan_list_append_list_
Unexecuted instantiation: process.c:ccan_list_append_list_
Unexecuted instantiation: ractor.c:ccan_list_append_list_
Unexecuted instantiation: random.c:ccan_list_append_list_
Unexecuted instantiation: rational.c:ccan_list_append_list_
Unexecuted instantiation: re.c:ccan_list_append_list_
Unexecuted instantiation: ruby.c:ccan_list_append_list_
Unexecuted instantiation: scheduler.c:ccan_list_append_list_
Unexecuted instantiation: set.c:ccan_list_append_list_
Unexecuted instantiation: shape.c:ccan_list_append_list_
Unexecuted instantiation: signal.c:ccan_list_append_list_
Unexecuted instantiation: st.c:ccan_list_append_list_
Unexecuted instantiation: string.c:ccan_list_append_list_
Unexecuted instantiation: struct.c:ccan_list_append_list_
Unexecuted instantiation: symbol.c:ccan_list_append_list_
Unexecuted instantiation: thread.c:ccan_list_append_list_
Unexecuted instantiation: time.c:ccan_list_append_list_
Unexecuted instantiation: transcode.c:ccan_list_append_list_
Unexecuted instantiation: variable.c:ccan_list_append_list_
Unexecuted instantiation: version.c:ccan_list_append_list_
Unexecuted instantiation: vm.c:ccan_list_append_list_
Unexecuted instantiation: vm_backtrace.c:ccan_list_append_list_
Unexecuted instantiation: vm_dump.c:ccan_list_append_list_
Unexecuted instantiation: vm_sync.c:ccan_list_append_list_
Unexecuted instantiation: vm_trace.c:ccan_list_append_list_
Unexecuted instantiation: weakmap.c:ccan_list_append_list_
Unexecuted instantiation: builtin.c:ccan_list_append_list_
Unexecuted instantiation: ast.c:ccan_list_append_list_
Unexecuted instantiation: box.c:ccan_list_append_list_
Unexecuted instantiation: compile.c:ccan_list_append_list_
Unexecuted instantiation: concurrent_set.c:ccan_list_append_list_
Unexecuted instantiation: cont.c:ccan_list_append_list_
Unexecuted instantiation: debug.c:ccan_list_append_list_
Unexecuted instantiation: dir.c:ccan_list_append_list_
Unexecuted instantiation: parse.c:ccan_list_append_list_
603
604
/**
605
 * ccan_list_prepend_list - empty one list into the start of another.
606
 * @to: the list to prepend into
607
 * @from: the list to empty.
608
 *
609
 * This takes the entire contents of @from and moves it to the start
610
 * of @to.  After this @from will be empty.
611
 *
612
 * Example:
613
 *  ccan_list_prepend_list(&adopter, &parent->children);
614
 *  assert(ccan_list_empty(&parent->children));
615
 *  parent->num_children = 0;
616
 */
617
0
#define ccan_list_prepend_list(t, f) ccan_list_prepend_list_(t, f, CCAN_LIST_LOC)
618
static inline void ccan_list_prepend_list_(struct ccan_list_head *to,
619
              struct ccan_list_head *from,
620
              const char *abortstr)
621
0
{
622
0
  struct ccan_list_node *from_tail = ccan_list_debug(from, abortstr)->n.prev;
623
0
  struct ccan_list_node *to_head = ccan_list_debug(to, abortstr)->n.next;
624
625
  /* Sew in head and entire list. */
626
0
  to->n.next = &from->n;
627
0
  from->n.prev = &to->n;
628
0
  to_head->prev = from_tail;
629
0
  from_tail->next = to_head;
630
631
  /* Now remove head. */
632
0
  ccan_list_del(&from->n);
633
0
  ccan_list_head_init(from);
634
0
}
Unexecuted instantiation: array.c:ccan_list_prepend_list_
Unexecuted instantiation: bignum.c:ccan_list_prepend_list_
Unexecuted instantiation: class.c:ccan_list_prepend_list_
Unexecuted instantiation: complex.c:ccan_list_prepend_list_
Unexecuted instantiation: enumerator.c:ccan_list_prepend_list_
Unexecuted instantiation: error.c:ccan_list_prepend_list_
Unexecuted instantiation: eval.c:ccan_list_prepend_list_
Unexecuted instantiation: file.c:ccan_list_prepend_list_
Unexecuted instantiation: gc.c:ccan_list_prepend_list_
Unexecuted instantiation: hash.c:ccan_list_prepend_list_
Unexecuted instantiation: imemo.c:ccan_list_prepend_list_
Unexecuted instantiation: io.c:ccan_list_prepend_list_
Unexecuted instantiation: io_buffer.c:ccan_list_prepend_list_
Unexecuted instantiation: iseq.c:ccan_list_prepend_list_
Unexecuted instantiation: load.c:ccan_list_prepend_list_
Unexecuted instantiation: marshal.c:ccan_list_prepend_list_
Unexecuted instantiation: memory_view.c:ccan_list_prepend_list_
Unexecuted instantiation: node.c:ccan_list_prepend_list_
Unexecuted instantiation: node_dump.c:ccan_list_prepend_list_
Unexecuted instantiation: numeric.c:ccan_list_prepend_list_
Unexecuted instantiation: object.c:ccan_list_prepend_list_
Unexecuted instantiation: pack.c:ccan_list_prepend_list_
Unexecuted instantiation: proc.c:ccan_list_prepend_list_
Unexecuted instantiation: process.c:ccan_list_prepend_list_
Unexecuted instantiation: ractor.c:ccan_list_prepend_list_
Unexecuted instantiation: random.c:ccan_list_prepend_list_
Unexecuted instantiation: rational.c:ccan_list_prepend_list_
Unexecuted instantiation: re.c:ccan_list_prepend_list_
Unexecuted instantiation: ruby.c:ccan_list_prepend_list_
Unexecuted instantiation: scheduler.c:ccan_list_prepend_list_
Unexecuted instantiation: set.c:ccan_list_prepend_list_
Unexecuted instantiation: shape.c:ccan_list_prepend_list_
Unexecuted instantiation: signal.c:ccan_list_prepend_list_
Unexecuted instantiation: st.c:ccan_list_prepend_list_
Unexecuted instantiation: string.c:ccan_list_prepend_list_
Unexecuted instantiation: struct.c:ccan_list_prepend_list_
Unexecuted instantiation: symbol.c:ccan_list_prepend_list_
Unexecuted instantiation: thread.c:ccan_list_prepend_list_
Unexecuted instantiation: time.c:ccan_list_prepend_list_
Unexecuted instantiation: transcode.c:ccan_list_prepend_list_
Unexecuted instantiation: variable.c:ccan_list_prepend_list_
Unexecuted instantiation: version.c:ccan_list_prepend_list_
Unexecuted instantiation: vm.c:ccan_list_prepend_list_
Unexecuted instantiation: vm_backtrace.c:ccan_list_prepend_list_
Unexecuted instantiation: vm_dump.c:ccan_list_prepend_list_
Unexecuted instantiation: vm_sync.c:ccan_list_prepend_list_
Unexecuted instantiation: vm_trace.c:ccan_list_prepend_list_
Unexecuted instantiation: weakmap.c:ccan_list_prepend_list_
Unexecuted instantiation: builtin.c:ccan_list_prepend_list_
Unexecuted instantiation: ast.c:ccan_list_prepend_list_
Unexecuted instantiation: box.c:ccan_list_prepend_list_
Unexecuted instantiation: compile.c:ccan_list_prepend_list_
Unexecuted instantiation: concurrent_set.c:ccan_list_prepend_list_
Unexecuted instantiation: cont.c:ccan_list_prepend_list_
Unexecuted instantiation: debug.c:ccan_list_prepend_list_
Unexecuted instantiation: dir.c:ccan_list_prepend_list_
Unexecuted instantiation: parse.c:ccan_list_prepend_list_
635
636
/* internal macros, do not use directly */
637
#define ccan_list_for_each_off_dir_(h, i, off, dir)       \
638
500k
  for (i = 0, \
639
500k
       i = ccan_list_node_to_off_(ccan_list_debug(h, CCAN_LIST_LOC)->n.dir, \
640
500k
           (off));        \
641
1.07M
  ccan_list_node_from_off_((void *)i, (off)) != &(h)->n;   \
642
577k
  i = ccan_list_node_to_off_(ccan_list_node_from_off_((void *)i, (off))->dir, \
643
577k
            (off)))
644
645
#define ccan_list_for_each_safe_off_dir_(h, i, nxt, off, dir)   \
646
0
  for (i = 0, \
647
0
       i = ccan_list_node_to_off_(ccan_list_debug(h, CCAN_LIST_LOC)->n.dir, \
648
0
           (off)),        \
649
0
  nxt = ccan_list_node_to_off_(ccan_list_node_from_off_(i, (off))->dir, \
650
0
        (off));         \
651
0
  ccan_list_node_from_off_(i, (off)) != &(h)->n;     \
652
0
  i = nxt,              \
653
0
  nxt = ccan_list_node_to_off_(ccan_list_node_from_off_(i, (off))->dir, \
654
0
        (off)))
655
656
/**
657
 * ccan_list_for_each_off - iterate through a list of memory regions.
658
 * @h: the ccan_list_head
659
 * @i: the pointer to a memory region which contains list node data.
660
 * @off: offset(relative to @i) at which list node data resides.
661
 *
662
 * This is a low-level wrapper to iterate @i over the entire list, used to
663
 * implement all other, more high-level, for-each constructs. It's a for loop,
664
 * so you can break and continue as normal.
665
 *
666
 * WARNING! Being the low-level macro that it is, this wrapper doesn't know
667
 * nor care about the type of @i. The only assumption made is that @i points
668
 * to a chunk of memory that at some @offset, relative to @i, contains a
669
 * properly filled `struct ccan_list_node' which in turn contains pointers to
670
 * memory chunks and it's turtles all the way down. With all that in mind
671
 * remember that given the wrong pointer/offset couple this macro will
672
 * happily churn all you memory until SEGFAULT stops it, in other words
673
 * caveat emptor.
674
 *
675
 * It is worth mentioning that one of legitimate use-cases for that wrapper
676
 * is operation on opaque types with known offset for `struct ccan_list_node'
677
 * member(preferably 0), because it allows you not to disclose the type of
678
 * @i.
679
 *
680
 * Example:
681
 *  ccan_list_for_each_off(&parent->children, child,
682
 *        offsetof(struct child, list))
683
 *    printf("Name: %s\n", child->name);
684
 */
685
#define ccan_list_for_each_off(h, i, off)                                    \
686
500k
  ccan_list_for_each_off_dir_((h),(i),(off),next)
687
688
/**
689
 * ccan_list_for_each_rev_off - iterate through a list of memory regions backwards
690
 * @h: the ccan_list_head
691
 * @i: the pointer to a memory region which contains list node data.
692
 * @off: offset(relative to @i) at which list node data resides.
693
 *
694
 * See ccan_list_for_each_off for details
695
 */
696
#define ccan_list_for_each_rev_off(h, i, off)                                    \
697
  ccan_list_for_each_off_dir_((h),(i),(off),prev)
698
699
/**
700
 * ccan_list_for_each_safe_off - iterate through a list of memory regions, maybe
701
 * during deletion
702
 * @h: the ccan_list_head
703
 * @i: the pointer to a memory region which contains list node data.
704
 * @nxt: the structure containing the ccan_list_node
705
 * @off: offset(relative to @i) at which list node data resides.
706
 *
707
 * For details see `ccan_list_for_each_off' and `ccan_list_for_each_safe'
708
 * descriptions.
709
 *
710
 * Example:
711
 *  ccan_list_for_each_safe_off(&parent->children, child,
712
 *    next, offsetof(struct child, list))
713
 *    printf("Name: %s\n", child->name);
714
 */
715
#define ccan_list_for_each_safe_off(h, i, nxt, off)                          \
716
0
  ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
717
718
/**
719
 * ccan_list_for_each_rev_safe_off - iterate backwards through a list of
720
 * memory regions, maybe during deletion
721
 * @h: the ccan_list_head
722
 * @i: the pointer to a memory region which contains list node data.
723
 * @nxt: the structure containing the ccan_list_node
724
 * @off: offset(relative to @i) at which list node data resides.
725
 *
726
 * For details see `ccan_list_for_each_rev_off' and `ccan_list_for_each_rev_safe'
727
 * descriptions.
728
 *
729
 * Example:
730
 *  ccan_list_for_each_rev_safe_off(&parent->children, child,
731
 *    next, offsetof(struct child, list))
732
 *    printf("Name: %s\n", child->name);
733
 */
734
#define ccan_list_for_each_rev_safe_off(h, i, nxt, off)                      \
735
  ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
736
737
/* Other -off variants. */
738
#define ccan_list_entry_off(n, type, off)   \
739
  ((type *)ccan_list_node_from_off_((n), (off)))
740
741
#define ccan_list_head_off(h, type, off)    \
742
  ((type *)ccan_list_head_off((h), (off)))
743
744
#define ccan_list_tail_off(h, type, off)    \
745
  ((type *)ccan_list_tail_((h), (off)))
746
747
#define ccan_list_add_off(h, n, off)                 \
748
  ccan_list_add((h), ccan_list_node_from_off_((n), (off)))
749
750
#define ccan_list_del_off(n, off)                    \
751
  ccan_list_del(ccan_list_node_from_off_((n), (off)))
752
753
#define ccan_list_del_from_off(h, n, off)     \
754
  ccan_list_del_from(h, ccan_list_node_from_off_((n), (off)))
755
756
/* Offset helper functions so we only single-evaluate. */
757
static inline void *ccan_list_node_to_off_(struct ccan_list_node *node, size_t off)
758
1.07M
{
759
1.07M
  return (void *)((char *)node - off);
760
1.07M
}
Unexecuted instantiation: array.c:ccan_list_node_to_off_
Unexecuted instantiation: bignum.c:ccan_list_node_to_off_
Unexecuted instantiation: class.c:ccan_list_node_to_off_
Unexecuted instantiation: complex.c:ccan_list_node_to_off_
Unexecuted instantiation: enumerator.c:ccan_list_node_to_off_
Unexecuted instantiation: error.c:ccan_list_node_to_off_
Unexecuted instantiation: eval.c:ccan_list_node_to_off_
Unexecuted instantiation: file.c:ccan_list_node_to_off_
gc.c:ccan_list_node_to_off_
Line
Count
Source
758
714k
{
759
714k
  return (void *)((char *)node - off);
760
714k
}
Unexecuted instantiation: hash.c:ccan_list_node_to_off_
Unexecuted instantiation: imemo.c:ccan_list_node_to_off_
Unexecuted instantiation: io.c:ccan_list_node_to_off_
Unexecuted instantiation: io_buffer.c:ccan_list_node_to_off_
Unexecuted instantiation: iseq.c:ccan_list_node_to_off_
Unexecuted instantiation: load.c:ccan_list_node_to_off_
Unexecuted instantiation: marshal.c:ccan_list_node_to_off_
Unexecuted instantiation: memory_view.c:ccan_list_node_to_off_
Unexecuted instantiation: node.c:ccan_list_node_to_off_
Unexecuted instantiation: node_dump.c:ccan_list_node_to_off_
Unexecuted instantiation: numeric.c:ccan_list_node_to_off_
Unexecuted instantiation: object.c:ccan_list_node_to_off_
Unexecuted instantiation: pack.c:ccan_list_node_to_off_
Unexecuted instantiation: proc.c:ccan_list_node_to_off_
Unexecuted instantiation: process.c:ccan_list_node_to_off_
ractor.c:ccan_list_node_to_off_
Line
Count
Source
758
227k
{
759
227k
  return (void *)((char *)node - off);
760
227k
}
Unexecuted instantiation: random.c:ccan_list_node_to_off_
Unexecuted instantiation: rational.c:ccan_list_node_to_off_
Unexecuted instantiation: re.c:ccan_list_node_to_off_
Unexecuted instantiation: ruby.c:ccan_list_node_to_off_
Unexecuted instantiation: scheduler.c:ccan_list_node_to_off_
Unexecuted instantiation: set.c:ccan_list_node_to_off_
Unexecuted instantiation: shape.c:ccan_list_node_to_off_
Unexecuted instantiation: signal.c:ccan_list_node_to_off_
Unexecuted instantiation: st.c:ccan_list_node_to_off_
Unexecuted instantiation: string.c:ccan_list_node_to_off_
Unexecuted instantiation: struct.c:ccan_list_node_to_off_
Unexecuted instantiation: symbol.c:ccan_list_node_to_off_
thread.c:ccan_list_node_to_off_
Line
Count
Source
758
45.5k
{
759
45.5k
  return (void *)((char *)node - off);
760
45.5k
}
Unexecuted instantiation: time.c:ccan_list_node_to_off_
Unexecuted instantiation: transcode.c:ccan_list_node_to_off_
Unexecuted instantiation: variable.c:ccan_list_node_to_off_
Unexecuted instantiation: version.c:ccan_list_node_to_off_
vm.c:ccan_list_node_to_off_
Line
Count
Source
758
91.0k
{
759
91.0k
  return (void *)((char *)node - off);
760
91.0k
}
Unexecuted instantiation: vm_backtrace.c:ccan_list_node_to_off_
Unexecuted instantiation: vm_dump.c:ccan_list_node_to_off_
Unexecuted instantiation: vm_sync.c:ccan_list_node_to_off_
Unexecuted instantiation: vm_trace.c:ccan_list_node_to_off_
Unexecuted instantiation: weakmap.c:ccan_list_node_to_off_
Unexecuted instantiation: builtin.c:ccan_list_node_to_off_
Unexecuted instantiation: ast.c:ccan_list_node_to_off_
Unexecuted instantiation: box.c:ccan_list_node_to_off_
Unexecuted instantiation: compile.c:ccan_list_node_to_off_
Unexecuted instantiation: concurrent_set.c:ccan_list_node_to_off_
Unexecuted instantiation: cont.c:ccan_list_node_to_off_
Unexecuted instantiation: debug.c:ccan_list_node_to_off_
Unexecuted instantiation: dir.c:ccan_list_node_to_off_
Unexecuted instantiation: parse.c:ccan_list_node_to_off_
761
static inline struct ccan_list_node *ccan_list_node_from_off_(void *ptr, size_t off)
762
1.65M
{
763
1.65M
  return (struct ccan_list_node *)((char *)ptr + off);
764
1.65M
}
Unexecuted instantiation: array.c:ccan_list_node_from_off_
Unexecuted instantiation: bignum.c:ccan_list_node_from_off_
Unexecuted instantiation: class.c:ccan_list_node_from_off_
Unexecuted instantiation: complex.c:ccan_list_node_from_off_
Unexecuted instantiation: enumerator.c:ccan_list_node_from_off_
Unexecuted instantiation: error.c:ccan_list_node_from_off_
Unexecuted instantiation: eval.c:ccan_list_node_from_off_
Unexecuted instantiation: file.c:ccan_list_node_from_off_
gc.c:ccan_list_node_from_off_
Line
Count
Source
762
1.20M
{
763
1.20M
  return (struct ccan_list_node *)((char *)ptr + off);
764
1.20M
}
Unexecuted instantiation: hash.c:ccan_list_node_from_off_
Unexecuted instantiation: imemo.c:ccan_list_node_from_off_
Unexecuted instantiation: io.c:ccan_list_node_from_off_
Unexecuted instantiation: io_buffer.c:ccan_list_node_from_off_
Unexecuted instantiation: iseq.c:ccan_list_node_from_off_
Unexecuted instantiation: load.c:ccan_list_node_from_off_
Unexecuted instantiation: marshal.c:ccan_list_node_from_off_
Unexecuted instantiation: memory_view.c:ccan_list_node_from_off_
Unexecuted instantiation: node.c:ccan_list_node_from_off_
Unexecuted instantiation: node_dump.c:ccan_list_node_from_off_
Unexecuted instantiation: numeric.c:ccan_list_node_from_off_
Unexecuted instantiation: object.c:ccan_list_node_from_off_
Unexecuted instantiation: pack.c:ccan_list_node_from_off_
Unexecuted instantiation: proc.c:ccan_list_node_from_off_
Unexecuted instantiation: process.c:ccan_list_node_from_off_
ractor.c:ccan_list_node_from_off_
Line
Count
Source
762
273k
{
763
273k
  return (struct ccan_list_node *)((char *)ptr + off);
764
273k
}
Unexecuted instantiation: random.c:ccan_list_node_from_off_
Unexecuted instantiation: rational.c:ccan_list_node_from_off_
Unexecuted instantiation: re.c:ccan_list_node_from_off_
Unexecuted instantiation: ruby.c:ccan_list_node_from_off_
Unexecuted instantiation: scheduler.c:ccan_list_node_from_off_
Unexecuted instantiation: set.c:ccan_list_node_from_off_
Unexecuted instantiation: shape.c:ccan_list_node_from_off_
Unexecuted instantiation: signal.c:ccan_list_node_from_off_
Unexecuted instantiation: st.c:ccan_list_node_from_off_
Unexecuted instantiation: string.c:ccan_list_node_from_off_
Unexecuted instantiation: struct.c:ccan_list_node_from_off_
Unexecuted instantiation: symbol.c:ccan_list_node_from_off_
thread.c:ccan_list_node_from_off_
Line
Count
Source
762
45.5k
{
763
45.5k
  return (struct ccan_list_node *)((char *)ptr + off);
764
45.5k
}
Unexecuted instantiation: time.c:ccan_list_node_from_off_
Unexecuted instantiation: transcode.c:ccan_list_node_from_off_
Unexecuted instantiation: variable.c:ccan_list_node_from_off_
Unexecuted instantiation: version.c:ccan_list_node_from_off_
vm.c:ccan_list_node_from_off_
Line
Count
Source
762
136k
{
763
136k
  return (struct ccan_list_node *)((char *)ptr + off);
764
136k
}
Unexecuted instantiation: vm_backtrace.c:ccan_list_node_from_off_
Unexecuted instantiation: vm_dump.c:ccan_list_node_from_off_
Unexecuted instantiation: vm_sync.c:ccan_list_node_from_off_
Unexecuted instantiation: vm_trace.c:ccan_list_node_from_off_
Unexecuted instantiation: weakmap.c:ccan_list_node_from_off_
Unexecuted instantiation: builtin.c:ccan_list_node_from_off_
Unexecuted instantiation: ast.c:ccan_list_node_from_off_
Unexecuted instantiation: box.c:ccan_list_node_from_off_
Unexecuted instantiation: compile.c:ccan_list_node_from_off_
Unexecuted instantiation: concurrent_set.c:ccan_list_node_from_off_
Unexecuted instantiation: cont.c:ccan_list_node_from_off_
Unexecuted instantiation: debug.c:ccan_list_node_from_off_
Unexecuted instantiation: dir.c:ccan_list_node_from_off_
Unexecuted instantiation: parse.c:ccan_list_node_from_off_
765
766
/* Get the offset of the member, but make sure it's a ccan_list_node. */
767
#define ccan_list_off_(type, member)          \
768
227k
  (ccan_container_off(type, member) +        \
769
227k
   ccan_check_type(((type *)0)->member, struct ccan_list_node))
770
771
#define ccan_list_off_var_(var, member)     \
772
486k
  (ccan_container_off_var(var, member) +   \
773
486k
   ccan_check_type(var->member, struct ccan_list_node))
774
775
#if defined(HAVE_TYPEOF) && HAVE_TYPEOF
776
#define ccan_list_typeof(var) typeof(var)
777
#else
778
#define ccan_list_typeof(var) void *
779
#endif
780
781
/* Returns member, or NULL if at end of list. */
782
static inline void *ccan_list_entry_or_null(const struct ccan_list_head *h,
783
               const struct ccan_list_node *n,
784
               size_t off)
785
486k
{
786
486k
  if (n == &h->n)
787
177k
    return NULL;
788
309k
  return (char *)n - off;
789
486k
}
Unexecuted instantiation: array.c:ccan_list_entry_or_null
Unexecuted instantiation: bignum.c:ccan_list_entry_or_null
Unexecuted instantiation: class.c:ccan_list_entry_or_null
Unexecuted instantiation: complex.c:ccan_list_entry_or_null
Unexecuted instantiation: enumerator.c:ccan_list_entry_or_null
Unexecuted instantiation: error.c:ccan_list_entry_or_null
Unexecuted instantiation: eval.c:ccan_list_entry_or_null
Unexecuted instantiation: file.c:ccan_list_entry_or_null
gc.c:ccan_list_entry_or_null
Line
Count
Source
785
486k
{
786
486k
  if (n == &h->n)
787
177k
    return NULL;
788
309k
  return (char *)n - off;
789
486k
}
Unexecuted instantiation: hash.c:ccan_list_entry_or_null
Unexecuted instantiation: imemo.c:ccan_list_entry_or_null
Unexecuted instantiation: io.c:ccan_list_entry_or_null
Unexecuted instantiation: io_buffer.c:ccan_list_entry_or_null
Unexecuted instantiation: iseq.c:ccan_list_entry_or_null
Unexecuted instantiation: load.c:ccan_list_entry_or_null
Unexecuted instantiation: marshal.c:ccan_list_entry_or_null
Unexecuted instantiation: memory_view.c:ccan_list_entry_or_null
Unexecuted instantiation: node.c:ccan_list_entry_or_null
Unexecuted instantiation: node_dump.c:ccan_list_entry_or_null
Unexecuted instantiation: numeric.c:ccan_list_entry_or_null
Unexecuted instantiation: object.c:ccan_list_entry_or_null
Unexecuted instantiation: pack.c:ccan_list_entry_or_null
Unexecuted instantiation: proc.c:ccan_list_entry_or_null
Unexecuted instantiation: process.c:ccan_list_entry_or_null
Unexecuted instantiation: ractor.c:ccan_list_entry_or_null
Unexecuted instantiation: random.c:ccan_list_entry_or_null
Unexecuted instantiation: rational.c:ccan_list_entry_or_null
Unexecuted instantiation: re.c:ccan_list_entry_or_null
Unexecuted instantiation: ruby.c:ccan_list_entry_or_null
Unexecuted instantiation: scheduler.c:ccan_list_entry_or_null
Unexecuted instantiation: set.c:ccan_list_entry_or_null
Unexecuted instantiation: shape.c:ccan_list_entry_or_null
Unexecuted instantiation: signal.c:ccan_list_entry_or_null
Unexecuted instantiation: st.c:ccan_list_entry_or_null
Unexecuted instantiation: string.c:ccan_list_entry_or_null
Unexecuted instantiation: struct.c:ccan_list_entry_or_null
Unexecuted instantiation: symbol.c:ccan_list_entry_or_null
Unexecuted instantiation: thread.c:ccan_list_entry_or_null
Unexecuted instantiation: time.c:ccan_list_entry_or_null
Unexecuted instantiation: transcode.c:ccan_list_entry_or_null
Unexecuted instantiation: variable.c:ccan_list_entry_or_null
Unexecuted instantiation: version.c:ccan_list_entry_or_null
Unexecuted instantiation: vm.c:ccan_list_entry_or_null
Unexecuted instantiation: vm_backtrace.c:ccan_list_entry_or_null
Unexecuted instantiation: vm_dump.c:ccan_list_entry_or_null
Unexecuted instantiation: vm_sync.c:ccan_list_entry_or_null
Unexecuted instantiation: vm_trace.c:ccan_list_entry_or_null
Unexecuted instantiation: weakmap.c:ccan_list_entry_or_null
Unexecuted instantiation: builtin.c:ccan_list_entry_or_null
Unexecuted instantiation: ast.c:ccan_list_entry_or_null
Unexecuted instantiation: box.c:ccan_list_entry_or_null
Unexecuted instantiation: compile.c:ccan_list_entry_or_null
Unexecuted instantiation: concurrent_set.c:ccan_list_entry_or_null
Unexecuted instantiation: cont.c:ccan_list_entry_or_null
Unexecuted instantiation: debug.c:ccan_list_entry_or_null
Unexecuted instantiation: dir.c:ccan_list_entry_or_null
Unexecuted instantiation: parse.c:ccan_list_entry_or_null
790
791
#endif /* CCAN_LIST_H */