diff options
Diffstat (limited to 'internal')
-rw-r--r-- | internal/class.h | 6 | ||||
-rw-r--r-- | internal/imemo.h | 22 | ||||
-rw-r--r-- | internal/variable.h | 4 |
3 files changed, 16 insertions, 16 deletions
diff --git a/internal/class.h b/internal/class.h index 2250d3f343..f4677ae400 100644 --- a/internal/class.h +++ b/internal/class.h @@ -432,7 +432,7 @@ static inline rb_classext_t * RCLASS_EXT_WRITABLE(VALUE obj) { const rb_namespace_t *ns; - if (RCLASS_PRIME_CLASSEXT_WRITABLE_P(obj)) { + if (LIKELY(RCLASS_PRIME_CLASSEXT_WRITABLE_P(obj))) { return RCLASS_EXT_PRIME(obj); } // delay namespace loading to optimize for unmodified classes @@ -526,7 +526,7 @@ RCLASS_WRITABLE_ENSURE_FIELDS_OBJ(VALUE obj) RUBY_ASSERT(RB_TYPE_P(obj, RUBY_T_CLASS) || RB_TYPE_P(obj, RUBY_T_MODULE)); rb_classext_t *ext = RCLASS_EXT_WRITABLE(obj); if (!ext->fields_obj) { - RB_OBJ_WRITE(obj, &ext->fields_obj, rb_imemo_class_fields_new(obj, 1)); + RB_OBJ_WRITE(obj, &ext->fields_obj, rb_imemo_fields_new(rb_singleton_class(obj), 1)); } return ext->fields_obj; } @@ -564,7 +564,7 @@ RCLASS_FIELDS_COUNT(VALUE obj) VALUE fields_obj = RCLASS_WRITABLE_FIELDS_OBJ(obj); if (fields_obj) { if (rb_shape_obj_too_complex_p(fields_obj)) { - return (uint32_t)rb_st_table_size(rb_imemo_class_fields_complex_tbl(fields_obj)); + return (uint32_t)rb_st_table_size(rb_imemo_fields_complex_tbl(fields_obj)); } else { return RSHAPE_LEN(RBASIC_SHAPE_ID(fields_obj)); diff --git a/internal/imemo.h b/internal/imemo.h index 0806baa9a6..44b41d1b1c 100644 --- a/internal/imemo.h +++ b/internal/imemo.h @@ -42,7 +42,7 @@ enum imemo_type { imemo_callinfo = 11, imemo_callcache = 12, imemo_constcache = 13, - imemo_class_fields = 14, + imemo_fields = 14, }; /* CREF (Class REFerence) is defined in method.h */ @@ -258,7 +258,7 @@ MEMO_V2_SET(struct MEMO *m, VALUE v) RB_OBJ_WRITE(m, &m->v2, v); } -struct rb_class_fields { +struct rb_fields { struct RBasic basic; union { struct { @@ -276,20 +276,22 @@ struct rb_class_fields { }; #define OBJ_FIELD_EXTERNAL IMEMO_FL_USER0 -#define IMEMO_OBJ_FIELDS(fields) ((struct rb_class_fields *)fields) +#define IMEMO_OBJ_FIELDS(fields) ((struct rb_fields *)fields) -VALUE rb_imemo_class_fields_new(VALUE klass, size_t capa); -VALUE rb_imemo_class_fields_new_complex(VALUE klass, size_t capa); -VALUE rb_imemo_class_fields_clone(VALUE fields_obj); +VALUE rb_imemo_fields_new(VALUE klass, size_t capa); +VALUE rb_imemo_fields_new_complex(VALUE klass, size_t capa); +VALUE rb_imemo_fields_new_complex_tbl(VALUE klass, st_table *tbl); +VALUE rb_imemo_fields_clone(VALUE fields_obj); +void rb_imemo_fields_clear(VALUE fields_obj); static inline VALUE * -rb_imemo_class_fields_ptr(VALUE obj_fields) +rb_imemo_fields_ptr(VALUE obj_fields) { if (!obj_fields) { return NULL; } - RUBY_ASSERT(IMEMO_TYPE_P(obj_fields, imemo_class_fields)); + RUBY_ASSERT(IMEMO_TYPE_P(obj_fields, imemo_fields)); if (RB_UNLIKELY(FL_TEST_RAW(obj_fields, OBJ_FIELD_EXTERNAL))) { return IMEMO_OBJ_FIELDS(obj_fields)->as.external.ptr; @@ -300,13 +302,13 @@ rb_imemo_class_fields_ptr(VALUE obj_fields) } static inline st_table * -rb_imemo_class_fields_complex_tbl(VALUE obj_fields) +rb_imemo_fields_complex_tbl(VALUE obj_fields) { if (!obj_fields) { return NULL; } - RUBY_ASSERT(IMEMO_TYPE_P(obj_fields, imemo_class_fields)); + RUBY_ASSERT(IMEMO_TYPE_P(obj_fields, imemo_fields)); return IMEMO_OBJ_FIELDS(obj_fields)->as.complex.table; } diff --git a/internal/variable.h b/internal/variable.h index 8da6c678a5..92017d6184 100644 --- a/internal/variable.h +++ b/internal/variable.h @@ -18,7 +18,6 @@ /* variable.c */ void rb_gc_mark_global_tbl(void); void rb_gc_update_global_tbl(void); -size_t rb_generic_ivar_memsize(VALUE); VALUE rb_search_class_path(VALUE); VALUE rb_attr_delete(VALUE, ID); void rb_autoload_str(VALUE mod, ID id, VALUE file); @@ -47,8 +46,7 @@ void rb_gvar_namespace_ready(const char *name); */ VALUE rb_mod_set_temporary_name(VALUE, VALUE); -struct gen_fields_tbl; -int rb_gen_fields_tbl_get(VALUE obj, ID id, struct gen_fields_tbl **fields_tbl); +int rb_gen_fields_tbl_get(VALUE obj, ID id, VALUE *fields_obj); void rb_obj_copy_ivs_to_hash_table(VALUE obj, st_table *table); void rb_obj_init_too_complex(VALUE obj, st_table *table); void rb_evict_ivars_to_hash(VALUE obj); |