summaryrefslogtreecommitdiff
path: root/shape.c
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2023-04-18 14:45:18 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2023-04-18 16:56:48 -0700
commit3016f30c956413268655dcb25dbe5041684f9528 (patch)
tree2f8a0223155cf6f5fd3b543661b7d399b4a12491 /shape.c
parentb09f5c7bf79d347aa6ed92964cff16d7da008ad9 (diff)
downloadruby-3016f30c956413268655dcb25dbe5041684f9528.tar.gz
Return NULL to indicate the next shape isn't found
During compaction we must fix up shapes on objects who were extended but then became embedded. `rb_shape_traverse_from_new_root` is supposed to walk shape trees looking for a matching shape. When a shape has a "single child" we weren't returning NULL when the edge names didn't match. In the case of a single outgoing edge, this patch returns NULL when the child edge name doesn't match (similar to the case when a shape has a hash of outgoing edges)
Diffstat (limited to 'shape.c')
-rw-r--r--shape.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/shape.c b/shape.c
index 5694833bfa..0651ec3172 100644
--- a/shape.c
+++ b/shape.c
@@ -497,6 +497,9 @@ rb_shape_traverse_from_new_root(rb_shape_t *initial_shape, rb_shape_t *dest_shap
if (child->edge_name == dest_shape->edge_name) {
return child;
}
+ else {
+ return NULL;
+ }
}
else {
if (rb_id_table_lookup(next_shape->edges, dest_shape->edge_name, &lookup_result)) {