diff options
| author | Nathan Froyd <froydnj@gmail.com> | 2023-09-15 12:56:22 -0400 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2023-09-19 16:11:27 +0000 |
| commit | 18622403acfb1e398a07b05d21d2ab39972c339e (patch) | |
| tree | 7bae20004684952e4444ccfb82bae7dc8e3c5658 | |
| parent | 5c5391f444624bcee6a258bcc7b4777c7c295ae7 (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.erb | 6 |
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 -%> |
