|
1 | 1 | #line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" |
2 | 2 | #include "prism/node.h" |
3 | 3 |
|
4 | | -static void |
5 | | -pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize); |
6 | | - |
7 | | -/** |
8 | | - * Calculate the size of the node list in bytes. |
9 | | - */ |
10 | | -static size_t |
11 | | -pm_node_list_memsize(pm_node_list_t *node_list, pm_memsize_t *memsize) { |
12 | | - pm_node_t *node; |
13 | | - PM_NODE_LIST_FOREACH(node_list, index, node) pm_node_memsize_node(node, memsize); |
14 | | - return sizeof(pm_node_list_t) + (node_list->capacity * sizeof(pm_node_t *)); |
15 | | -} |
16 | | - |
17 | 4 | /** |
18 | 5 | * Attempts to grow the node list to the next size. If there is already |
19 | 6 | * capacity in the list, this function does nothing. Otherwise it reallocates |
@@ -156,57 +143,6 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) { |
156 | 143 | xfree(node); |
157 | 144 | } |
158 | 145 |
|
159 | | -static void |
160 | | -pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) { |
161 | | - memsize->node_count++; |
162 | | - |
163 | | - switch (PM_NODE_TYPE(node)) { |
164 | | - // We do not calculate memsize of a ScopeNode |
165 | | - // as it should never be generated |
166 | | - case PM_SCOPE_NODE: |
167 | | - return; |
168 | | - <%- nodes.each do |node| -%> |
169 | | -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" |
170 | | - case <%= node.type %>: { |
171 | | - pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; |
172 | | - memsize->memsize += sizeof(*cast); |
173 | | - <%- node.fields.each do |field| -%> |
174 | | - <%- case field -%> |
175 | | - <%- when Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::LocationField, Prism::Template::OptionalLocationField, Prism::Template::DoubleField -%> |
176 | | - <%- when Prism::Template::NodeField -%> |
177 | | - pm_node_memsize_node((pm_node_t *)cast-><%= field.name %>, memsize); |
178 | | - <%- when Prism::Template::OptionalNodeField -%> |
179 | | - if (cast-><%= field.name %> != NULL) { |
180 | | - pm_node_memsize_node((pm_node_t *)cast-><%= field.name %>, memsize); |
181 | | - } |
182 | | - <%- when Prism::Template::StringField -%> |
183 | | - memsize->memsize += (pm_string_memsize(&cast-><%= field.name %>) - sizeof(pm_string_t)); |
184 | | - <%- when Prism::Template::NodeListField -%> |
185 | | - memsize->memsize += (pm_node_list_memsize(&cast-><%= field.name %>, memsize) - sizeof(pm_node_list_t)); |
186 | | - <%- when Prism::Template::ConstantListField -%> |
187 | | - memsize->memsize += (pm_constant_id_list_memsize(&cast-><%= field.name %>) - sizeof(pm_constant_id_list_t)); |
188 | | - <%- when Prism::Template::IntegerField -%> |
189 | | - memsize->memsize += (pm_integer_memsize(&cast-><%= field.name %>) - sizeof(pm_integer_t)); |
190 | | - <%- else -%> |
191 | | - <%- raise -%> |
192 | | - <%- end -%> |
193 | | - <%- end -%> |
194 | | - break; |
195 | | - } |
196 | | - <%- end -%> |
197 | | -#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" |
198 | | - } |
199 | | -} |
200 | | - |
201 | | -/** |
202 | | - * Calculates the memory footprint of a given node. |
203 | | - */ |
204 | | -PRISM_EXPORTED_FUNCTION void |
205 | | -pm_node_memsize(pm_node_t *node, pm_memsize_t *memsize) { |
206 | | - *memsize = (pm_memsize_t) { .memsize = 0, .node_count = 0 }; |
207 | | - pm_node_memsize_node(node, memsize); |
208 | | -} |
209 | | - |
210 | 146 | /** |
211 | 147 | * Returns a string representation of the given node type. |
212 | 148 | */ |
|
0 commit comments