summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Patterson <[email protected]>2023-04-18 14:45:18 -0700
committerAaron Patterson <[email protected]>2023-04-18 16:56:48 -0700
commit3016f30c956413268655dcb25dbe5041684f9528 (patch)
tree2f8a0223155cf6f5fd3b543661b7d399b4a12491
parentb09f5c7bf79d347aa6ed92964cff16d7da008ad9 (diff)
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)
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/7735
-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)) {