Skip to content

Commit fc8fe78

Browse files
committed
Merge two node_buffer_list_t fields into one
All types of Node are managed by `node_buffer_list_t unmarkable` therefore merge them into `node_buffer_list_t buffer_list`.
1 parent 3a674c9 commit fc8fe78

File tree

2 files changed

+16
-21
lines changed

2 files changed

+16
-21
lines changed

node.c

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ init_node_buffer_elem(node_buffer_elem_t *nbe, size_t allocated, void *xmalloc(s
3939
}
4040

4141
static void
42-
init_node_buffer_list(node_buffer_list_t * nb, node_buffer_elem_t *head, void *xmalloc(size_t))
42+
init_node_buffer_list(node_buffer_list_t *nb, node_buffer_elem_t *head, void *xmalloc(size_t))
4343
{
4444
init_node_buffer_elem(head, NODE_BUF_DEFAULT_SIZE, xmalloc);
4545
nb->head = nb->last = head;
@@ -59,14 +59,13 @@ rb_node_buffer_new(void)
5959
#endif
6060
{
6161
const size_t bucket_size = offsetof(node_buffer_elem_t, buf) + NODE_BUF_DEFAULT_SIZE;
62-
const size_t alloc_size = sizeof(node_buffer_t) + (bucket_size * 2);
62+
const size_t alloc_size = sizeof(node_buffer_t) + (bucket_size);
6363
STATIC_ASSERT(
6464
integer_overflow,
6565
offsetof(node_buffer_elem_t, buf) + NODE_BUF_DEFAULT_SIZE
66-
> sizeof(node_buffer_t) + 2 * sizeof(node_buffer_elem_t));
66+
> sizeof(node_buffer_t) + sizeof(node_buffer_elem_t));
6767
node_buffer_t *nb = ruby_xmalloc(alloc_size);
68-
init_node_buffer_list(&nb->unmarkable, (node_buffer_elem_t*)&nb[1], ruby_xmalloc);
69-
init_node_buffer_list(&nb->markable, (node_buffer_elem_t*)((size_t)nb->unmarkable.head + bucket_size), ruby_xmalloc);
68+
init_node_buffer_list(&nb->buffer_list, (node_buffer_elem_t*)&nb[1], ruby_xmalloc);
7069
nb->local_tables = 0;
7170
nb->tokens = 0;
7271
#ifdef UNIVERSAL_PARSER
@@ -238,9 +237,8 @@ rb_node_buffer_free(rb_ast_t *ast, node_buffer_t *nb)
238237
if (ast->node_buffer && ast->node_buffer->tokens) {
239238
parser_tokens_free(ast, ast->node_buffer->tokens);
240239
}
241-
iterate_node_values(ast, &nb->unmarkable, free_ast_value, NULL);
242-
node_buffer_list_free(ast, &nb->unmarkable);
243-
node_buffer_list_free(ast, &nb->markable);
240+
iterate_node_values(ast, &nb->buffer_list, free_ast_value, NULL);
241+
node_buffer_list_free(ast, &nb->buffer_list);
244242
struct rb_ast_local_table_link *local_table = nb->local_tables;
245243
while (local_table) {
246244
struct rb_ast_local_table_link *next_table = local_table->next;
@@ -277,23 +275,22 @@ ast_newnode_in_bucket(rb_ast_t *ast, node_buffer_list_t *nb, size_t size, size_t
277275
return ptr;
278276
}
279277

280-
RBIMPL_ATTR_PURE()
281-
static bool
282-
nodetype_markable_p(enum node_type type)
283-
{
284-
return false;
285-
}
286-
287278
NODE *
288279
rb_ast_newnode(rb_ast_t *ast, enum node_type type, size_t size, size_t alignment)
289280
{
290281
node_buffer_t *nb = ast->node_buffer;
291-
node_buffer_list_t *bucket =
292-
(nodetype_markable_p(type) ? &nb->markable : &nb->unmarkable);
282+
node_buffer_list_t *bucket = &nb->buffer_list;
293283
return ast_newnode_in_bucket(ast, bucket, size, alignment);
294284
}
295285

296286
#if RUBY_DEBUG
287+
RBIMPL_ATTR_PURE()
288+
static bool
289+
nodetype_markable_p(enum node_type type)
290+
{
291+
return false;
292+
}
293+
297294
void
298295
rb_ast_node_type_change(NODE *n, enum node_type type)
299296
{
@@ -410,8 +407,7 @@ rb_ast_memsize(const rb_ast_t *ast)
410407

411408
if (nb) {
412409
size += sizeof(node_buffer_t);
413-
size += buffer_list_size(&nb->unmarkable);
414-
size += buffer_list_size(&nb->markable);
410+
size += buffer_list_size(&nb->buffer_list);
415411
}
416412
return size;
417413
}

node.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ typedef struct {
3131
} node_buffer_list_t;
3232

3333
struct node_buffer_struct {
34-
node_buffer_list_t unmarkable;
35-
node_buffer_list_t markable;
34+
node_buffer_list_t buffer_list;
3635
struct rb_ast_local_table_link *local_tables;
3736
// - id (sequence number)
3837
// - token_type

0 commit comments

Comments
 (0)