diff options
author | Aaron Patterson <tenderlove@ruby-lang.org> | 2023-03-09 15:58:22 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2023-03-22 12:50:42 -0700 |
commit | 0519741702a016e3e44554bb906de0d18c719ead (patch) | |
tree | 56e71a3676bbc97f574ea95b859c4a34dd1beeb9 /shape.c | |
parent | 999ccb2b6b244e8a128ce8ff32665f83e2da535f (diff) | |
download | ruby-0519741702a016e3e44554bb906de0d18c719ead.tar.gz |
pull child allocation in to a different function
Diffstat (limited to 'shape.c')
-rw-r--r-- | shape.c | 42 |
1 files changed, 25 insertions, 17 deletions
@@ -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); |