From 9a6803c90b817f70389cae10d60b50ad752da48f Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Fri, 30 Sep 2022 16:01:50 -0700 Subject: Revert "This commit implements the Object Shapes technique in CRuby." This reverts commit 68bc9e2e97d12f80df0d113e284864e225f771c2. --- object.c | 46 ++-------------------------------------------- 1 file changed, 2 insertions(+), 44 deletions(-) (limited to 'object.c') diff --git a/object.c b/object.c index 213f9760be..2328b20757 100644 --- a/object.c +++ b/object.c @@ -39,7 +39,6 @@ #include "ruby/util.h" #include "ruby/assert.h" #include "builtin.h" -#include "shape.h" /*! * \addtogroup object @@ -272,33 +271,9 @@ rb_obj_copy_ivar(VALUE dest, VALUE obj) VALUE *src_buf = ROBJECT_IVPTR(obj); uint32_t dest_len = ROBJECT_NUMIV(dest); uint32_t src_len = ROBJECT_NUMIV(obj); - uint32_t max_len = dest_len < src_len ? src_len : dest_len; + uint32_t len = dest_len < src_len ? dest_len : src_len; - rb_ensure_iv_list_size(dest, dest_len, max_len); - - dest_len = ROBJECT_NUMIV(dest); - uint32_t min_len = dest_len > src_len ? src_len : dest_len; - - if (RBASIC(obj)->flags & ROBJECT_EMBED) { - src_buf = ROBJECT(obj)->as.ary; - - // embedded -> embedded - if (RBASIC(dest)->flags & ROBJECT_EMBED) { - dest_buf = ROBJECT(dest)->as.ary; - } - // embedded -> extended - else { - dest_buf = ROBJECT(dest)->as.heap.ivptr; - } - } - // extended -> extended - else { - RUBY_ASSERT(!(RBASIC(dest)->flags & ROBJECT_EMBED)); - dest_buf = ROBJECT(dest)->as.heap.ivptr; - src_buf = ROBJECT(obj)->as.heap.ivptr; - } - - MEMCPY(dest_buf, src_buf, VALUE, min_len); + MEMCPY(dest_buf, src_buf, VALUE, len); } static void @@ -308,23 +283,10 @@ init_copy(VALUE dest, VALUE obj) rb_raise(rb_eTypeError, "[bug] frozen object (%s) allocated", rb_obj_classname(dest)); } RBASIC(dest)->flags &= ~(T_MASK|FL_EXIVAR); - // Copies the shape id from obj to dest RBASIC(dest)->flags |= RBASIC(obj)->flags & (T_MASK|FL_EXIVAR); rb_copy_wb_protected_attribute(dest, obj); rb_copy_generic_ivar(dest, obj); rb_gc_copy_finalizer(dest, obj); - - rb_shape_t *shape_to_set = rb_shape_get_shape(obj); - - // If the object is frozen, the "dup"'d object will *not* be frozen, - // so we need to copy the frozen shape's parent to the new object. - if (rb_shape_frozen_shape_p(shape_to_set)) { - shape_to_set = shape_to_set->parent; - } - - // shape ids are different - rb_shape_set_shape(dest, shape_to_set); - if (RB_TYPE_P(obj, T_OBJECT)) { rb_obj_copy_ivar(dest, obj); } @@ -430,9 +392,6 @@ mutable_obj_clone(VALUE obj, VALUE kwfreeze) case Qnil: rb_funcall(clone, id_init_clone, 1, obj); RBASIC(clone)->flags |= RBASIC(obj)->flags & FL_FREEZE; - if (RB_OBJ_FROZEN(obj)) { - rb_shape_transition_shape_frozen(clone); - } break; case Qtrue: { @@ -448,7 +407,6 @@ mutable_obj_clone(VALUE obj, VALUE kwfreeze) argv[1] = freeze_true_hash; rb_funcallv_kw(clone, id_init_clone, 2, argv, RB_PASS_KEYWORDS); RBASIC(clone)->flags |= FL_FREEZE; - rb_shape_transition_shape_frozen(clone); break; } case Qfalse: -- cgit v1.2.1