summaryrefslogtreecommitdiff
path: root/shape.c
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 ()
tree2f8a0223155cf6f5fd3b543661b7d399b4a12491 /shape.c
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 returns NULL when the child edge name doesn't match (similar to the case when a shape has a hash of outgoing edges)
Notes: Merged: https://.com/ruby/ruby/pull/7735
-rw-r--r--shape.c3
1 files changed, 3 insertions, 0 deletions
@@ -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 {
if (rb_id_table_lookup(next_shape->edges, dest_shape->edge_name, &lookup_result)) {