Skip to content

Commit 08e03af

Browse files
committed
Embed vm->overloaded_cme_table
1 parent caef124 commit 08e03af

7 files changed

Lines changed: 24 additions & 15 deletions

File tree

gc.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4204,14 +4204,12 @@ rb_gc_vm_weak_table_foreach(vm_table_foreach_callback_func callback,
42044204
break;
42054205
}
42064206
case RB_GC_VM_OVERLOADED_CME_TABLE: {
4207-
if (vm->overloaded_cme_table) {
4208-
st_foreach_with_replace(
4209-
vm->overloaded_cme_table,
4210-
vm_weak_table_foreach_weak_key,
4211-
vm_weak_table_foreach_update_weak_key,
4212-
(st_data_t)&foreach_data
4213-
);
4214-
}
4207+
st_foreach_with_replace(
4208+
&vm->overloaded_cme_table,
4209+
vm_weak_table_foreach_weak_key,
4210+
vm_weak_table_foreach_update_weak_key,
4211+
(st_data_t)&foreach_data
4212+
);
42154213
break;
42164214
}
42174215
case RB_GC_VM_GLOBAL_SYMBOLS_TABLE: {

internal/st.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ st_table *rb_st_replace(st_table *new_tab, st_table *old_tab);
88
st_table *rb_st_init_existing_table_with_size(st_table *tab, const struct st_hash_type *type, st_index_t size);
99
#define st_init_existing_table_with_size rb_st_init_existing_table_with_size
1010

11+
st_table *rb_st_init_existing_numtable_with_size(st_table *tab, st_index_t size);
12+
#define st_init_existing_numtable_with_size rb_st_init_existing_numtable_with_size
13+
1114
void rb_st_free_embedded_table(st_table *tab);
1215
#define st_free_embedded_table rb_st_free_embedded_table
1316

parser_st.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ nonempty_memcpy(void *dest, const void *src, size_t n)
8080
#define st_init_table_with_size rb_parser_st_init_table_with_size
8181
#undef st_init_existing_table_with_size
8282
#define st_init_existing_table_with_size rb_parser_st_init_existing_table_with_size
83+
#undef st_init_existing_numtable_with_size
84+
#define st_init_existing_numtable_with_size rb_parser_st_init_existing_numtable_with_size
8385
#undef st_free_embedded_table
8486
#define st_free_embedded_table rb_parser_st_free_embedded_table
8587
#undef st_insert

st.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,12 @@ st_init_existing_table_with_size(st_table *tab, const struct st_hash_type *type,
577577
return tab;
578578
}
579579

580+
st_table *
581+
st_init_existing_numtable_with_size(st_table *tab, st_index_t size)
582+
{
583+
return st_init_existing_table_with_size(tab, &type_numhash, size);
584+
}
585+
580586
/* Create and return table with TYPE which can hold at least SIZE
581587
entries. The real number of entries which the table can hold is
582588
the nearest power of two for SIZE. */

vm.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "internal/proc.h"
2727
#include "internal/re.h"
2828
#include "internal/ruby_parser.h"
29+
#include "internal/st.h"
2930
#include "internal/symbol.h"
3031
#include "internal/thread.h"
3132
#include "internal/transcode.h"
@@ -3332,7 +3333,7 @@ rb_vm_mark(void *ptr)
33323333
rb_hook_list_mark(&vm->global_hooks);
33333334

33343335
rb_id_table_foreach_values(&vm->negative_cme_table, vm_mark_negative_cme, NULL);
3335-
rb_mark_tbl_no_pin(vm->overloaded_cme_table);
3336+
rb_mark_tbl_no_pin(&vm->overloaded_cme_table);
33363337
for (i=0; i<VM_GLOBAL_CC_CACHE_TABLE_SIZE; i++) {
33373338
const struct rb_callcache *cc = vm->global_cc_cache_table[i];
33383339

@@ -3387,7 +3388,7 @@ ruby_vm_destruct(rb_vm_t *vm)
33873388
rb_free_rb_global_tbl();
33883389

33893390
rb_id_table_free_items(&vm->negative_cme_table);
3390-
st_free_table(vm->overloaded_cme_table);
3391+
st_free_embedded_table(&vm->overloaded_cme_table);
33913392

33923393
// TODO: Is this ignorable for classext->m_tbl ?
33933394
// rb_id_table_free(RCLASS(rb_mRubyVMFrozenCore)->m_tbl);
@@ -3507,7 +3508,7 @@ vm_memsize(const void *ptr)
35073508
rb_st_memsize(vm->ci_table) +
35083509
vm_memsize_builtin_function_table(vm->builtin_function_table) +
35093510
(rb_id_table_memsize(&vm->negative_cme_table) - sizeof(struct rb_id_table)) +
3510-
rb_st_memsize(vm->overloaded_cme_table) +
3511+
(rb_st_memsize(&vm->overloaded_cme_table) - sizeof(struct st_table)) +
35113512
vm_memsize_constant_cache()
35123513
);
35133514

@@ -4584,7 +4585,7 @@ Init_BareVM(void)
45844585
ruby_current_vm_ptr = vm;
45854586
rb_objspace_alloc();
45864587
rb_id_table_init(&vm->negative_cme_table, 16);
4587-
vm->overloaded_cme_table = st_init_numtable();
4588+
st_init_existing_numtable_with_size(&vm->overloaded_cme_table, 0);
45884589
vm->unused_block_warning_table = set_init_numtable();
45894590
vm->global_hooks.type = hook_list_type_global;
45904591

vm_core.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ typedef struct rb_vm_struct {
814814

815815
st_table *ci_table;
816816
struct rb_id_table negative_cme_table;
817-
st_table *overloaded_cme_table; // cme -> overloaded_cme
817+
st_table overloaded_cme_table; // cme -> overloaded_cme
818818
set_table *unused_block_warning_table;
819819
VALUE cc_refinement_set;
820820

vm_method.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,8 +1506,7 @@ rb_method_entry_make(VALUE klass, ID mid, VALUE defined_class, rb_method_visibil
15061506
static st_table *
15071507
overloaded_cme_table(void)
15081508
{
1509-
VM_ASSERT(GET_VM()->overloaded_cme_table != NULL);
1510-
return GET_VM()->overloaded_cme_table;
1509+
return &GET_VM()->overloaded_cme_table;
15111510
}
15121511

15131512
#if VM_CHECK_MODE > 0

0 commit comments

Comments
 (0)