diff options
author | Aaron Patterson <tenderlove@ruby-lang.org> | 2022-09-26 16:09:50 -0700 |
---|---|---|
committer | Aaron Patterson <tenderlove@ruby-lang.org> | 2022-09-26 16:10:11 -0700 |
commit | 06abfa5be60e589052eb3bdfdae6c132bea3d20b (patch) | |
tree | 32200df9a517d30a92dfe1003057e03cfba44701 /internal | |
parent | b39690df3a90a838cdb2de71e70a20651ebafaf4 (diff) |
Revert this until we can figure out WB issues or remove shapes from GC
Revert "* expand tabs. [ci skip]"
This reverts commit 830b5b5c351c5c6efa5ad461ae4ec5085e5f0275.
Revert "This commit implements the Object Shapes technique in CRuby."
This reverts commit 9ddfd2ca004d1952be79cf1b84c52c79a55978f4.
Diffstat (limited to 'internal')
-rw-r--r-- | internal/class.h | 11 | ||||
-rw-r--r-- | internal/imemo.h | 1 | ||||
-rw-r--r-- | internal/object.h | 22 | ||||
-rw-r--r-- | internal/variable.h | 5 |
4 files changed, 27 insertions, 12 deletions
diff --git a/internal/class.h b/internal/class.h index 36635d6eaa..ae680564a6 100644 --- a/internal/class.h +++ b/internal/class.h @@ -14,7 +14,6 @@ #include "ruby/internal/stdbool.h" /* for bool */ #include "ruby/intern.h" /* for rb_alloc_func_t */ #include "ruby/ruby.h" /* for struct RBasic */ -#include "shape.h" #ifdef RCLASS_SUPER # undef RCLASS_SUPER @@ -27,9 +26,9 @@ struct rb_subclass_entry { }; struct rb_iv_index_tbl_entry { - uint32_t idx; - shape_id_t source_shape_id; - shape_id_t dest_shape_id; + uint32_t index; + rb_serial_t class_serial; + VALUE class_value; }; struct rb_cvar_class_tbl_entry { @@ -39,6 +38,7 @@ struct rb_cvar_class_tbl_entry { }; struct rb_classext_struct { + struct st_table *iv_index_tbl; // ID -> struct rb_iv_index_tbl_entry struct st_table *iv_tbl; #if SIZEOF_SERIAL_T == SIZEOF_VALUE /* otherwise m_tbl is in struct RClass */ struct rb_id_table *m_tbl; @@ -64,8 +64,6 @@ struct rb_classext_struct { const VALUE refined_class; rb_alloc_func_t allocator; const VALUE includer; - uint32_t max_iv_count; - uint16_t shape_id; }; struct RClass { @@ -104,6 +102,7 @@ typedef struct rb_classext_struct rb_classext_t; #define RCLASS_CALLABLE_M_TBL(c) (RCLASS_EXT(c)->callable_m_tbl) #define RCLASS_CC_TBL(c) (RCLASS_EXT(c)->cc_tbl) #define RCLASS_CVC_TBL(c) (RCLASS_EXT(c)->cvc_tbl) +#define RCLASS_IV_INDEX_TBL(c) (RCLASS_EXT(c)->iv_index_tbl) #define RCLASS_ORIGIN(c) (RCLASS_EXT(c)->origin_) #define RCLASS_REFINED_CLASS(c) (RCLASS_EXT(c)->refined_class) #if SIZEOF_SERIAL_T == SIZEOF_VALUE diff --git a/internal/imemo.h b/internal/imemo.h index 20bfff8d7c..91b524e0a6 100644 --- a/internal/imemo.h +++ b/internal/imemo.h @@ -45,7 +45,6 @@ enum imemo_type { imemo_callinfo = 11, imemo_callcache = 12, imemo_constcache = 13, - imemo_shape = 14, }; /* CREF (Class REFerence) is defined in method.h */ diff --git a/internal/object.h b/internal/object.h index 7b54e13dd2..88f3a44bc6 100644 --- a/internal/object.h +++ b/internal/object.h @@ -9,6 +9,11 @@ * @brief Internal header for Object. */ #include "ruby/ruby.h" /* for VALUE */ +#include "internal/class.h" /* for RCLASS_IV_INDEX_TBL */ + +#ifdef ROBJECT_IV_INDEX_TBL +# undef ROBJECT_IV_INDEX_TBL +#endif /* object.c */ VALUE rb_class_search_ancestor(VALUE klass, VALUE super); @@ -21,6 +26,7 @@ int rb_bool_expected(VALUE, const char *, int raise); static inline void RBASIC_CLEAR_CLASS(VALUE obj); static inline void RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass); static inline void RBASIC_SET_CLASS(VALUE obj, VALUE klass); +static inline struct st_table *ROBJECT_IV_INDEX_TBL_inline(VALUE obj); RUBY_SYMBOL_EXPORT_BEGIN /* object.c (export) */ @@ -58,4 +64,20 @@ RBASIC_SET_CLASS(VALUE obj, VALUE klass) RBASIC_SET_CLASS_RAW(obj, klass); RB_OBJ_WRITTEN(obj, oldv, klass); } + +RBIMPL_ATTR_PURE() +static inline struct st_table * +ROBJECT_IV_INDEX_TBL_inline(VALUE obj) +{ + if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) { + VALUE klass = rb_obj_class(obj); + return RCLASS_IV_INDEX_TBL(klass); + } + else { + const struct RObject *const ptr = ROBJECT(obj); + return ptr->as.heap.iv_index_tbl; + } +} +#define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL_inline + #endif /* INTERNAL_OBJECT_H */ diff --git a/internal/variable.h b/internal/variable.h index 47037a3392..1a19e8964b 100644 --- a/internal/variable.h +++ b/internal/variable.h @@ -37,9 +37,6 @@ static inline void ROBJ_TRANSIENT_SET(VALUE obj); static inline void ROBJ_TRANSIENT_UNSET(VALUE obj); uint32_t rb_obj_ensure_iv_index_mapping(VALUE obj, ID id); -struct gen_ivtbl; -int rb_gen_ivtbl_get(VALUE obj, ID id, struct gen_ivtbl **ivtbl); - RUBY_SYMBOL_EXPORT_BEGIN /* variable.c (export) */ void rb_mark_generic_ivar(VALUE); @@ -55,8 +52,6 @@ VALUE rb_gvar_set(ID, VALUE); VALUE rb_gvar_defined(ID); void rb_const_warn_if_deprecated(const rb_const_entry_t *, VALUE, ID); void rb_init_iv_list(VALUE obj); -void rb_ensure_iv_list_size(VALUE obj, uint32_t len, uint32_t newsize); -struct gen_ivtbl * rb_ensure_generic_iv_list_size(VALUE obj, uint32_t newsize); MJIT_SYMBOL_EXPORT_END static inline bool |