summaryrefslogtreecommitdiff
path: root/shape.c
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2023-03-09 15:58:22 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2023-03-22 12:50:42 -0700
commit0519741702a016e3e44554bb906de0d18c719ead (patch)
tree56e71a3676bbc97f574ea95b859c4a34dd1beeb9 /shape.c
parent999ccb2b6b244e8a128ce8ff32665f83e2da535f (diff)
downloadruby-0519741702a016e3e44554bb906de0d18c719ead.tar.gz
pull child allocation in to a different function
Diffstat (limited to 'shape.c')
-rw-r--r--shape.c42
1 files changed, 25 insertions, 17 deletions
diff --git a/shape.c b/shape.c
index c1199a9f59..52f9b17c09 100644
--- a/shape.c
+++ b/shape.c
@@ -151,6 +151,30 @@ rb_shape_alloc(ID edge_name, rb_shape_t * parent, enum shape_type type)
return shape;
}
+static rb_shape_t *
+rb_shape_alloc_new_child(ID id, rb_shape_t * shape, enum shape_type shape_type)
+{
+ rb_shape_t * new_shape = rb_shape_alloc(id, shape, shape_type);
+
+ switch (shape_type) {
+ case SHAPE_IVAR:
+ new_shape->next_iv_index = shape->next_iv_index + 1;
+ break;
+ case SHAPE_CAPACITY_CHANGE:
+ case SHAPE_FROZEN:
+ case SHAPE_T_OBJECT:
+ new_shape->next_iv_index = shape->next_iv_index;
+ break;
+ case SHAPE_OBJ_TOO_COMPLEX:
+ case SHAPE_INITIAL_CAPACITY:
+ case SHAPE_ROOT:
+ rb_bug("Unreachable");
+ break;
+ }
+
+ return new_shape;
+}
+
static rb_shape_t*
get_next_shape_internal(rb_shape_t * shape, ID id, enum shape_type shape_type, bool * variation_created, bool new_shapes_allowed, bool new_shape_necessary)
{
@@ -179,23 +203,7 @@ get_next_shape_internal(rb_shape_t * shape, ID id, enum shape_type shape_type, b
else {
*variation_created = had_edges;
- rb_shape_t * new_shape = rb_shape_alloc(id, shape, shape_type);
-
- switch (shape_type) {
- case SHAPE_IVAR:
- new_shape->next_iv_index = shape->next_iv_index + 1;
- break;
- case SHAPE_CAPACITY_CHANGE:
- case SHAPE_FROZEN:
- case SHAPE_T_OBJECT:
- new_shape->next_iv_index = shape->next_iv_index;
- break;
- case SHAPE_OBJ_TOO_COMPLEX:
- case SHAPE_INITIAL_CAPACITY:
- case SHAPE_ROOT:
- rb_bug("Unreachable");
- break;
- }
+ rb_shape_t * new_shape = rb_shape_alloc_new_child(id, shape, shape_type);
rb_id_table_insert(shape->edges, id, (VALUE)new_shape);