summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@gmail.com>2023-09-15 12:56:22 -0400
committergit <svn-admin@ruby-lang.org>2023-09-19 16:11:27 +0000
commit18622403acfb1e398a07b05d21d2ab39972c339e (patch)
tree7bae20004684952e4444ccfb82bae7dc8e3c5658
parent5c5391f444624bcee6a258bcc7b4777c7c295ae7 (diff)
[ruby/yarp] fix computation of memsize for node lists
https://github.com/ruby/yarp/commit/02aab8b026
-rw-r--r--yarp/templates/src/node.c.erb6
1 files changed, 5 insertions, 1 deletions
diff --git a/yarp/templates/src/node.c.erb b/yarp/templates/src/node.c.erb
index 9f23123914..7ce54f2011 100644
--- a/yarp/templates/src/node.c.erb
+++ b/yarp/templates/src/node.c.erb
@@ -102,6 +102,10 @@ yp_node_memsize_node(yp_node_t *node, yp_memsize_t *memsize) {
case <%= node.type %>: {
yp_<%= node.human %>_t *cast = (yp_<%= node.human %>_t *) node;
memsize->memsize += sizeof(*cast);
+ <%- if node.fields.any? { |f| f.is_a?(YARP::NodeListField) } -%>
+ // Node lists will add in their own sizes below.
+ memsize->memsize -= sizeof(yp_node_list_t) * <%= node.fields.count { |f| f.is_a?(YARP::NodeListField) } %>;
+ <%- end -%>
<%- node.fields.each do |field| -%>
<%- case field -%>
<%- when YARP::ConstantField, YARP::OptionalConstantField, YARP::UInt32Field, YARP::FlagsField, YARP::LocationField, YARP::OptionalLocationField -%>
@@ -114,7 +118,7 @@ yp_node_memsize_node(yp_node_t *node, yp_memsize_t *memsize) {
<%- when YARP::StringField -%>
memsize->memsize += yp_string_memsize(&cast-><%= field.name %>);
<%- when YARP::NodeListField -%>
- yp_node_list_memsize(&cast-><%= field.name %>, memsize);
+ memsize->memsize += yp_node_list_memsize(&cast-><%= field.name %>, memsize);
<%- when YARP::ConstantListField -%>
memsize->memsize += yp_constant_id_list_memsize(&cast-><%= field.name %>);
<%- else -%>