summaryrefslogtreecommitdiff
path: root/shape.h
diff options
context:
space:
mode:
authorJean Boussier <byroot@ruby-lang.org>2023-11-07 18:09:55 +0100
committerJean Boussier <jean.boussier@gmail.com>2023-11-08 11:02:55 +0100
commitd898e8d6f89fba34a9ee5c0e139f38ac807059e6 (patch)
treebf9d79ff3b3502565b5b718427f192bcd472dc64 /shape.h
parent4abf6cde583f3ebe562bd9d62e0126b2cbf4dfac (diff)
Refactor rb_shape_transition_shape_capa out
Right now the `rb_shape_get_next` shape caller need to first check if there is capacity left, and if not call `rb_shape_transition_shape_capa` before it can call `rb_shape_get_next`. And on each of these it needs to checks if we got a TOO_COMPLEX back. All this logic is duplicated in the interpreter, YJIT and RJIT. Instead we can have `rb_shape_get_next` do the capacity transition when needed. The caller can compare the old and new shapes capacity to know if resizing is needed. It also can check for TOO_COMPLEX only once.
Diffstat (limited to 'shape.h')
-rw-r--r--shape.h1
1 files changed, 0 insertions, 1 deletions
diff --git a/shape.h b/shape.h
index 6404465d45..6d4f3f9811 100644
--- a/shape.h
+++ b/shape.h
@@ -163,7 +163,6 @@ rb_shape_t* rb_shape_get_shape(VALUE obj);
int rb_shape_frozen_shape_p(rb_shape_t* shape);
rb_shape_t* rb_shape_transition_shape_frozen(VALUE obj);
bool rb_shape_transition_shape_remove_ivar(VALUE obj, ID id, rb_shape_t *shape, VALUE * removed);
-rb_shape_t * rb_shape_transition_shape_capa(rb_shape_t * shape);
rb_shape_t* rb_shape_get_next(rb_shape_t* shape, VALUE obj, ID id);
rb_shape_t * rb_shape_rebuild_shape(rb_shape_t * initial_shape, rb_shape_t * dest_shape);