prism 0.29.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +115 -1
  3. data/CONTRIBUTING.md +0 -4
  4. data/Makefile +1 -1
  5. data/README.md +4 -0
  6. data/config.yml +920 -148
  7. data/docs/build_system.md +8 -11
  8. data/docs/fuzzing.md +1 -1
  9. data/docs/parsing_rules.md +4 -1
  10. data/docs/relocation.md +34 -0
  11. data/docs/ripper_translation.md +22 -0
  12. data/docs/serialization.md +3 -0
  13. data/ext/prism/api_node.c +2863 -2079
  14. data/ext/prism/extconf.rb +14 -37
  15. data/ext/prism/extension.c +241 -391
  16. data/ext/prism/extension.h +2 -2
  17. data/include/prism/ast.h +2156 -453
  18. data/include/prism/defines.h +58 -7
  19. data/include/prism/diagnostic.h +24 -6
  20. data/include/prism/node.h +0 -21
  21. data/include/prism/options.h +94 -3
  22. data/include/prism/parser.h +82 -40
  23. data/include/prism/regexp.h +18 -8
  24. data/include/prism/static_literals.h +3 -2
  25. data/include/prism/util/pm_char.h +1 -2
  26. data/include/prism/util/pm_constant_pool.h +0 -8
  27. data/include/prism/util/pm_integer.h +22 -15
  28. data/include/prism/util/pm_newline_list.h +11 -0
  29. data/include/prism/util/pm_string.h +28 -12
  30. data/include/prism/version.h +3 -3
  31. data/include/prism.h +47 -11
  32. data/lib/prism/compiler.rb +3 -0
  33. data/lib/prism/desugar_compiler.rb +111 -74
  34. data/lib/prism/dispatcher.rb +16 -1
  35. data/lib/prism/dot_visitor.rb +55 -34
  36. data/lib/prism/dsl.rb +660 -468
  37. data/lib/prism/ffi.rb +113 -8
  38. data/lib/prism/inspect_visitor.rb +296 -64
  39. data/lib/prism/lex_compat.rb +1 -1
  40. data/lib/prism/mutation_compiler.rb +11 -6
  41. data/lib/prism/node.rb +4262 -5023
  42. data/lib/prism/node_ext.rb +91 -14
  43. data/lib/prism/parse_result/comments.rb +0 -7
  44. data/lib/prism/parse_result/errors.rb +65 -0
  45. data/lib/prism/parse_result/newlines.rb +101 -11
  46. data/lib/prism/parse_result.rb +183 -6
  47. data/lib/prism/reflection.rb +12 -10
  48. data/lib/prism/relocation.rb +504 -0
  49. data/lib/prism/serialize.rb +496 -609
  50. data/lib/prism/string_query.rb +30 -0
  51. data/lib/prism/translation/parser/compiler.rb +185 -155
  52. data/lib/prism/translation/parser/lexer.rb +26 -4
  53. data/lib/prism/translation/parser.rb +9 -4
  54. data/lib/prism/translation/ripper.rb +23 -25
  55. data/lib/prism/translation/ruby_parser.rb +86 -17
  56. data/lib/prism/visitor.rb +3 -0
  57. data/lib/prism.rb +6 -8
  58. data/prism.gemspec +9 -5
  59. data/rbi/prism/dsl.rbi +521 -0
  60. data/rbi/prism/node.rbi +1115 -1120
  61. data/rbi/prism/parse_result.rbi +29 -0
  62. data/rbi/prism/string_query.rbi +12 -0
  63. data/rbi/prism/visitor.rbi +3 -0
  64. data/rbi/prism.rbi +36 -30
  65. data/sig/prism/dsl.rbs +190 -303
  66. data/sig/prism/mutation_compiler.rbs +1 -0
  67. data/sig/prism/node.rbs +678 -632
  68. data/sig/prism/parse_result.rbs +22 -0
  69. data/sig/prism/relocation.rbs +185 -0
  70. data/sig/prism/string_query.rbs +11 -0
  71. data/sig/prism/visitor.rbs +1 -0
  72. data/sig/prism.rbs +103 -64
  73. data/src/diagnostic.c +64 -28
  74. data/src/node.c +502 -1739
  75. data/src/options.c +76 -27
  76. data/src/prettyprint.c +188 -112
  77. data/src/prism.c +3376 -2293
  78. data/src/regexp.c +208 -71
  79. data/src/serialize.c +182 -50
  80. data/src/static_literals.c +64 -85
  81. data/src/token_type.c +4 -4
  82. data/src/util/pm_char.c +1 -1
  83. data/src/util/pm_constant_pool.c +0 -8
  84. data/src/util/pm_integer.c +53 -25
  85. data/src/util/pm_newline_list.c +29 -0
  86. data/src/util/pm_string.c +131 -80
  87. data/src/util/pm_strpbrk.c +32 -6
  88. metadata +11 -7
  89. data/include/prism/util/pm_string_list.h +0 -44
  90. data/lib/prism/debug.rb +0 -249
  91. data/lib/prism/translation/parser/rubocop.rb +0 -73
  92. data/src/util/pm_string_list.c +0 -28
data/src/node.c CHANGED
@@ -1,27 +1,14 @@
1
- /******************************************************************************/
1
+ /*----------------------------------------------------------------------------*/
2
2
  /* This file is generated by the templates/template.rb script and should not */
3
3
  /* be modified manually. See */
4
4
  /* templates/src/node.c.erb */
5
5
  /* if you are looking to modify the */
6
6
  /* template */
7
- /******************************************************************************/
7
+ /*----------------------------------------------------------------------------*/
8
8
 
9
- #line 2 "node.c.erb"
9
+ #line 2 "prism/templates/src/node.c.erb"
10
10
  #include "prism/node.h"
11
11
 
12
- static void
13
- pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize);
14
-
15
- /**
16
- * Calculate the size of the node list in bytes.
17
- */
18
- static size_t
19
- pm_node_list_memsize(pm_node_list_t *node_list, pm_memsize_t *memsize) {
20
- pm_node_t *node;
21
- PM_NODE_LIST_FOREACH(node_list, index, node) pm_node_memsize_node(node, memsize);
22
- return sizeof(pm_node_list_t) + (node_list->capacity * sizeof(pm_node_t *));
23
- }
24
-
25
12
  /**
26
13
  * Attempts to grow the node list to the next size. If there is already
27
14
  * capacity in the list, this function does nothing. Otherwise it reallocates
@@ -126,47 +113,47 @@ pm_node_list_destroy(pm_parser_t *parser, pm_node_list_t *list) {
126
113
  PRISM_EXPORTED_FUNCTION void
127
114
  pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
128
115
  switch (PM_NODE_TYPE(node)) {
129
- #line 123 "node.c.erb"
116
+ #line 110 "prism/templates/src/node.c.erb"
130
117
  case PM_ALIAS_GLOBAL_VARIABLE_NODE: {
131
118
  pm_alias_global_variable_node_t *cast = (pm_alias_global_variable_node_t *) node;
132
119
  pm_node_destroy(parser, (pm_node_t *)cast->new_name);
133
120
  pm_node_destroy(parser, (pm_node_t *)cast->old_name);
134
121
  break;
135
122
  }
136
- #line 123 "node.c.erb"
123
+ #line 110 "prism/templates/src/node.c.erb"
137
124
  case PM_ALIAS_METHOD_NODE: {
138
125
  pm_alias_method_node_t *cast = (pm_alias_method_node_t *) node;
139
126
  pm_node_destroy(parser, (pm_node_t *)cast->new_name);
140
127
  pm_node_destroy(parser, (pm_node_t *)cast->old_name);
141
128
  break;
142
129
  }
143
- #line 123 "node.c.erb"
130
+ #line 110 "prism/templates/src/node.c.erb"
144
131
  case PM_ALTERNATION_PATTERN_NODE: {
145
132
  pm_alternation_pattern_node_t *cast = (pm_alternation_pattern_node_t *) node;
146
133
  pm_node_destroy(parser, (pm_node_t *)cast->left);
147
134
  pm_node_destroy(parser, (pm_node_t *)cast->right);
148
135
  break;
149
136
  }
150
- #line 123 "node.c.erb"
137
+ #line 110 "prism/templates/src/node.c.erb"
151
138
  case PM_AND_NODE: {
152
139
  pm_and_node_t *cast = (pm_and_node_t *) node;
153
140
  pm_node_destroy(parser, (pm_node_t *)cast->left);
154
141
  pm_node_destroy(parser, (pm_node_t *)cast->right);
155
142
  break;
156
143
  }
157
- #line 123 "node.c.erb"
144
+ #line 110 "prism/templates/src/node.c.erb"
158
145
  case PM_ARGUMENTS_NODE: {
159
146
  pm_arguments_node_t *cast = (pm_arguments_node_t *) node;
160
147
  pm_node_list_destroy(parser, &cast->arguments);
161
148
  break;
162
149
  }
163
- #line 123 "node.c.erb"
150
+ #line 110 "prism/templates/src/node.c.erb"
164
151
  case PM_ARRAY_NODE: {
165
152
  pm_array_node_t *cast = (pm_array_node_t *) node;
166
153
  pm_node_list_destroy(parser, &cast->elements);
167
154
  break;
168
155
  }
169
- #line 123 "node.c.erb"
156
+ #line 110 "prism/templates/src/node.c.erb"
170
157
  case PM_ARRAY_PATTERN_NODE: {
171
158
  pm_array_pattern_node_t *cast = (pm_array_pattern_node_t *) node;
172
159
  if (cast->constant != NULL) {
@@ -179,14 +166,14 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
179
166
  pm_node_list_destroy(parser, &cast->posts);
180
167
  break;
181
168
  }
182
- #line 123 "node.c.erb"
169
+ #line 110 "prism/templates/src/node.c.erb"
183
170
  case PM_ASSOC_NODE: {
184
171
  pm_assoc_node_t *cast = (pm_assoc_node_t *) node;
185
172
  pm_node_destroy(parser, (pm_node_t *)cast->key);
186
173
  pm_node_destroy(parser, (pm_node_t *)cast->value);
187
174
  break;
188
175
  }
189
- #line 123 "node.c.erb"
176
+ #line 110 "prism/templates/src/node.c.erb"
190
177
  case PM_ASSOC_SPLAT_NODE: {
191
178
  pm_assoc_splat_node_t *cast = (pm_assoc_splat_node_t *) node;
192
179
  if (cast->value != NULL) {
@@ -194,11 +181,11 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
194
181
  }
195
182
  break;
196
183
  }
197
- #line 123 "node.c.erb"
184
+ #line 110 "prism/templates/src/node.c.erb"
198
185
  case PM_BACK_REFERENCE_READ_NODE: {
199
186
  break;
200
187
  }
201
- #line 123 "node.c.erb"
188
+ #line 110 "prism/templates/src/node.c.erb"
202
189
  case PM_BEGIN_NODE: {
203
190
  pm_begin_node_t *cast = (pm_begin_node_t *) node;
204
191
  if (cast->statements != NULL) {
@@ -215,7 +202,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
215
202
  }
216
203
  break;
217
204
  }
218
- #line 123 "node.c.erb"
205
+ #line 110 "prism/templates/src/node.c.erb"
219
206
  case PM_BLOCK_ARGUMENT_NODE: {
220
207
  pm_block_argument_node_t *cast = (pm_block_argument_node_t *) node;
221
208
  if (cast->expression != NULL) {
@@ -223,11 +210,11 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
223
210
  }
224
211
  break;
225
212
  }
226
- #line 123 "node.c.erb"
213
+ #line 110 "prism/templates/src/node.c.erb"
227
214
  case PM_BLOCK_LOCAL_VARIABLE_NODE: {
228
215
  break;
229
216
  }
230
- #line 123 "node.c.erb"
217
+ #line 110 "prism/templates/src/node.c.erb"
231
218
  case PM_BLOCK_NODE: {
232
219
  pm_block_node_t *cast = (pm_block_node_t *) node;
233
220
  pm_constant_id_list_free(&cast->locals);
@@ -239,11 +226,11 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
239
226
  }
240
227
  break;
241
228
  }
242
- #line 123 "node.c.erb"
229
+ #line 110 "prism/templates/src/node.c.erb"
243
230
  case PM_BLOCK_PARAMETER_NODE: {
244
231
  break;
245
232
  }
246
- #line 123 "node.c.erb"
233
+ #line 110 "prism/templates/src/node.c.erb"
247
234
  case PM_BLOCK_PARAMETERS_NODE: {
248
235
  pm_block_parameters_node_t *cast = (pm_block_parameters_node_t *) node;
249
236
  if (cast->parameters != NULL) {
@@ -252,7 +239,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
252
239
  pm_node_list_destroy(parser, &cast->locals);
253
240
  break;
254
241
  }
255
- #line 123 "node.c.erb"
242
+ #line 110 "prism/templates/src/node.c.erb"
256
243
  case PM_BREAK_NODE: {
257
244
  pm_break_node_t *cast = (pm_break_node_t *) node;
258
245
  if (cast->arguments != NULL) {
@@ -260,7 +247,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
260
247
  }
261
248
  break;
262
249
  }
263
- #line 123 "node.c.erb"
250
+ #line 110 "prism/templates/src/node.c.erb"
264
251
  case PM_CALL_AND_WRITE_NODE: {
265
252
  pm_call_and_write_node_t *cast = (pm_call_and_write_node_t *) node;
266
253
  if (cast->receiver != NULL) {
@@ -269,7 +256,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
269
256
  pm_node_destroy(parser, (pm_node_t *)cast->value);
270
257
  break;
271
258
  }
272
- #line 123 "node.c.erb"
259
+ #line 110 "prism/templates/src/node.c.erb"
273
260
  case PM_CALL_NODE: {
274
261
  pm_call_node_t *cast = (pm_call_node_t *) node;
275
262
  if (cast->receiver != NULL) {
@@ -283,7 +270,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
283
270
  }
284
271
  break;
285
272
  }
286
- #line 123 "node.c.erb"
273
+ #line 110 "prism/templates/src/node.c.erb"
287
274
  case PM_CALL_OPERATOR_WRITE_NODE: {
288
275
  pm_call_operator_write_node_t *cast = (pm_call_operator_write_node_t *) node;
289
276
  if (cast->receiver != NULL) {
@@ -292,7 +279,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
292
279
  pm_node_destroy(parser, (pm_node_t *)cast->value);
293
280
  break;
294
281
  }
295
- #line 123 "node.c.erb"
282
+ #line 110 "prism/templates/src/node.c.erb"
296
283
  case PM_CALL_OR_WRITE_NODE: {
297
284
  pm_call_or_write_node_t *cast = (pm_call_or_write_node_t *) node;
298
285
  if (cast->receiver != NULL) {
@@ -301,44 +288,44 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
301
288
  pm_node_destroy(parser, (pm_node_t *)cast->value);
302
289
  break;
303
290
  }
304
- #line 123 "node.c.erb"
291
+ #line 110 "prism/templates/src/node.c.erb"
305
292
  case PM_CALL_TARGET_NODE: {
306
293
  pm_call_target_node_t *cast = (pm_call_target_node_t *) node;
307
294
  pm_node_destroy(parser, (pm_node_t *)cast->receiver);
308
295
  break;
309
296
  }
310
- #line 123 "node.c.erb"
297
+ #line 110 "prism/templates/src/node.c.erb"
311
298
  case PM_CAPTURE_PATTERN_NODE: {
312
299
  pm_capture_pattern_node_t *cast = (pm_capture_pattern_node_t *) node;
313
300
  pm_node_destroy(parser, (pm_node_t *)cast->value);
314
301
  pm_node_destroy(parser, (pm_node_t *)cast->target);
315
302
  break;
316
303
  }
317
- #line 123 "node.c.erb"
304
+ #line 110 "prism/templates/src/node.c.erb"
318
305
  case PM_CASE_MATCH_NODE: {
319
306
  pm_case_match_node_t *cast = (pm_case_match_node_t *) node;
320
307
  if (cast->predicate != NULL) {
321
308
  pm_node_destroy(parser, (pm_node_t *)cast->predicate);
322
309
  }
323
310
  pm_node_list_destroy(parser, &cast->conditions);
324
- if (cast->consequent != NULL) {
325
- pm_node_destroy(parser, (pm_node_t *)cast->consequent);
311
+ if (cast->else_clause != NULL) {
312
+ pm_node_destroy(parser, (pm_node_t *)cast->else_clause);
326
313
  }
327
314
  break;
328
315
  }
329
- #line 123 "node.c.erb"
316
+ #line 110 "prism/templates/src/node.c.erb"
330
317
  case PM_CASE_NODE: {
331
318
  pm_case_node_t *cast = (pm_case_node_t *) node;
332
319
  if (cast->predicate != NULL) {
333
320
  pm_node_destroy(parser, (pm_node_t *)cast->predicate);
334
321
  }
335
322
  pm_node_list_destroy(parser, &cast->conditions);
336
- if (cast->consequent != NULL) {
337
- pm_node_destroy(parser, (pm_node_t *)cast->consequent);
323
+ if (cast->else_clause != NULL) {
324
+ pm_node_destroy(parser, (pm_node_t *)cast->else_clause);
338
325
  }
339
326
  break;
340
327
  }
341
- #line 123 "node.c.erb"
328
+ #line 110 "prism/templates/src/node.c.erb"
342
329
  case PM_CLASS_NODE: {
343
330
  pm_class_node_t *cast = (pm_class_node_t *) node;
344
331
  pm_constant_id_list_free(&cast->locals);
@@ -351,64 +338,64 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
351
338
  }
352
339
  break;
353
340
  }
354
- #line 123 "node.c.erb"
341
+ #line 110 "prism/templates/src/node.c.erb"
355
342
  case PM_CLASS_VARIABLE_AND_WRITE_NODE: {
356
343
  pm_class_variable_and_write_node_t *cast = (pm_class_variable_and_write_node_t *) node;
357
344
  pm_node_destroy(parser, (pm_node_t *)cast->value);
358
345
  break;
359
346
  }
360
- #line 123 "node.c.erb"
347
+ #line 110 "prism/templates/src/node.c.erb"
361
348
  case PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
362
349
  pm_class_variable_operator_write_node_t *cast = (pm_class_variable_operator_write_node_t *) node;
363
350
  pm_node_destroy(parser, (pm_node_t *)cast->value);
364
351
  break;
365
352
  }
366
- #line 123 "node.c.erb"
353
+ #line 110 "prism/templates/src/node.c.erb"
367
354
  case PM_CLASS_VARIABLE_OR_WRITE_NODE: {
368
355
  pm_class_variable_or_write_node_t *cast = (pm_class_variable_or_write_node_t *) node;
369
356
  pm_node_destroy(parser, (pm_node_t *)cast->value);
370
357
  break;
371
358
  }
372
- #line 123 "node.c.erb"
359
+ #line 110 "prism/templates/src/node.c.erb"
373
360
  case PM_CLASS_VARIABLE_READ_NODE: {
374
361
  break;
375
362
  }
376
- #line 123 "node.c.erb"
363
+ #line 110 "prism/templates/src/node.c.erb"
377
364
  case PM_CLASS_VARIABLE_TARGET_NODE: {
378
365
  break;
379
366
  }
380
- #line 123 "node.c.erb"
367
+ #line 110 "prism/templates/src/node.c.erb"
381
368
  case PM_CLASS_VARIABLE_WRITE_NODE: {
382
369
  pm_class_variable_write_node_t *cast = (pm_class_variable_write_node_t *) node;
383
370
  pm_node_destroy(parser, (pm_node_t *)cast->value);
384
371
  break;
385
372
  }
386
- #line 123 "node.c.erb"
373
+ #line 110 "prism/templates/src/node.c.erb"
387
374
  case PM_CONSTANT_AND_WRITE_NODE: {
388
375
  pm_constant_and_write_node_t *cast = (pm_constant_and_write_node_t *) node;
389
376
  pm_node_destroy(parser, (pm_node_t *)cast->value);
390
377
  break;
391
378
  }
392
- #line 123 "node.c.erb"
379
+ #line 110 "prism/templates/src/node.c.erb"
393
380
  case PM_CONSTANT_OPERATOR_WRITE_NODE: {
394
381
  pm_constant_operator_write_node_t *cast = (pm_constant_operator_write_node_t *) node;
395
382
  pm_node_destroy(parser, (pm_node_t *)cast->value);
396
383
  break;
397
384
  }
398
- #line 123 "node.c.erb"
385
+ #line 110 "prism/templates/src/node.c.erb"
399
386
  case PM_CONSTANT_OR_WRITE_NODE: {
400
387
  pm_constant_or_write_node_t *cast = (pm_constant_or_write_node_t *) node;
401
388
  pm_node_destroy(parser, (pm_node_t *)cast->value);
402
389
  break;
403
390
  }
404
- #line 123 "node.c.erb"
391
+ #line 110 "prism/templates/src/node.c.erb"
405
392
  case PM_CONSTANT_PATH_AND_WRITE_NODE: {
406
393
  pm_constant_path_and_write_node_t *cast = (pm_constant_path_and_write_node_t *) node;
407
394
  pm_node_destroy(parser, (pm_node_t *)cast->target);
408
395
  pm_node_destroy(parser, (pm_node_t *)cast->value);
409
396
  break;
410
397
  }
411
- #line 123 "node.c.erb"
398
+ #line 110 "prism/templates/src/node.c.erb"
412
399
  case PM_CONSTANT_PATH_NODE: {
413
400
  pm_constant_path_node_t *cast = (pm_constant_path_node_t *) node;
414
401
  if (cast->parent != NULL) {
@@ -416,2094 +403,810 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
416
403
  }
417
404
  break;
418
405
  }
419
- #line 123 "node.c.erb"
420
- case PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
421
- pm_constant_path_operator_write_node_t *cast = (pm_constant_path_operator_write_node_t *) node;
422
- pm_node_destroy(parser, (pm_node_t *)cast->target);
423
- pm_node_destroy(parser, (pm_node_t *)cast->value);
424
- break;
425
- }
426
- #line 123 "node.c.erb"
427
- case PM_CONSTANT_PATH_OR_WRITE_NODE: {
428
- pm_constant_path_or_write_node_t *cast = (pm_constant_path_or_write_node_t *) node;
429
- pm_node_destroy(parser, (pm_node_t *)cast->target);
430
- pm_node_destroy(parser, (pm_node_t *)cast->value);
431
- break;
432
- }
433
- #line 123 "node.c.erb"
434
- case PM_CONSTANT_PATH_TARGET_NODE: {
435
- pm_constant_path_target_node_t *cast = (pm_constant_path_target_node_t *) node;
436
- if (cast->parent != NULL) {
437
- pm_node_destroy(parser, (pm_node_t *)cast->parent);
438
- }
439
- break;
440
- }
441
- #line 123 "node.c.erb"
442
- case PM_CONSTANT_PATH_WRITE_NODE: {
443
- pm_constant_path_write_node_t *cast = (pm_constant_path_write_node_t *) node;
444
- pm_node_destroy(parser, (pm_node_t *)cast->target);
445
- pm_node_destroy(parser, (pm_node_t *)cast->value);
446
- break;
447
- }
448
- #line 123 "node.c.erb"
449
- case PM_CONSTANT_READ_NODE: {
450
- break;
451
- }
452
- #line 123 "node.c.erb"
453
- case PM_CONSTANT_TARGET_NODE: {
454
- break;
455
- }
456
- #line 123 "node.c.erb"
457
- case PM_CONSTANT_WRITE_NODE: {
458
- pm_constant_write_node_t *cast = (pm_constant_write_node_t *) node;
459
- pm_node_destroy(parser, (pm_node_t *)cast->value);
460
- break;
461
- }
462
- #line 123 "node.c.erb"
463
- case PM_DEF_NODE: {
464
- pm_def_node_t *cast = (pm_def_node_t *) node;
465
- if (cast->receiver != NULL) {
466
- pm_node_destroy(parser, (pm_node_t *)cast->receiver);
467
- }
468
- if (cast->parameters != NULL) {
469
- pm_node_destroy(parser, (pm_node_t *)cast->parameters);
470
- }
471
- if (cast->body != NULL) {
472
- pm_node_destroy(parser, (pm_node_t *)cast->body);
473
- }
474
- pm_constant_id_list_free(&cast->locals);
475
- break;
476
- }
477
- #line 123 "node.c.erb"
478
- case PM_DEFINED_NODE: {
479
- pm_defined_node_t *cast = (pm_defined_node_t *) node;
480
- pm_node_destroy(parser, (pm_node_t *)cast->value);
481
- break;
482
- }
483
- #line 123 "node.c.erb"
484
- case PM_ELSE_NODE: {
485
- pm_else_node_t *cast = (pm_else_node_t *) node;
486
- if (cast->statements != NULL) {
487
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
488
- }
489
- break;
490
- }
491
- #line 123 "node.c.erb"
492
- case PM_EMBEDDED_STATEMENTS_NODE: {
493
- pm_embedded_statements_node_t *cast = (pm_embedded_statements_node_t *) node;
494
- if (cast->statements != NULL) {
495
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
496
- }
497
- break;
498
- }
499
- #line 123 "node.c.erb"
500
- case PM_EMBEDDED_VARIABLE_NODE: {
501
- pm_embedded_variable_node_t *cast = (pm_embedded_variable_node_t *) node;
502
- pm_node_destroy(parser, (pm_node_t *)cast->variable);
503
- break;
504
- }
505
- #line 123 "node.c.erb"
506
- case PM_ENSURE_NODE: {
507
- pm_ensure_node_t *cast = (pm_ensure_node_t *) node;
508
- if (cast->statements != NULL) {
509
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
510
- }
511
- break;
512
- }
513
- #line 123 "node.c.erb"
514
- case PM_FALSE_NODE: {
515
- break;
516
- }
517
- #line 123 "node.c.erb"
518
- case PM_FIND_PATTERN_NODE: {
519
- pm_find_pattern_node_t *cast = (pm_find_pattern_node_t *) node;
520
- if (cast->constant != NULL) {
521
- pm_node_destroy(parser, (pm_node_t *)cast->constant);
522
- }
523
- pm_node_destroy(parser, (pm_node_t *)cast->left);
524
- pm_node_list_destroy(parser, &cast->requireds);
525
- pm_node_destroy(parser, (pm_node_t *)cast->right);
526
- break;
527
- }
528
- #line 123 "node.c.erb"
529
- case PM_FLIP_FLOP_NODE: {
530
- pm_flip_flop_node_t *cast = (pm_flip_flop_node_t *) node;
531
- if (cast->left != NULL) {
532
- pm_node_destroy(parser, (pm_node_t *)cast->left);
533
- }
534
- if (cast->right != NULL) {
535
- pm_node_destroy(parser, (pm_node_t *)cast->right);
536
- }
537
- break;
538
- }
539
- #line 123 "node.c.erb"
540
- case PM_FLOAT_NODE: {
541
- break;
542
- }
543
- #line 123 "node.c.erb"
544
- case PM_FOR_NODE: {
545
- pm_for_node_t *cast = (pm_for_node_t *) node;
546
- pm_node_destroy(parser, (pm_node_t *)cast->index);
547
- pm_node_destroy(parser, (pm_node_t *)cast->collection);
548
- if (cast->statements != NULL) {
549
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
550
- }
551
- break;
552
- }
553
- #line 123 "node.c.erb"
554
- case PM_FORWARDING_ARGUMENTS_NODE: {
555
- break;
556
- }
557
- #line 123 "node.c.erb"
558
- case PM_FORWARDING_PARAMETER_NODE: {
559
- break;
560
- }
561
- #line 123 "node.c.erb"
562
- case PM_FORWARDING_SUPER_NODE: {
563
- pm_forwarding_super_node_t *cast = (pm_forwarding_super_node_t *) node;
564
- if (cast->block != NULL) {
565
- pm_node_destroy(parser, (pm_node_t *)cast->block);
566
- }
567
- break;
568
- }
569
- #line 123 "node.c.erb"
570
- case PM_GLOBAL_VARIABLE_AND_WRITE_NODE: {
571
- pm_global_variable_and_write_node_t *cast = (pm_global_variable_and_write_node_t *) node;
572
- pm_node_destroy(parser, (pm_node_t *)cast->value);
573
- break;
574
- }
575
- #line 123 "node.c.erb"
576
- case PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
577
- pm_global_variable_operator_write_node_t *cast = (pm_global_variable_operator_write_node_t *) node;
578
- pm_node_destroy(parser, (pm_node_t *)cast->value);
579
- break;
580
- }
581
- #line 123 "node.c.erb"
582
- case PM_GLOBAL_VARIABLE_OR_WRITE_NODE: {
583
- pm_global_variable_or_write_node_t *cast = (pm_global_variable_or_write_node_t *) node;
584
- pm_node_destroy(parser, (pm_node_t *)cast->value);
585
- break;
586
- }
587
- #line 123 "node.c.erb"
588
- case PM_GLOBAL_VARIABLE_READ_NODE: {
589
- break;
590
- }
591
- #line 123 "node.c.erb"
592
- case PM_GLOBAL_VARIABLE_TARGET_NODE: {
593
- break;
594
- }
595
- #line 123 "node.c.erb"
596
- case PM_GLOBAL_VARIABLE_WRITE_NODE: {
597
- pm_global_variable_write_node_t *cast = (pm_global_variable_write_node_t *) node;
598
- pm_node_destroy(parser, (pm_node_t *)cast->value);
599
- break;
600
- }
601
- #line 123 "node.c.erb"
602
- case PM_HASH_NODE: {
603
- pm_hash_node_t *cast = (pm_hash_node_t *) node;
604
- pm_node_list_destroy(parser, &cast->elements);
605
- break;
606
- }
607
- #line 123 "node.c.erb"
608
- case PM_HASH_PATTERN_NODE: {
609
- pm_hash_pattern_node_t *cast = (pm_hash_pattern_node_t *) node;
610
- if (cast->constant != NULL) {
611
- pm_node_destroy(parser, (pm_node_t *)cast->constant);
612
- }
613
- pm_node_list_destroy(parser, &cast->elements);
614
- if (cast->rest != NULL) {
615
- pm_node_destroy(parser, (pm_node_t *)cast->rest);
616
- }
617
- break;
618
- }
619
- #line 123 "node.c.erb"
620
- case PM_IF_NODE: {
621
- pm_if_node_t *cast = (pm_if_node_t *) node;
622
- pm_node_destroy(parser, (pm_node_t *)cast->predicate);
623
- if (cast->statements != NULL) {
624
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
625
- }
626
- if (cast->consequent != NULL) {
627
- pm_node_destroy(parser, (pm_node_t *)cast->consequent);
628
- }
629
- break;
630
- }
631
- #line 123 "node.c.erb"
632
- case PM_IMAGINARY_NODE: {
633
- pm_imaginary_node_t *cast = (pm_imaginary_node_t *) node;
634
- pm_node_destroy(parser, (pm_node_t *)cast->numeric);
635
- break;
636
- }
637
- #line 123 "node.c.erb"
638
- case PM_IMPLICIT_NODE: {
639
- pm_implicit_node_t *cast = (pm_implicit_node_t *) node;
640
- pm_node_destroy(parser, (pm_node_t *)cast->value);
641
- break;
642
- }
643
- #line 123 "node.c.erb"
644
- case PM_IMPLICIT_REST_NODE: {
645
- break;
646
- }
647
- #line 123 "node.c.erb"
648
- case PM_IN_NODE: {
649
- pm_in_node_t *cast = (pm_in_node_t *) node;
650
- pm_node_destroy(parser, (pm_node_t *)cast->pattern);
651
- if (cast->statements != NULL) {
652
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
653
- }
654
- break;
655
- }
656
- #line 123 "node.c.erb"
657
- case PM_INDEX_AND_WRITE_NODE: {
658
- pm_index_and_write_node_t *cast = (pm_index_and_write_node_t *) node;
659
- if (cast->receiver != NULL) {
660
- pm_node_destroy(parser, (pm_node_t *)cast->receiver);
661
- }
662
- if (cast->arguments != NULL) {
663
- pm_node_destroy(parser, (pm_node_t *)cast->arguments);
664
- }
665
- if (cast->block != NULL) {
666
- pm_node_destroy(parser, (pm_node_t *)cast->block);
667
- }
668
- pm_node_destroy(parser, (pm_node_t *)cast->value);
669
- break;
670
- }
671
- #line 123 "node.c.erb"
672
- case PM_INDEX_OPERATOR_WRITE_NODE: {
673
- pm_index_operator_write_node_t *cast = (pm_index_operator_write_node_t *) node;
674
- if (cast->receiver != NULL) {
675
- pm_node_destroy(parser, (pm_node_t *)cast->receiver);
676
- }
677
- if (cast->arguments != NULL) {
678
- pm_node_destroy(parser, (pm_node_t *)cast->arguments);
679
- }
680
- if (cast->block != NULL) {
681
- pm_node_destroy(parser, (pm_node_t *)cast->block);
682
- }
683
- pm_node_destroy(parser, (pm_node_t *)cast->value);
684
- break;
685
- }
686
- #line 123 "node.c.erb"
687
- case PM_INDEX_OR_WRITE_NODE: {
688
- pm_index_or_write_node_t *cast = (pm_index_or_write_node_t *) node;
689
- if (cast->receiver != NULL) {
690
- pm_node_destroy(parser, (pm_node_t *)cast->receiver);
691
- }
692
- if (cast->arguments != NULL) {
693
- pm_node_destroy(parser, (pm_node_t *)cast->arguments);
694
- }
695
- if (cast->block != NULL) {
696
- pm_node_destroy(parser, (pm_node_t *)cast->block);
697
- }
698
- pm_node_destroy(parser, (pm_node_t *)cast->value);
699
- break;
700
- }
701
- #line 123 "node.c.erb"
702
- case PM_INDEX_TARGET_NODE: {
703
- pm_index_target_node_t *cast = (pm_index_target_node_t *) node;
704
- pm_node_destroy(parser, (pm_node_t *)cast->receiver);
705
- if (cast->arguments != NULL) {
706
- pm_node_destroy(parser, (pm_node_t *)cast->arguments);
707
- }
708
- if (cast->block != NULL) {
709
- pm_node_destroy(parser, (pm_node_t *)cast->block);
710
- }
711
- break;
712
- }
713
- #line 123 "node.c.erb"
714
- case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
715
- pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
716
- pm_node_destroy(parser, (pm_node_t *)cast->value);
717
- break;
718
- }
719
- #line 123 "node.c.erb"
720
- case PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
721
- pm_instance_variable_operator_write_node_t *cast = (pm_instance_variable_operator_write_node_t *) node;
722
- pm_node_destroy(parser, (pm_node_t *)cast->value);
723
- break;
724
- }
725
- #line 123 "node.c.erb"
726
- case PM_INSTANCE_VARIABLE_OR_WRITE_NODE: {
727
- pm_instance_variable_or_write_node_t *cast = (pm_instance_variable_or_write_node_t *) node;
728
- pm_node_destroy(parser, (pm_node_t *)cast->value);
729
- break;
730
- }
731
- #line 123 "node.c.erb"
732
- case PM_INSTANCE_VARIABLE_READ_NODE: {
733
- break;
734
- }
735
- #line 123 "node.c.erb"
736
- case PM_INSTANCE_VARIABLE_TARGET_NODE: {
737
- break;
738
- }
739
- #line 123 "node.c.erb"
740
- case PM_INSTANCE_VARIABLE_WRITE_NODE: {
741
- pm_instance_variable_write_node_t *cast = (pm_instance_variable_write_node_t *) node;
742
- pm_node_destroy(parser, (pm_node_t *)cast->value);
743
- break;
744
- }
745
- #line 123 "node.c.erb"
746
- case PM_INTEGER_NODE: {
747
- pm_integer_node_t *cast = (pm_integer_node_t *) node;
748
- pm_integer_free(&cast->value);
749
- break;
750
- }
751
- #line 123 "node.c.erb"
752
- case PM_INTERPOLATED_MATCH_LAST_LINE_NODE: {
753
- pm_interpolated_match_last_line_node_t *cast = (pm_interpolated_match_last_line_node_t *) node;
754
- pm_node_list_destroy(parser, &cast->parts);
755
- break;
756
- }
757
- #line 123 "node.c.erb"
758
- case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
759
- pm_interpolated_regular_expression_node_t *cast = (pm_interpolated_regular_expression_node_t *) node;
760
- pm_node_list_destroy(parser, &cast->parts);
761
- break;
762
- }
763
- #line 123 "node.c.erb"
764
- case PM_INTERPOLATED_STRING_NODE: {
765
- pm_interpolated_string_node_t *cast = (pm_interpolated_string_node_t *) node;
766
- pm_node_list_destroy(parser, &cast->parts);
767
- break;
768
- }
769
- #line 123 "node.c.erb"
770
- case PM_INTERPOLATED_SYMBOL_NODE: {
771
- pm_interpolated_symbol_node_t *cast = (pm_interpolated_symbol_node_t *) node;
772
- pm_node_list_destroy(parser, &cast->parts);
773
- break;
774
- }
775
- #line 123 "node.c.erb"
776
- case PM_INTERPOLATED_X_STRING_NODE: {
777
- pm_interpolated_x_string_node_t *cast = (pm_interpolated_x_string_node_t *) node;
778
- pm_node_list_destroy(parser, &cast->parts);
779
- break;
780
- }
781
- #line 123 "node.c.erb"
782
- case PM_IT_PARAMETERS_NODE: {
783
- break;
784
- }
785
- #line 123 "node.c.erb"
786
- case PM_KEYWORD_HASH_NODE: {
787
- pm_keyword_hash_node_t *cast = (pm_keyword_hash_node_t *) node;
788
- pm_node_list_destroy(parser, &cast->elements);
789
- break;
790
- }
791
- #line 123 "node.c.erb"
792
- case PM_KEYWORD_REST_PARAMETER_NODE: {
793
- break;
794
- }
795
- #line 123 "node.c.erb"
796
- case PM_LAMBDA_NODE: {
797
- pm_lambda_node_t *cast = (pm_lambda_node_t *) node;
798
- pm_constant_id_list_free(&cast->locals);
799
- if (cast->parameters != NULL) {
800
- pm_node_destroy(parser, (pm_node_t *)cast->parameters);
801
- }
802
- if (cast->body != NULL) {
803
- pm_node_destroy(parser, (pm_node_t *)cast->body);
804
- }
805
- break;
806
- }
807
- #line 123 "node.c.erb"
808
- case PM_LOCAL_VARIABLE_AND_WRITE_NODE: {
809
- pm_local_variable_and_write_node_t *cast = (pm_local_variable_and_write_node_t *) node;
810
- pm_node_destroy(parser, (pm_node_t *)cast->value);
811
- break;
812
- }
813
- #line 123 "node.c.erb"
814
- case PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
815
- pm_local_variable_operator_write_node_t *cast = (pm_local_variable_operator_write_node_t *) node;
816
- pm_node_destroy(parser, (pm_node_t *)cast->value);
817
- break;
818
- }
819
- #line 123 "node.c.erb"
820
- case PM_LOCAL_VARIABLE_OR_WRITE_NODE: {
821
- pm_local_variable_or_write_node_t *cast = (pm_local_variable_or_write_node_t *) node;
822
- pm_node_destroy(parser, (pm_node_t *)cast->value);
823
- break;
824
- }
825
- #line 123 "node.c.erb"
826
- case PM_LOCAL_VARIABLE_READ_NODE: {
827
- break;
828
- }
829
- #line 123 "node.c.erb"
830
- case PM_LOCAL_VARIABLE_TARGET_NODE: {
831
- break;
832
- }
833
- #line 123 "node.c.erb"
834
- case PM_LOCAL_VARIABLE_WRITE_NODE: {
835
- pm_local_variable_write_node_t *cast = (pm_local_variable_write_node_t *) node;
836
- pm_node_destroy(parser, (pm_node_t *)cast->value);
837
- break;
838
- }
839
- #line 123 "node.c.erb"
840
- case PM_MATCH_LAST_LINE_NODE: {
841
- pm_match_last_line_node_t *cast = (pm_match_last_line_node_t *) node;
842
- pm_string_free(&cast->unescaped);
843
- break;
844
- }
845
- #line 123 "node.c.erb"
846
- case PM_MATCH_PREDICATE_NODE: {
847
- pm_match_predicate_node_t *cast = (pm_match_predicate_node_t *) node;
848
- pm_node_destroy(parser, (pm_node_t *)cast->value);
849
- pm_node_destroy(parser, (pm_node_t *)cast->pattern);
850
- break;
851
- }
852
- #line 123 "node.c.erb"
853
- case PM_MATCH_REQUIRED_NODE: {
854
- pm_match_required_node_t *cast = (pm_match_required_node_t *) node;
855
- pm_node_destroy(parser, (pm_node_t *)cast->value);
856
- pm_node_destroy(parser, (pm_node_t *)cast->pattern);
857
- break;
858
- }
859
- #line 123 "node.c.erb"
860
- case PM_MATCH_WRITE_NODE: {
861
- pm_match_write_node_t *cast = (pm_match_write_node_t *) node;
862
- pm_node_destroy(parser, (pm_node_t *)cast->call);
863
- pm_node_list_destroy(parser, &cast->targets);
864
- break;
865
- }
866
- #line 123 "node.c.erb"
867
- case PM_MISSING_NODE: {
868
- break;
869
- }
870
- #line 123 "node.c.erb"
871
- case PM_MODULE_NODE: {
872
- pm_module_node_t *cast = (pm_module_node_t *) node;
873
- pm_constant_id_list_free(&cast->locals);
874
- pm_node_destroy(parser, (pm_node_t *)cast->constant_path);
875
- if (cast->body != NULL) {
876
- pm_node_destroy(parser, (pm_node_t *)cast->body);
877
- }
878
- break;
879
- }
880
- #line 123 "node.c.erb"
881
- case PM_MULTI_TARGET_NODE: {
882
- pm_multi_target_node_t *cast = (pm_multi_target_node_t *) node;
883
- pm_node_list_destroy(parser, &cast->lefts);
884
- if (cast->rest != NULL) {
885
- pm_node_destroy(parser, (pm_node_t *)cast->rest);
886
- }
887
- pm_node_list_destroy(parser, &cast->rights);
888
- break;
889
- }
890
- #line 123 "node.c.erb"
891
- case PM_MULTI_WRITE_NODE: {
892
- pm_multi_write_node_t *cast = (pm_multi_write_node_t *) node;
893
- pm_node_list_destroy(parser, &cast->lefts);
894
- if (cast->rest != NULL) {
895
- pm_node_destroy(parser, (pm_node_t *)cast->rest);
896
- }
897
- pm_node_list_destroy(parser, &cast->rights);
898
- pm_node_destroy(parser, (pm_node_t *)cast->value);
899
- break;
900
- }
901
- #line 123 "node.c.erb"
902
- case PM_NEXT_NODE: {
903
- pm_next_node_t *cast = (pm_next_node_t *) node;
904
- if (cast->arguments != NULL) {
905
- pm_node_destroy(parser, (pm_node_t *)cast->arguments);
906
- }
907
- break;
908
- }
909
- #line 123 "node.c.erb"
910
- case PM_NIL_NODE: {
911
- break;
912
- }
913
- #line 123 "node.c.erb"
914
- case PM_NO_KEYWORDS_PARAMETER_NODE: {
915
- break;
916
- }
917
- #line 123 "node.c.erb"
918
- case PM_NUMBERED_PARAMETERS_NODE: {
919
- break;
920
- }
921
- #line 123 "node.c.erb"
922
- case PM_NUMBERED_REFERENCE_READ_NODE: {
923
- break;
924
- }
925
- #line 123 "node.c.erb"
926
- case PM_OPTIONAL_KEYWORD_PARAMETER_NODE: {
927
- pm_optional_keyword_parameter_node_t *cast = (pm_optional_keyword_parameter_node_t *) node;
928
- pm_node_destroy(parser, (pm_node_t *)cast->value);
929
- break;
930
- }
931
- #line 123 "node.c.erb"
932
- case PM_OPTIONAL_PARAMETER_NODE: {
933
- pm_optional_parameter_node_t *cast = (pm_optional_parameter_node_t *) node;
934
- pm_node_destroy(parser, (pm_node_t *)cast->value);
935
- break;
936
- }
937
- #line 123 "node.c.erb"
938
- case PM_OR_NODE: {
939
- pm_or_node_t *cast = (pm_or_node_t *) node;
940
- pm_node_destroy(parser, (pm_node_t *)cast->left);
941
- pm_node_destroy(parser, (pm_node_t *)cast->right);
942
- break;
943
- }
944
- #line 123 "node.c.erb"
945
- case PM_PARAMETERS_NODE: {
946
- pm_parameters_node_t *cast = (pm_parameters_node_t *) node;
947
- pm_node_list_destroy(parser, &cast->requireds);
948
- pm_node_list_destroy(parser, &cast->optionals);
949
- if (cast->rest != NULL) {
950
- pm_node_destroy(parser, (pm_node_t *)cast->rest);
951
- }
952
- pm_node_list_destroy(parser, &cast->posts);
953
- pm_node_list_destroy(parser, &cast->keywords);
954
- if (cast->keyword_rest != NULL) {
955
- pm_node_destroy(parser, (pm_node_t *)cast->keyword_rest);
956
- }
957
- if (cast->block != NULL) {
958
- pm_node_destroy(parser, (pm_node_t *)cast->block);
959
- }
960
- break;
961
- }
962
- #line 123 "node.c.erb"
963
- case PM_PARENTHESES_NODE: {
964
- pm_parentheses_node_t *cast = (pm_parentheses_node_t *) node;
965
- if (cast->body != NULL) {
966
- pm_node_destroy(parser, (pm_node_t *)cast->body);
967
- }
968
- break;
969
- }
970
- #line 123 "node.c.erb"
971
- case PM_PINNED_EXPRESSION_NODE: {
972
- pm_pinned_expression_node_t *cast = (pm_pinned_expression_node_t *) node;
973
- pm_node_destroy(parser, (pm_node_t *)cast->expression);
974
- break;
975
- }
976
- #line 123 "node.c.erb"
977
- case PM_PINNED_VARIABLE_NODE: {
978
- pm_pinned_variable_node_t *cast = (pm_pinned_variable_node_t *) node;
979
- pm_node_destroy(parser, (pm_node_t *)cast->variable);
980
- break;
981
- }
982
- #line 123 "node.c.erb"
983
- case PM_POST_EXECUTION_NODE: {
984
- pm_post_execution_node_t *cast = (pm_post_execution_node_t *) node;
985
- if (cast->statements != NULL) {
986
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
987
- }
988
- break;
989
- }
990
- #line 123 "node.c.erb"
991
- case PM_PRE_EXECUTION_NODE: {
992
- pm_pre_execution_node_t *cast = (pm_pre_execution_node_t *) node;
993
- if (cast->statements != NULL) {
994
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
995
- }
996
- break;
997
- }
998
- #line 123 "node.c.erb"
999
- case PM_PROGRAM_NODE: {
1000
- pm_program_node_t *cast = (pm_program_node_t *) node;
1001
- pm_constant_id_list_free(&cast->locals);
1002
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
1003
- break;
1004
- }
1005
- #line 123 "node.c.erb"
1006
- case PM_RANGE_NODE: {
1007
- pm_range_node_t *cast = (pm_range_node_t *) node;
1008
- if (cast->left != NULL) {
1009
- pm_node_destroy(parser, (pm_node_t *)cast->left);
1010
- }
1011
- if (cast->right != NULL) {
1012
- pm_node_destroy(parser, (pm_node_t *)cast->right);
1013
- }
1014
- break;
1015
- }
1016
- #line 123 "node.c.erb"
1017
- case PM_RATIONAL_NODE: {
1018
- pm_rational_node_t *cast = (pm_rational_node_t *) node;
1019
- pm_node_destroy(parser, (pm_node_t *)cast->numeric);
1020
- break;
1021
- }
1022
- #line 123 "node.c.erb"
1023
- case PM_REDO_NODE: {
1024
- break;
1025
- }
1026
- #line 123 "node.c.erb"
1027
- case PM_REGULAR_EXPRESSION_NODE: {
1028
- pm_regular_expression_node_t *cast = (pm_regular_expression_node_t *) node;
1029
- pm_string_free(&cast->unescaped);
1030
- break;
1031
- }
1032
- #line 123 "node.c.erb"
1033
- case PM_REQUIRED_KEYWORD_PARAMETER_NODE: {
1034
- break;
1035
- }
1036
- #line 123 "node.c.erb"
1037
- case PM_REQUIRED_PARAMETER_NODE: {
1038
- break;
1039
- }
1040
- #line 123 "node.c.erb"
1041
- case PM_RESCUE_MODIFIER_NODE: {
1042
- pm_rescue_modifier_node_t *cast = (pm_rescue_modifier_node_t *) node;
1043
- pm_node_destroy(parser, (pm_node_t *)cast->expression);
1044
- pm_node_destroy(parser, (pm_node_t *)cast->rescue_expression);
1045
- break;
1046
- }
1047
- #line 123 "node.c.erb"
1048
- case PM_RESCUE_NODE: {
1049
- pm_rescue_node_t *cast = (pm_rescue_node_t *) node;
1050
- pm_node_list_destroy(parser, &cast->exceptions);
1051
- if (cast->reference != NULL) {
1052
- pm_node_destroy(parser, (pm_node_t *)cast->reference);
1053
- }
1054
- if (cast->statements != NULL) {
1055
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
1056
- }
1057
- if (cast->consequent != NULL) {
1058
- pm_node_destroy(parser, (pm_node_t *)cast->consequent);
1059
- }
1060
- break;
1061
- }
1062
- #line 123 "node.c.erb"
1063
- case PM_REST_PARAMETER_NODE: {
1064
- break;
1065
- }
1066
- #line 123 "node.c.erb"
1067
- case PM_RETRY_NODE: {
1068
- break;
1069
- }
1070
- #line 123 "node.c.erb"
1071
- case PM_RETURN_NODE: {
1072
- pm_return_node_t *cast = (pm_return_node_t *) node;
1073
- if (cast->arguments != NULL) {
1074
- pm_node_destroy(parser, (pm_node_t *)cast->arguments);
1075
- }
1076
- break;
1077
- }
1078
- #line 123 "node.c.erb"
1079
- case PM_SELF_NODE: {
1080
- break;
1081
- }
1082
- #line 123 "node.c.erb"
1083
- case PM_SHAREABLE_CONSTANT_NODE: {
1084
- pm_shareable_constant_node_t *cast = (pm_shareable_constant_node_t *) node;
1085
- pm_node_destroy(parser, (pm_node_t *)cast->write);
1086
- break;
1087
- }
1088
- #line 123 "node.c.erb"
1089
- case PM_SINGLETON_CLASS_NODE: {
1090
- pm_singleton_class_node_t *cast = (pm_singleton_class_node_t *) node;
1091
- pm_constant_id_list_free(&cast->locals);
1092
- pm_node_destroy(parser, (pm_node_t *)cast->expression);
1093
- if (cast->body != NULL) {
1094
- pm_node_destroy(parser, (pm_node_t *)cast->body);
1095
- }
1096
- break;
1097
- }
1098
- #line 123 "node.c.erb"
1099
- case PM_SOURCE_ENCODING_NODE: {
1100
- break;
1101
- }
1102
- #line 123 "node.c.erb"
1103
- case PM_SOURCE_FILE_NODE: {
1104
- pm_source_file_node_t *cast = (pm_source_file_node_t *) node;
1105
- pm_string_free(&cast->filepath);
1106
- break;
1107
- }
1108
- #line 123 "node.c.erb"
1109
- case PM_SOURCE_LINE_NODE: {
1110
- break;
1111
- }
1112
- #line 123 "node.c.erb"
1113
- case PM_SPLAT_NODE: {
1114
- pm_splat_node_t *cast = (pm_splat_node_t *) node;
1115
- if (cast->expression != NULL) {
1116
- pm_node_destroy(parser, (pm_node_t *)cast->expression);
1117
- }
1118
- break;
1119
- }
1120
- #line 123 "node.c.erb"
1121
- case PM_STATEMENTS_NODE: {
1122
- pm_statements_node_t *cast = (pm_statements_node_t *) node;
1123
- pm_node_list_destroy(parser, &cast->body);
1124
- break;
1125
- }
1126
- #line 123 "node.c.erb"
1127
- case PM_STRING_NODE: {
1128
- pm_string_node_t *cast = (pm_string_node_t *) node;
1129
- pm_string_free(&cast->unescaped);
1130
- break;
1131
- }
1132
- #line 123 "node.c.erb"
1133
- case PM_SUPER_NODE: {
1134
- pm_super_node_t *cast = (pm_super_node_t *) node;
1135
- if (cast->arguments != NULL) {
1136
- pm_node_destroy(parser, (pm_node_t *)cast->arguments);
1137
- }
1138
- if (cast->block != NULL) {
1139
- pm_node_destroy(parser, (pm_node_t *)cast->block);
1140
- }
1141
- break;
1142
- }
1143
- #line 123 "node.c.erb"
1144
- case PM_SYMBOL_NODE: {
1145
- pm_symbol_node_t *cast = (pm_symbol_node_t *) node;
1146
- pm_string_free(&cast->unescaped);
1147
- break;
1148
- }
1149
- #line 123 "node.c.erb"
1150
- case PM_TRUE_NODE: {
1151
- break;
1152
- }
1153
- #line 123 "node.c.erb"
1154
- case PM_UNDEF_NODE: {
1155
- pm_undef_node_t *cast = (pm_undef_node_t *) node;
1156
- pm_node_list_destroy(parser, &cast->names);
1157
- break;
1158
- }
1159
- #line 123 "node.c.erb"
1160
- case PM_UNLESS_NODE: {
1161
- pm_unless_node_t *cast = (pm_unless_node_t *) node;
1162
- pm_node_destroy(parser, (pm_node_t *)cast->predicate);
1163
- if (cast->statements != NULL) {
1164
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
1165
- }
1166
- if (cast->consequent != NULL) {
1167
- pm_node_destroy(parser, (pm_node_t *)cast->consequent);
1168
- }
1169
- break;
1170
- }
1171
- #line 123 "node.c.erb"
1172
- case PM_UNTIL_NODE: {
1173
- pm_until_node_t *cast = (pm_until_node_t *) node;
1174
- pm_node_destroy(parser, (pm_node_t *)cast->predicate);
1175
- if (cast->statements != NULL) {
1176
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
1177
- }
1178
- break;
1179
- }
1180
- #line 123 "node.c.erb"
1181
- case PM_WHEN_NODE: {
1182
- pm_when_node_t *cast = (pm_when_node_t *) node;
1183
- pm_node_list_destroy(parser, &cast->conditions);
1184
- if (cast->statements != NULL) {
1185
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
1186
- }
1187
- break;
1188
- }
1189
- #line 123 "node.c.erb"
1190
- case PM_WHILE_NODE: {
1191
- pm_while_node_t *cast = (pm_while_node_t *) node;
1192
- pm_node_destroy(parser, (pm_node_t *)cast->predicate);
1193
- if (cast->statements != NULL) {
1194
- pm_node_destroy(parser, (pm_node_t *)cast->statements);
1195
- }
1196
- break;
1197
- }
1198
- #line 123 "node.c.erb"
1199
- case PM_X_STRING_NODE: {
1200
- pm_x_string_node_t *cast = (pm_x_string_node_t *) node;
1201
- pm_string_free(&cast->unescaped);
1202
- break;
1203
- }
1204
- #line 123 "node.c.erb"
1205
- case PM_YIELD_NODE: {
1206
- pm_yield_node_t *cast = (pm_yield_node_t *) node;
1207
- if (cast->arguments != NULL) {
1208
- pm_node_destroy(parser, (pm_node_t *)cast->arguments);
1209
- }
1210
- break;
1211
- }
1212
- #line 152 "node.c.erb"
1213
- default:
1214
- assert(false && "unreachable");
1215
- break;
1216
- }
1217
- xfree(node);
1218
- }
1219
-
1220
- static void
1221
- pm_node_memsize_node(pm_node_t *node, pm_memsize_t *memsize) {
1222
- memsize->node_count++;
1223
-
1224
- switch (PM_NODE_TYPE(node)) {
1225
- // We do not calculate memsize of a ScopeNode
1226
- // as it should never be generated
1227
- case PM_SCOPE_NODE:
1228
- return;
1229
- #line 170 "node.c.erb"
1230
- case PM_ALIAS_GLOBAL_VARIABLE_NODE: {
1231
- pm_alias_global_variable_node_t *cast = (pm_alias_global_variable_node_t *) node;
1232
- memsize->memsize += sizeof(*cast);
1233
- pm_node_memsize_node((pm_node_t *)cast->new_name, memsize);
1234
- pm_node_memsize_node((pm_node_t *)cast->old_name, memsize);
1235
- break;
1236
- }
1237
- #line 170 "node.c.erb"
1238
- case PM_ALIAS_METHOD_NODE: {
1239
- pm_alias_method_node_t *cast = (pm_alias_method_node_t *) node;
1240
- memsize->memsize += sizeof(*cast);
1241
- pm_node_memsize_node((pm_node_t *)cast->new_name, memsize);
1242
- pm_node_memsize_node((pm_node_t *)cast->old_name, memsize);
1243
- break;
1244
- }
1245
- #line 170 "node.c.erb"
1246
- case PM_ALTERNATION_PATTERN_NODE: {
1247
- pm_alternation_pattern_node_t *cast = (pm_alternation_pattern_node_t *) node;
1248
- memsize->memsize += sizeof(*cast);
1249
- pm_node_memsize_node((pm_node_t *)cast->left, memsize);
1250
- pm_node_memsize_node((pm_node_t *)cast->right, memsize);
1251
- break;
1252
- }
1253
- #line 170 "node.c.erb"
1254
- case PM_AND_NODE: {
1255
- pm_and_node_t *cast = (pm_and_node_t *) node;
1256
- memsize->memsize += sizeof(*cast);
1257
- pm_node_memsize_node((pm_node_t *)cast->left, memsize);
1258
- pm_node_memsize_node((pm_node_t *)cast->right, memsize);
1259
- break;
1260
- }
1261
- #line 170 "node.c.erb"
1262
- case PM_ARGUMENTS_NODE: {
1263
- pm_arguments_node_t *cast = (pm_arguments_node_t *) node;
1264
- memsize->memsize += sizeof(*cast);
1265
- memsize->memsize += (pm_node_list_memsize(&cast->arguments, memsize) - sizeof(pm_node_list_t));
1266
- break;
1267
- }
1268
- #line 170 "node.c.erb"
1269
- case PM_ARRAY_NODE: {
1270
- pm_array_node_t *cast = (pm_array_node_t *) node;
1271
- memsize->memsize += sizeof(*cast);
1272
- memsize->memsize += (pm_node_list_memsize(&cast->elements, memsize) - sizeof(pm_node_list_t));
1273
- break;
1274
- }
1275
- #line 170 "node.c.erb"
1276
- case PM_ARRAY_PATTERN_NODE: {
1277
- pm_array_pattern_node_t *cast = (pm_array_pattern_node_t *) node;
1278
- memsize->memsize += sizeof(*cast);
1279
- if (cast->constant != NULL) {
1280
- pm_node_memsize_node((pm_node_t *)cast->constant, memsize);
1281
- }
1282
- memsize->memsize += (pm_node_list_memsize(&cast->requireds, memsize) - sizeof(pm_node_list_t));
1283
- if (cast->rest != NULL) {
1284
- pm_node_memsize_node((pm_node_t *)cast->rest, memsize);
1285
- }
1286
- memsize->memsize += (pm_node_list_memsize(&cast->posts, memsize) - sizeof(pm_node_list_t));
1287
- break;
1288
- }
1289
- #line 170 "node.c.erb"
1290
- case PM_ASSOC_NODE: {
1291
- pm_assoc_node_t *cast = (pm_assoc_node_t *) node;
1292
- memsize->memsize += sizeof(*cast);
1293
- pm_node_memsize_node((pm_node_t *)cast->key, memsize);
1294
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1295
- break;
1296
- }
1297
- #line 170 "node.c.erb"
1298
- case PM_ASSOC_SPLAT_NODE: {
1299
- pm_assoc_splat_node_t *cast = (pm_assoc_splat_node_t *) node;
1300
- memsize->memsize += sizeof(*cast);
1301
- if (cast->value != NULL) {
1302
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1303
- }
1304
- break;
1305
- }
1306
- #line 170 "node.c.erb"
1307
- case PM_BACK_REFERENCE_READ_NODE: {
1308
- pm_back_reference_read_node_t *cast = (pm_back_reference_read_node_t *) node;
1309
- memsize->memsize += sizeof(*cast);
1310
- break;
1311
- }
1312
- #line 170 "node.c.erb"
1313
- case PM_BEGIN_NODE: {
1314
- pm_begin_node_t *cast = (pm_begin_node_t *) node;
1315
- memsize->memsize += sizeof(*cast);
1316
- if (cast->statements != NULL) {
1317
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
1318
- }
1319
- if (cast->rescue_clause != NULL) {
1320
- pm_node_memsize_node((pm_node_t *)cast->rescue_clause, memsize);
1321
- }
1322
- if (cast->else_clause != NULL) {
1323
- pm_node_memsize_node((pm_node_t *)cast->else_clause, memsize);
1324
- }
1325
- if (cast->ensure_clause != NULL) {
1326
- pm_node_memsize_node((pm_node_t *)cast->ensure_clause, memsize);
1327
- }
1328
- break;
1329
- }
1330
- #line 170 "node.c.erb"
1331
- case PM_BLOCK_ARGUMENT_NODE: {
1332
- pm_block_argument_node_t *cast = (pm_block_argument_node_t *) node;
1333
- memsize->memsize += sizeof(*cast);
1334
- if (cast->expression != NULL) {
1335
- pm_node_memsize_node((pm_node_t *)cast->expression, memsize);
1336
- }
1337
- break;
1338
- }
1339
- #line 170 "node.c.erb"
1340
- case PM_BLOCK_LOCAL_VARIABLE_NODE: {
1341
- pm_block_local_variable_node_t *cast = (pm_block_local_variable_node_t *) node;
1342
- memsize->memsize += sizeof(*cast);
1343
- break;
1344
- }
1345
- #line 170 "node.c.erb"
1346
- case PM_BLOCK_NODE: {
1347
- pm_block_node_t *cast = (pm_block_node_t *) node;
1348
- memsize->memsize += sizeof(*cast);
1349
- memsize->memsize += (pm_constant_id_list_memsize(&cast->locals) - sizeof(pm_constant_id_list_t));
1350
- if (cast->parameters != NULL) {
1351
- pm_node_memsize_node((pm_node_t *)cast->parameters, memsize);
1352
- }
1353
- if (cast->body != NULL) {
1354
- pm_node_memsize_node((pm_node_t *)cast->body, memsize);
1355
- }
1356
- break;
1357
- }
1358
- #line 170 "node.c.erb"
1359
- case PM_BLOCK_PARAMETER_NODE: {
1360
- pm_block_parameter_node_t *cast = (pm_block_parameter_node_t *) node;
1361
- memsize->memsize += sizeof(*cast);
1362
- break;
1363
- }
1364
- #line 170 "node.c.erb"
1365
- case PM_BLOCK_PARAMETERS_NODE: {
1366
- pm_block_parameters_node_t *cast = (pm_block_parameters_node_t *) node;
1367
- memsize->memsize += sizeof(*cast);
1368
- if (cast->parameters != NULL) {
1369
- pm_node_memsize_node((pm_node_t *)cast->parameters, memsize);
1370
- }
1371
- memsize->memsize += (pm_node_list_memsize(&cast->locals, memsize) - sizeof(pm_node_list_t));
1372
- break;
1373
- }
1374
- #line 170 "node.c.erb"
1375
- case PM_BREAK_NODE: {
1376
- pm_break_node_t *cast = (pm_break_node_t *) node;
1377
- memsize->memsize += sizeof(*cast);
1378
- if (cast->arguments != NULL) {
1379
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
1380
- }
1381
- break;
1382
- }
1383
- #line 170 "node.c.erb"
1384
- case PM_CALL_AND_WRITE_NODE: {
1385
- pm_call_and_write_node_t *cast = (pm_call_and_write_node_t *) node;
1386
- memsize->memsize += sizeof(*cast);
1387
- if (cast->receiver != NULL) {
1388
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
1389
- }
1390
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1391
- break;
1392
- }
1393
- #line 170 "node.c.erb"
1394
- case PM_CALL_NODE: {
1395
- pm_call_node_t *cast = (pm_call_node_t *) node;
1396
- memsize->memsize += sizeof(*cast);
1397
- if (cast->receiver != NULL) {
1398
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
1399
- }
1400
- if (cast->arguments != NULL) {
1401
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
1402
- }
1403
- if (cast->block != NULL) {
1404
- pm_node_memsize_node((pm_node_t *)cast->block, memsize);
1405
- }
1406
- break;
1407
- }
1408
- #line 170 "node.c.erb"
1409
- case PM_CALL_OPERATOR_WRITE_NODE: {
1410
- pm_call_operator_write_node_t *cast = (pm_call_operator_write_node_t *) node;
1411
- memsize->memsize += sizeof(*cast);
1412
- if (cast->receiver != NULL) {
1413
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
1414
- }
1415
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1416
- break;
1417
- }
1418
- #line 170 "node.c.erb"
1419
- case PM_CALL_OR_WRITE_NODE: {
1420
- pm_call_or_write_node_t *cast = (pm_call_or_write_node_t *) node;
1421
- memsize->memsize += sizeof(*cast);
1422
- if (cast->receiver != NULL) {
1423
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
1424
- }
1425
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1426
- break;
1427
- }
1428
- #line 170 "node.c.erb"
1429
- case PM_CALL_TARGET_NODE: {
1430
- pm_call_target_node_t *cast = (pm_call_target_node_t *) node;
1431
- memsize->memsize += sizeof(*cast);
1432
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
1433
- break;
1434
- }
1435
- #line 170 "node.c.erb"
1436
- case PM_CAPTURE_PATTERN_NODE: {
1437
- pm_capture_pattern_node_t *cast = (pm_capture_pattern_node_t *) node;
1438
- memsize->memsize += sizeof(*cast);
1439
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1440
- pm_node_memsize_node((pm_node_t *)cast->target, memsize);
1441
- break;
1442
- }
1443
- #line 170 "node.c.erb"
1444
- case PM_CASE_MATCH_NODE: {
1445
- pm_case_match_node_t *cast = (pm_case_match_node_t *) node;
1446
- memsize->memsize += sizeof(*cast);
1447
- if (cast->predicate != NULL) {
1448
- pm_node_memsize_node((pm_node_t *)cast->predicate, memsize);
1449
- }
1450
- memsize->memsize += (pm_node_list_memsize(&cast->conditions, memsize) - sizeof(pm_node_list_t));
1451
- if (cast->consequent != NULL) {
1452
- pm_node_memsize_node((pm_node_t *)cast->consequent, memsize);
1453
- }
1454
- break;
1455
- }
1456
- #line 170 "node.c.erb"
1457
- case PM_CASE_NODE: {
1458
- pm_case_node_t *cast = (pm_case_node_t *) node;
1459
- memsize->memsize += sizeof(*cast);
1460
- if (cast->predicate != NULL) {
1461
- pm_node_memsize_node((pm_node_t *)cast->predicate, memsize);
1462
- }
1463
- memsize->memsize += (pm_node_list_memsize(&cast->conditions, memsize) - sizeof(pm_node_list_t));
1464
- if (cast->consequent != NULL) {
1465
- pm_node_memsize_node((pm_node_t *)cast->consequent, memsize);
1466
- }
1467
- break;
1468
- }
1469
- #line 170 "node.c.erb"
1470
- case PM_CLASS_NODE: {
1471
- pm_class_node_t *cast = (pm_class_node_t *) node;
1472
- memsize->memsize += sizeof(*cast);
1473
- memsize->memsize += (pm_constant_id_list_memsize(&cast->locals) - sizeof(pm_constant_id_list_t));
1474
- pm_node_memsize_node((pm_node_t *)cast->constant_path, memsize);
1475
- if (cast->superclass != NULL) {
1476
- pm_node_memsize_node((pm_node_t *)cast->superclass, memsize);
1477
- }
1478
- if (cast->body != NULL) {
1479
- pm_node_memsize_node((pm_node_t *)cast->body, memsize);
1480
- }
1481
- break;
1482
- }
1483
- #line 170 "node.c.erb"
1484
- case PM_CLASS_VARIABLE_AND_WRITE_NODE: {
1485
- pm_class_variable_and_write_node_t *cast = (pm_class_variable_and_write_node_t *) node;
1486
- memsize->memsize += sizeof(*cast);
1487
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1488
- break;
1489
- }
1490
- #line 170 "node.c.erb"
1491
- case PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
1492
- pm_class_variable_operator_write_node_t *cast = (pm_class_variable_operator_write_node_t *) node;
1493
- memsize->memsize += sizeof(*cast);
1494
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1495
- break;
1496
- }
1497
- #line 170 "node.c.erb"
1498
- case PM_CLASS_VARIABLE_OR_WRITE_NODE: {
1499
- pm_class_variable_or_write_node_t *cast = (pm_class_variable_or_write_node_t *) node;
1500
- memsize->memsize += sizeof(*cast);
1501
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1502
- break;
1503
- }
1504
- #line 170 "node.c.erb"
1505
- case PM_CLASS_VARIABLE_READ_NODE: {
1506
- pm_class_variable_read_node_t *cast = (pm_class_variable_read_node_t *) node;
1507
- memsize->memsize += sizeof(*cast);
1508
- break;
1509
- }
1510
- #line 170 "node.c.erb"
1511
- case PM_CLASS_VARIABLE_TARGET_NODE: {
1512
- pm_class_variable_target_node_t *cast = (pm_class_variable_target_node_t *) node;
1513
- memsize->memsize += sizeof(*cast);
1514
- break;
1515
- }
1516
- #line 170 "node.c.erb"
1517
- case PM_CLASS_VARIABLE_WRITE_NODE: {
1518
- pm_class_variable_write_node_t *cast = (pm_class_variable_write_node_t *) node;
1519
- memsize->memsize += sizeof(*cast);
1520
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1521
- break;
1522
- }
1523
- #line 170 "node.c.erb"
1524
- case PM_CONSTANT_AND_WRITE_NODE: {
1525
- pm_constant_and_write_node_t *cast = (pm_constant_and_write_node_t *) node;
1526
- memsize->memsize += sizeof(*cast);
1527
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1528
- break;
1529
- }
1530
- #line 170 "node.c.erb"
1531
- case PM_CONSTANT_OPERATOR_WRITE_NODE: {
1532
- pm_constant_operator_write_node_t *cast = (pm_constant_operator_write_node_t *) node;
1533
- memsize->memsize += sizeof(*cast);
1534
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1535
- break;
1536
- }
1537
- #line 170 "node.c.erb"
1538
- case PM_CONSTANT_OR_WRITE_NODE: {
1539
- pm_constant_or_write_node_t *cast = (pm_constant_or_write_node_t *) node;
1540
- memsize->memsize += sizeof(*cast);
1541
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1542
- break;
1543
- }
1544
- #line 170 "node.c.erb"
1545
- case PM_CONSTANT_PATH_AND_WRITE_NODE: {
1546
- pm_constant_path_and_write_node_t *cast = (pm_constant_path_and_write_node_t *) node;
1547
- memsize->memsize += sizeof(*cast);
1548
- pm_node_memsize_node((pm_node_t *)cast->target, memsize);
1549
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
1550
- break;
1551
- }
1552
- #line 170 "node.c.erb"
1553
- case PM_CONSTANT_PATH_NODE: {
1554
- pm_constant_path_node_t *cast = (pm_constant_path_node_t *) node;
1555
- memsize->memsize += sizeof(*cast);
1556
- if (cast->parent != NULL) {
1557
- pm_node_memsize_node((pm_node_t *)cast->parent, memsize);
1558
- }
1559
- break;
1560
- }
1561
- #line 170 "node.c.erb"
406
+ #line 110 "prism/templates/src/node.c.erb"
1562
407
  case PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
1563
408
  pm_constant_path_operator_write_node_t *cast = (pm_constant_path_operator_write_node_t *) node;
1564
- memsize->memsize += sizeof(*cast);
1565
- pm_node_memsize_node((pm_node_t *)cast->target, memsize);
1566
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
409
+ pm_node_destroy(parser, (pm_node_t *)cast->target);
410
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1567
411
  break;
1568
412
  }
1569
- #line 170 "node.c.erb"
413
+ #line 110 "prism/templates/src/node.c.erb"
1570
414
  case PM_CONSTANT_PATH_OR_WRITE_NODE: {
1571
415
  pm_constant_path_or_write_node_t *cast = (pm_constant_path_or_write_node_t *) node;
1572
- memsize->memsize += sizeof(*cast);
1573
- pm_node_memsize_node((pm_node_t *)cast->target, memsize);
1574
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
416
+ pm_node_destroy(parser, (pm_node_t *)cast->target);
417
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1575
418
  break;
1576
419
  }
1577
- #line 170 "node.c.erb"
420
+ #line 110 "prism/templates/src/node.c.erb"
1578
421
  case PM_CONSTANT_PATH_TARGET_NODE: {
1579
422
  pm_constant_path_target_node_t *cast = (pm_constant_path_target_node_t *) node;
1580
- memsize->memsize += sizeof(*cast);
1581
423
  if (cast->parent != NULL) {
1582
- pm_node_memsize_node((pm_node_t *)cast->parent, memsize);
424
+ pm_node_destroy(parser, (pm_node_t *)cast->parent);
1583
425
  }
1584
426
  break;
1585
427
  }
1586
- #line 170 "node.c.erb"
428
+ #line 110 "prism/templates/src/node.c.erb"
1587
429
  case PM_CONSTANT_PATH_WRITE_NODE: {
1588
430
  pm_constant_path_write_node_t *cast = (pm_constant_path_write_node_t *) node;
1589
- memsize->memsize += sizeof(*cast);
1590
- pm_node_memsize_node((pm_node_t *)cast->target, memsize);
1591
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
431
+ pm_node_destroy(parser, (pm_node_t *)cast->target);
432
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1592
433
  break;
1593
434
  }
1594
- #line 170 "node.c.erb"
435
+ #line 110 "prism/templates/src/node.c.erb"
1595
436
  case PM_CONSTANT_READ_NODE: {
1596
- pm_constant_read_node_t *cast = (pm_constant_read_node_t *) node;
1597
- memsize->memsize += sizeof(*cast);
1598
437
  break;
1599
438
  }
1600
- #line 170 "node.c.erb"
439
+ #line 110 "prism/templates/src/node.c.erb"
1601
440
  case PM_CONSTANT_TARGET_NODE: {
1602
- pm_constant_target_node_t *cast = (pm_constant_target_node_t *) node;
1603
- memsize->memsize += sizeof(*cast);
1604
441
  break;
1605
442
  }
1606
- #line 170 "node.c.erb"
443
+ #line 110 "prism/templates/src/node.c.erb"
1607
444
  case PM_CONSTANT_WRITE_NODE: {
1608
445
  pm_constant_write_node_t *cast = (pm_constant_write_node_t *) node;
1609
- memsize->memsize += sizeof(*cast);
1610
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
446
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1611
447
  break;
1612
448
  }
1613
- #line 170 "node.c.erb"
449
+ #line 110 "prism/templates/src/node.c.erb"
1614
450
  case PM_DEF_NODE: {
1615
451
  pm_def_node_t *cast = (pm_def_node_t *) node;
1616
- memsize->memsize += sizeof(*cast);
1617
452
  if (cast->receiver != NULL) {
1618
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
453
+ pm_node_destroy(parser, (pm_node_t *)cast->receiver);
1619
454
  }
1620
455
  if (cast->parameters != NULL) {
1621
- pm_node_memsize_node((pm_node_t *)cast->parameters, memsize);
456
+ pm_node_destroy(parser, (pm_node_t *)cast->parameters);
1622
457
  }
1623
458
  if (cast->body != NULL) {
1624
- pm_node_memsize_node((pm_node_t *)cast->body, memsize);
459
+ pm_node_destroy(parser, (pm_node_t *)cast->body);
1625
460
  }
1626
- memsize->memsize += (pm_constant_id_list_memsize(&cast->locals) - sizeof(pm_constant_id_list_t));
461
+ pm_constant_id_list_free(&cast->locals);
1627
462
  break;
1628
463
  }
1629
- #line 170 "node.c.erb"
464
+ #line 110 "prism/templates/src/node.c.erb"
1630
465
  case PM_DEFINED_NODE: {
1631
466
  pm_defined_node_t *cast = (pm_defined_node_t *) node;
1632
- memsize->memsize += sizeof(*cast);
1633
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
467
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1634
468
  break;
1635
469
  }
1636
- #line 170 "node.c.erb"
470
+ #line 110 "prism/templates/src/node.c.erb"
1637
471
  case PM_ELSE_NODE: {
1638
472
  pm_else_node_t *cast = (pm_else_node_t *) node;
1639
- memsize->memsize += sizeof(*cast);
1640
473
  if (cast->statements != NULL) {
1641
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
474
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
1642
475
  }
1643
476
  break;
1644
477
  }
1645
- #line 170 "node.c.erb"
478
+ #line 110 "prism/templates/src/node.c.erb"
1646
479
  case PM_EMBEDDED_STATEMENTS_NODE: {
1647
480
  pm_embedded_statements_node_t *cast = (pm_embedded_statements_node_t *) node;
1648
- memsize->memsize += sizeof(*cast);
1649
481
  if (cast->statements != NULL) {
1650
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
482
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
1651
483
  }
1652
484
  break;
1653
485
  }
1654
- #line 170 "node.c.erb"
486
+ #line 110 "prism/templates/src/node.c.erb"
1655
487
  case PM_EMBEDDED_VARIABLE_NODE: {
1656
488
  pm_embedded_variable_node_t *cast = (pm_embedded_variable_node_t *) node;
1657
- memsize->memsize += sizeof(*cast);
1658
- pm_node_memsize_node((pm_node_t *)cast->variable, memsize);
489
+ pm_node_destroy(parser, (pm_node_t *)cast->variable);
1659
490
  break;
1660
491
  }
1661
- #line 170 "node.c.erb"
492
+ #line 110 "prism/templates/src/node.c.erb"
1662
493
  case PM_ENSURE_NODE: {
1663
494
  pm_ensure_node_t *cast = (pm_ensure_node_t *) node;
1664
- memsize->memsize += sizeof(*cast);
1665
495
  if (cast->statements != NULL) {
1666
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
496
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
1667
497
  }
1668
498
  break;
1669
499
  }
1670
- #line 170 "node.c.erb"
500
+ #line 110 "prism/templates/src/node.c.erb"
1671
501
  case PM_FALSE_NODE: {
1672
- pm_false_node_t *cast = (pm_false_node_t *) node;
1673
- memsize->memsize += sizeof(*cast);
1674
502
  break;
1675
503
  }
1676
- #line 170 "node.c.erb"
504
+ #line 110 "prism/templates/src/node.c.erb"
1677
505
  case PM_FIND_PATTERN_NODE: {
1678
506
  pm_find_pattern_node_t *cast = (pm_find_pattern_node_t *) node;
1679
- memsize->memsize += sizeof(*cast);
1680
507
  if (cast->constant != NULL) {
1681
- pm_node_memsize_node((pm_node_t *)cast->constant, memsize);
508
+ pm_node_destroy(parser, (pm_node_t *)cast->constant);
1682
509
  }
1683
- pm_node_memsize_node((pm_node_t *)cast->left, memsize);
1684
- memsize->memsize += (pm_node_list_memsize(&cast->requireds, memsize) - sizeof(pm_node_list_t));
1685
- pm_node_memsize_node((pm_node_t *)cast->right, memsize);
510
+ pm_node_destroy(parser, (pm_node_t *)cast->left);
511
+ pm_node_list_destroy(parser, &cast->requireds);
512
+ pm_node_destroy(parser, (pm_node_t *)cast->right);
1686
513
  break;
1687
514
  }
1688
- #line 170 "node.c.erb"
515
+ #line 110 "prism/templates/src/node.c.erb"
1689
516
  case PM_FLIP_FLOP_NODE: {
1690
517
  pm_flip_flop_node_t *cast = (pm_flip_flop_node_t *) node;
1691
- memsize->memsize += sizeof(*cast);
1692
518
  if (cast->left != NULL) {
1693
- pm_node_memsize_node((pm_node_t *)cast->left, memsize);
519
+ pm_node_destroy(parser, (pm_node_t *)cast->left);
1694
520
  }
1695
521
  if (cast->right != NULL) {
1696
- pm_node_memsize_node((pm_node_t *)cast->right, memsize);
522
+ pm_node_destroy(parser, (pm_node_t *)cast->right);
1697
523
  }
1698
524
  break;
1699
525
  }
1700
- #line 170 "node.c.erb"
526
+ #line 110 "prism/templates/src/node.c.erb"
1701
527
  case PM_FLOAT_NODE: {
1702
- pm_float_node_t *cast = (pm_float_node_t *) node;
1703
- memsize->memsize += sizeof(*cast);
1704
528
  break;
1705
529
  }
1706
- #line 170 "node.c.erb"
530
+ #line 110 "prism/templates/src/node.c.erb"
1707
531
  case PM_FOR_NODE: {
1708
532
  pm_for_node_t *cast = (pm_for_node_t *) node;
1709
- memsize->memsize += sizeof(*cast);
1710
- pm_node_memsize_node((pm_node_t *)cast->index, memsize);
1711
- pm_node_memsize_node((pm_node_t *)cast->collection, memsize);
533
+ pm_node_destroy(parser, (pm_node_t *)cast->index);
534
+ pm_node_destroy(parser, (pm_node_t *)cast->collection);
1712
535
  if (cast->statements != NULL) {
1713
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
536
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
1714
537
  }
1715
538
  break;
1716
539
  }
1717
- #line 170 "node.c.erb"
540
+ #line 110 "prism/templates/src/node.c.erb"
1718
541
  case PM_FORWARDING_ARGUMENTS_NODE: {
1719
- pm_forwarding_arguments_node_t *cast = (pm_forwarding_arguments_node_t *) node;
1720
- memsize->memsize += sizeof(*cast);
1721
542
  break;
1722
543
  }
1723
- #line 170 "node.c.erb"
544
+ #line 110 "prism/templates/src/node.c.erb"
1724
545
  case PM_FORWARDING_PARAMETER_NODE: {
1725
- pm_forwarding_parameter_node_t *cast = (pm_forwarding_parameter_node_t *) node;
1726
- memsize->memsize += sizeof(*cast);
1727
546
  break;
1728
547
  }
1729
- #line 170 "node.c.erb"
548
+ #line 110 "prism/templates/src/node.c.erb"
1730
549
  case PM_FORWARDING_SUPER_NODE: {
1731
550
  pm_forwarding_super_node_t *cast = (pm_forwarding_super_node_t *) node;
1732
- memsize->memsize += sizeof(*cast);
1733
551
  if (cast->block != NULL) {
1734
- pm_node_memsize_node((pm_node_t *)cast->block, memsize);
552
+ pm_node_destroy(parser, (pm_node_t *)cast->block);
1735
553
  }
1736
554
  break;
1737
555
  }
1738
- #line 170 "node.c.erb"
556
+ #line 110 "prism/templates/src/node.c.erb"
1739
557
  case PM_GLOBAL_VARIABLE_AND_WRITE_NODE: {
1740
558
  pm_global_variable_and_write_node_t *cast = (pm_global_variable_and_write_node_t *) node;
1741
- memsize->memsize += sizeof(*cast);
1742
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
559
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1743
560
  break;
1744
561
  }
1745
- #line 170 "node.c.erb"
562
+ #line 110 "prism/templates/src/node.c.erb"
1746
563
  case PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
1747
564
  pm_global_variable_operator_write_node_t *cast = (pm_global_variable_operator_write_node_t *) node;
1748
- memsize->memsize += sizeof(*cast);
1749
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
565
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1750
566
  break;
1751
567
  }
1752
- #line 170 "node.c.erb"
568
+ #line 110 "prism/templates/src/node.c.erb"
1753
569
  case PM_GLOBAL_VARIABLE_OR_WRITE_NODE: {
1754
570
  pm_global_variable_or_write_node_t *cast = (pm_global_variable_or_write_node_t *) node;
1755
- memsize->memsize += sizeof(*cast);
1756
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
571
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1757
572
  break;
1758
573
  }
1759
- #line 170 "node.c.erb"
574
+ #line 110 "prism/templates/src/node.c.erb"
1760
575
  case PM_GLOBAL_VARIABLE_READ_NODE: {
1761
- pm_global_variable_read_node_t *cast = (pm_global_variable_read_node_t *) node;
1762
- memsize->memsize += sizeof(*cast);
1763
576
  break;
1764
577
  }
1765
- #line 170 "node.c.erb"
578
+ #line 110 "prism/templates/src/node.c.erb"
1766
579
  case PM_GLOBAL_VARIABLE_TARGET_NODE: {
1767
- pm_global_variable_target_node_t *cast = (pm_global_variable_target_node_t *) node;
1768
- memsize->memsize += sizeof(*cast);
1769
580
  break;
1770
581
  }
1771
- #line 170 "node.c.erb"
582
+ #line 110 "prism/templates/src/node.c.erb"
1772
583
  case PM_GLOBAL_VARIABLE_WRITE_NODE: {
1773
584
  pm_global_variable_write_node_t *cast = (pm_global_variable_write_node_t *) node;
1774
- memsize->memsize += sizeof(*cast);
1775
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
585
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1776
586
  break;
1777
587
  }
1778
- #line 170 "node.c.erb"
588
+ #line 110 "prism/templates/src/node.c.erb"
1779
589
  case PM_HASH_NODE: {
1780
590
  pm_hash_node_t *cast = (pm_hash_node_t *) node;
1781
- memsize->memsize += sizeof(*cast);
1782
- memsize->memsize += (pm_node_list_memsize(&cast->elements, memsize) - sizeof(pm_node_list_t));
591
+ pm_node_list_destroy(parser, &cast->elements);
1783
592
  break;
1784
593
  }
1785
- #line 170 "node.c.erb"
594
+ #line 110 "prism/templates/src/node.c.erb"
1786
595
  case PM_HASH_PATTERN_NODE: {
1787
596
  pm_hash_pattern_node_t *cast = (pm_hash_pattern_node_t *) node;
1788
- memsize->memsize += sizeof(*cast);
1789
597
  if (cast->constant != NULL) {
1790
- pm_node_memsize_node((pm_node_t *)cast->constant, memsize);
598
+ pm_node_destroy(parser, (pm_node_t *)cast->constant);
1791
599
  }
1792
- memsize->memsize += (pm_node_list_memsize(&cast->elements, memsize) - sizeof(pm_node_list_t));
600
+ pm_node_list_destroy(parser, &cast->elements);
1793
601
  if (cast->rest != NULL) {
1794
- pm_node_memsize_node((pm_node_t *)cast->rest, memsize);
602
+ pm_node_destroy(parser, (pm_node_t *)cast->rest);
1795
603
  }
1796
604
  break;
1797
605
  }
1798
- #line 170 "node.c.erb"
606
+ #line 110 "prism/templates/src/node.c.erb"
1799
607
  case PM_IF_NODE: {
1800
608
  pm_if_node_t *cast = (pm_if_node_t *) node;
1801
- memsize->memsize += sizeof(*cast);
1802
- pm_node_memsize_node((pm_node_t *)cast->predicate, memsize);
609
+ pm_node_destroy(parser, (pm_node_t *)cast->predicate);
1803
610
  if (cast->statements != NULL) {
1804
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
611
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
1805
612
  }
1806
- if (cast->consequent != NULL) {
1807
- pm_node_memsize_node((pm_node_t *)cast->consequent, memsize);
613
+ if (cast->subsequent != NULL) {
614
+ pm_node_destroy(parser, (pm_node_t *)cast->subsequent);
1808
615
  }
1809
616
  break;
1810
617
  }
1811
- #line 170 "node.c.erb"
618
+ #line 110 "prism/templates/src/node.c.erb"
1812
619
  case PM_IMAGINARY_NODE: {
1813
620
  pm_imaginary_node_t *cast = (pm_imaginary_node_t *) node;
1814
- memsize->memsize += sizeof(*cast);
1815
- pm_node_memsize_node((pm_node_t *)cast->numeric, memsize);
621
+ pm_node_destroy(parser, (pm_node_t *)cast->numeric);
1816
622
  break;
1817
623
  }
1818
- #line 170 "node.c.erb"
624
+ #line 110 "prism/templates/src/node.c.erb"
1819
625
  case PM_IMPLICIT_NODE: {
1820
626
  pm_implicit_node_t *cast = (pm_implicit_node_t *) node;
1821
- memsize->memsize += sizeof(*cast);
1822
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
627
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1823
628
  break;
1824
629
  }
1825
- #line 170 "node.c.erb"
630
+ #line 110 "prism/templates/src/node.c.erb"
1826
631
  case PM_IMPLICIT_REST_NODE: {
1827
- pm_implicit_rest_node_t *cast = (pm_implicit_rest_node_t *) node;
1828
- memsize->memsize += sizeof(*cast);
1829
632
  break;
1830
633
  }
1831
- #line 170 "node.c.erb"
634
+ #line 110 "prism/templates/src/node.c.erb"
1832
635
  case PM_IN_NODE: {
1833
636
  pm_in_node_t *cast = (pm_in_node_t *) node;
1834
- memsize->memsize += sizeof(*cast);
1835
- pm_node_memsize_node((pm_node_t *)cast->pattern, memsize);
637
+ pm_node_destroy(parser, (pm_node_t *)cast->pattern);
1836
638
  if (cast->statements != NULL) {
1837
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
639
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
1838
640
  }
1839
641
  break;
1840
642
  }
1841
- #line 170 "node.c.erb"
643
+ #line 110 "prism/templates/src/node.c.erb"
1842
644
  case PM_INDEX_AND_WRITE_NODE: {
1843
645
  pm_index_and_write_node_t *cast = (pm_index_and_write_node_t *) node;
1844
- memsize->memsize += sizeof(*cast);
1845
646
  if (cast->receiver != NULL) {
1846
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
647
+ pm_node_destroy(parser, (pm_node_t *)cast->receiver);
1847
648
  }
1848
649
  if (cast->arguments != NULL) {
1849
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
650
+ pm_node_destroy(parser, (pm_node_t *)cast->arguments);
1850
651
  }
1851
652
  if (cast->block != NULL) {
1852
- pm_node_memsize_node((pm_node_t *)cast->block, memsize);
653
+ pm_node_destroy(parser, (pm_node_t *)cast->block);
1853
654
  }
1854
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
655
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1855
656
  break;
1856
657
  }
1857
- #line 170 "node.c.erb"
658
+ #line 110 "prism/templates/src/node.c.erb"
1858
659
  case PM_INDEX_OPERATOR_WRITE_NODE: {
1859
660
  pm_index_operator_write_node_t *cast = (pm_index_operator_write_node_t *) node;
1860
- memsize->memsize += sizeof(*cast);
1861
661
  if (cast->receiver != NULL) {
1862
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
662
+ pm_node_destroy(parser, (pm_node_t *)cast->receiver);
1863
663
  }
1864
664
  if (cast->arguments != NULL) {
1865
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
665
+ pm_node_destroy(parser, (pm_node_t *)cast->arguments);
1866
666
  }
1867
667
  if (cast->block != NULL) {
1868
- pm_node_memsize_node((pm_node_t *)cast->block, memsize);
668
+ pm_node_destroy(parser, (pm_node_t *)cast->block);
1869
669
  }
1870
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
670
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1871
671
  break;
1872
672
  }
1873
- #line 170 "node.c.erb"
673
+ #line 110 "prism/templates/src/node.c.erb"
1874
674
  case PM_INDEX_OR_WRITE_NODE: {
1875
675
  pm_index_or_write_node_t *cast = (pm_index_or_write_node_t *) node;
1876
- memsize->memsize += sizeof(*cast);
1877
676
  if (cast->receiver != NULL) {
1878
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
677
+ pm_node_destroy(parser, (pm_node_t *)cast->receiver);
1879
678
  }
1880
679
  if (cast->arguments != NULL) {
1881
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
680
+ pm_node_destroy(parser, (pm_node_t *)cast->arguments);
1882
681
  }
1883
682
  if (cast->block != NULL) {
1884
- pm_node_memsize_node((pm_node_t *)cast->block, memsize);
683
+ pm_node_destroy(parser, (pm_node_t *)cast->block);
1885
684
  }
1886
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
685
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1887
686
  break;
1888
687
  }
1889
- #line 170 "node.c.erb"
688
+ #line 110 "prism/templates/src/node.c.erb"
1890
689
  case PM_INDEX_TARGET_NODE: {
1891
690
  pm_index_target_node_t *cast = (pm_index_target_node_t *) node;
1892
- memsize->memsize += sizeof(*cast);
1893
- pm_node_memsize_node((pm_node_t *)cast->receiver, memsize);
691
+ pm_node_destroy(parser, (pm_node_t *)cast->receiver);
1894
692
  if (cast->arguments != NULL) {
1895
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
693
+ pm_node_destroy(parser, (pm_node_t *)cast->arguments);
1896
694
  }
1897
695
  if (cast->block != NULL) {
1898
- pm_node_memsize_node((pm_node_t *)cast->block, memsize);
696
+ pm_node_destroy(parser, (pm_node_t *)cast->block);
1899
697
  }
1900
698
  break;
1901
699
  }
1902
- #line 170 "node.c.erb"
700
+ #line 110 "prism/templates/src/node.c.erb"
1903
701
  case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: {
1904
702
  pm_instance_variable_and_write_node_t *cast = (pm_instance_variable_and_write_node_t *) node;
1905
- memsize->memsize += sizeof(*cast);
1906
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
703
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1907
704
  break;
1908
705
  }
1909
- #line 170 "node.c.erb"
706
+ #line 110 "prism/templates/src/node.c.erb"
1910
707
  case PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
1911
708
  pm_instance_variable_operator_write_node_t *cast = (pm_instance_variable_operator_write_node_t *) node;
1912
- memsize->memsize += sizeof(*cast);
1913
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
709
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1914
710
  break;
1915
711
  }
1916
- #line 170 "node.c.erb"
712
+ #line 110 "prism/templates/src/node.c.erb"
1917
713
  case PM_INSTANCE_VARIABLE_OR_WRITE_NODE: {
1918
714
  pm_instance_variable_or_write_node_t *cast = (pm_instance_variable_or_write_node_t *) node;
1919
- memsize->memsize += sizeof(*cast);
1920
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
715
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1921
716
  break;
1922
717
  }
1923
- #line 170 "node.c.erb"
718
+ #line 110 "prism/templates/src/node.c.erb"
1924
719
  case PM_INSTANCE_VARIABLE_READ_NODE: {
1925
- pm_instance_variable_read_node_t *cast = (pm_instance_variable_read_node_t *) node;
1926
- memsize->memsize += sizeof(*cast);
1927
720
  break;
1928
721
  }
1929
- #line 170 "node.c.erb"
722
+ #line 110 "prism/templates/src/node.c.erb"
1930
723
  case PM_INSTANCE_VARIABLE_TARGET_NODE: {
1931
- pm_instance_variable_target_node_t *cast = (pm_instance_variable_target_node_t *) node;
1932
- memsize->memsize += sizeof(*cast);
1933
724
  break;
1934
725
  }
1935
- #line 170 "node.c.erb"
726
+ #line 110 "prism/templates/src/node.c.erb"
1936
727
  case PM_INSTANCE_VARIABLE_WRITE_NODE: {
1937
728
  pm_instance_variable_write_node_t *cast = (pm_instance_variable_write_node_t *) node;
1938
- memsize->memsize += sizeof(*cast);
1939
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
729
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
1940
730
  break;
1941
731
  }
1942
- #line 170 "node.c.erb"
732
+ #line 110 "prism/templates/src/node.c.erb"
1943
733
  case PM_INTEGER_NODE: {
1944
734
  pm_integer_node_t *cast = (pm_integer_node_t *) node;
1945
- memsize->memsize += sizeof(*cast);
1946
- memsize->memsize += (pm_integer_memsize(&cast->value) - sizeof(pm_integer_t));
735
+ pm_integer_free(&cast->value);
1947
736
  break;
1948
737
  }
1949
- #line 170 "node.c.erb"
738
+ #line 110 "prism/templates/src/node.c.erb"
1950
739
  case PM_INTERPOLATED_MATCH_LAST_LINE_NODE: {
1951
740
  pm_interpolated_match_last_line_node_t *cast = (pm_interpolated_match_last_line_node_t *) node;
1952
- memsize->memsize += sizeof(*cast);
1953
- memsize->memsize += (pm_node_list_memsize(&cast->parts, memsize) - sizeof(pm_node_list_t));
741
+ pm_node_list_destroy(parser, &cast->parts);
1954
742
  break;
1955
743
  }
1956
- #line 170 "node.c.erb"
744
+ #line 110 "prism/templates/src/node.c.erb"
1957
745
  case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
1958
746
  pm_interpolated_regular_expression_node_t *cast = (pm_interpolated_regular_expression_node_t *) node;
1959
- memsize->memsize += sizeof(*cast);
1960
- memsize->memsize += (pm_node_list_memsize(&cast->parts, memsize) - sizeof(pm_node_list_t));
747
+ pm_node_list_destroy(parser, &cast->parts);
1961
748
  break;
1962
749
  }
1963
- #line 170 "node.c.erb"
750
+ #line 110 "prism/templates/src/node.c.erb"
1964
751
  case PM_INTERPOLATED_STRING_NODE: {
1965
752
  pm_interpolated_string_node_t *cast = (pm_interpolated_string_node_t *) node;
1966
- memsize->memsize += sizeof(*cast);
1967
- memsize->memsize += (pm_node_list_memsize(&cast->parts, memsize) - sizeof(pm_node_list_t));
753
+ pm_node_list_destroy(parser, &cast->parts);
1968
754
  break;
1969
755
  }
1970
- #line 170 "node.c.erb"
756
+ #line 110 "prism/templates/src/node.c.erb"
1971
757
  case PM_INTERPOLATED_SYMBOL_NODE: {
1972
758
  pm_interpolated_symbol_node_t *cast = (pm_interpolated_symbol_node_t *) node;
1973
- memsize->memsize += sizeof(*cast);
1974
- memsize->memsize += (pm_node_list_memsize(&cast->parts, memsize) - sizeof(pm_node_list_t));
759
+ pm_node_list_destroy(parser, &cast->parts);
1975
760
  break;
1976
761
  }
1977
- #line 170 "node.c.erb"
762
+ #line 110 "prism/templates/src/node.c.erb"
1978
763
  case PM_INTERPOLATED_X_STRING_NODE: {
1979
764
  pm_interpolated_x_string_node_t *cast = (pm_interpolated_x_string_node_t *) node;
1980
- memsize->memsize += sizeof(*cast);
1981
- memsize->memsize += (pm_node_list_memsize(&cast->parts, memsize) - sizeof(pm_node_list_t));
765
+ pm_node_list_destroy(parser, &cast->parts);
766
+ break;
767
+ }
768
+ #line 110 "prism/templates/src/node.c.erb"
769
+ case PM_IT_LOCAL_VARIABLE_READ_NODE: {
1982
770
  break;
1983
771
  }
1984
- #line 170 "node.c.erb"
772
+ #line 110 "prism/templates/src/node.c.erb"
1985
773
  case PM_IT_PARAMETERS_NODE: {
1986
- pm_it_parameters_node_t *cast = (pm_it_parameters_node_t *) node;
1987
- memsize->memsize += sizeof(*cast);
1988
774
  break;
1989
775
  }
1990
- #line 170 "node.c.erb"
776
+ #line 110 "prism/templates/src/node.c.erb"
1991
777
  case PM_KEYWORD_HASH_NODE: {
1992
778
  pm_keyword_hash_node_t *cast = (pm_keyword_hash_node_t *) node;
1993
- memsize->memsize += sizeof(*cast);
1994
- memsize->memsize += (pm_node_list_memsize(&cast->elements, memsize) - sizeof(pm_node_list_t));
779
+ pm_node_list_destroy(parser, &cast->elements);
1995
780
  break;
1996
781
  }
1997
- #line 170 "node.c.erb"
782
+ #line 110 "prism/templates/src/node.c.erb"
1998
783
  case PM_KEYWORD_REST_PARAMETER_NODE: {
1999
- pm_keyword_rest_parameter_node_t *cast = (pm_keyword_rest_parameter_node_t *) node;
2000
- memsize->memsize += sizeof(*cast);
2001
784
  break;
2002
785
  }
2003
- #line 170 "node.c.erb"
786
+ #line 110 "prism/templates/src/node.c.erb"
2004
787
  case PM_LAMBDA_NODE: {
2005
788
  pm_lambda_node_t *cast = (pm_lambda_node_t *) node;
2006
- memsize->memsize += sizeof(*cast);
2007
- memsize->memsize += (pm_constant_id_list_memsize(&cast->locals) - sizeof(pm_constant_id_list_t));
789
+ pm_constant_id_list_free(&cast->locals);
2008
790
  if (cast->parameters != NULL) {
2009
- pm_node_memsize_node((pm_node_t *)cast->parameters, memsize);
791
+ pm_node_destroy(parser, (pm_node_t *)cast->parameters);
2010
792
  }
2011
793
  if (cast->body != NULL) {
2012
- pm_node_memsize_node((pm_node_t *)cast->body, memsize);
794
+ pm_node_destroy(parser, (pm_node_t *)cast->body);
2013
795
  }
2014
796
  break;
2015
797
  }
2016
- #line 170 "node.c.erb"
798
+ #line 110 "prism/templates/src/node.c.erb"
2017
799
  case PM_LOCAL_VARIABLE_AND_WRITE_NODE: {
2018
800
  pm_local_variable_and_write_node_t *cast = (pm_local_variable_and_write_node_t *) node;
2019
- memsize->memsize += sizeof(*cast);
2020
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
801
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
2021
802
  break;
2022
803
  }
2023
- #line 170 "node.c.erb"
804
+ #line 110 "prism/templates/src/node.c.erb"
2024
805
  case PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
2025
806
  pm_local_variable_operator_write_node_t *cast = (pm_local_variable_operator_write_node_t *) node;
2026
- memsize->memsize += sizeof(*cast);
2027
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
807
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
2028
808
  break;
2029
809
  }
2030
- #line 170 "node.c.erb"
810
+ #line 110 "prism/templates/src/node.c.erb"
2031
811
  case PM_LOCAL_VARIABLE_OR_WRITE_NODE: {
2032
812
  pm_local_variable_or_write_node_t *cast = (pm_local_variable_or_write_node_t *) node;
2033
- memsize->memsize += sizeof(*cast);
2034
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
813
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
2035
814
  break;
2036
815
  }
2037
- #line 170 "node.c.erb"
816
+ #line 110 "prism/templates/src/node.c.erb"
2038
817
  case PM_LOCAL_VARIABLE_READ_NODE: {
2039
- pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node;
2040
- memsize->memsize += sizeof(*cast);
2041
818
  break;
2042
819
  }
2043
- #line 170 "node.c.erb"
820
+ #line 110 "prism/templates/src/node.c.erb"
2044
821
  case PM_LOCAL_VARIABLE_TARGET_NODE: {
2045
- pm_local_variable_target_node_t *cast = (pm_local_variable_target_node_t *) node;
2046
- memsize->memsize += sizeof(*cast);
2047
822
  break;
2048
823
  }
2049
- #line 170 "node.c.erb"
824
+ #line 110 "prism/templates/src/node.c.erb"
2050
825
  case PM_LOCAL_VARIABLE_WRITE_NODE: {
2051
826
  pm_local_variable_write_node_t *cast = (pm_local_variable_write_node_t *) node;
2052
- memsize->memsize += sizeof(*cast);
2053
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
827
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
2054
828
  break;
2055
829
  }
2056
- #line 170 "node.c.erb"
830
+ #line 110 "prism/templates/src/node.c.erb"
2057
831
  case PM_MATCH_LAST_LINE_NODE: {
2058
832
  pm_match_last_line_node_t *cast = (pm_match_last_line_node_t *) node;
2059
- memsize->memsize += sizeof(*cast);
2060
- memsize->memsize += (pm_string_memsize(&cast->unescaped) - sizeof(pm_string_t));
833
+ pm_string_free(&cast->unescaped);
2061
834
  break;
2062
835
  }
2063
- #line 170 "node.c.erb"
836
+ #line 110 "prism/templates/src/node.c.erb"
2064
837
  case PM_MATCH_PREDICATE_NODE: {
2065
838
  pm_match_predicate_node_t *cast = (pm_match_predicate_node_t *) node;
2066
- memsize->memsize += sizeof(*cast);
2067
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
2068
- pm_node_memsize_node((pm_node_t *)cast->pattern, memsize);
839
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
840
+ pm_node_destroy(parser, (pm_node_t *)cast->pattern);
2069
841
  break;
2070
842
  }
2071
- #line 170 "node.c.erb"
843
+ #line 110 "prism/templates/src/node.c.erb"
2072
844
  case PM_MATCH_REQUIRED_NODE: {
2073
845
  pm_match_required_node_t *cast = (pm_match_required_node_t *) node;
2074
- memsize->memsize += sizeof(*cast);
2075
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
2076
- pm_node_memsize_node((pm_node_t *)cast->pattern, memsize);
846
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
847
+ pm_node_destroy(parser, (pm_node_t *)cast->pattern);
2077
848
  break;
2078
849
  }
2079
- #line 170 "node.c.erb"
850
+ #line 110 "prism/templates/src/node.c.erb"
2080
851
  case PM_MATCH_WRITE_NODE: {
2081
852
  pm_match_write_node_t *cast = (pm_match_write_node_t *) node;
2082
- memsize->memsize += sizeof(*cast);
2083
- pm_node_memsize_node((pm_node_t *)cast->call, memsize);
2084
- memsize->memsize += (pm_node_list_memsize(&cast->targets, memsize) - sizeof(pm_node_list_t));
853
+ pm_node_destroy(parser, (pm_node_t *)cast->call);
854
+ pm_node_list_destroy(parser, &cast->targets);
2085
855
  break;
2086
856
  }
2087
- #line 170 "node.c.erb"
857
+ #line 110 "prism/templates/src/node.c.erb"
2088
858
  case PM_MISSING_NODE: {
2089
- pm_missing_node_t *cast = (pm_missing_node_t *) node;
2090
- memsize->memsize += sizeof(*cast);
2091
859
  break;
2092
860
  }
2093
- #line 170 "node.c.erb"
861
+ #line 110 "prism/templates/src/node.c.erb"
2094
862
  case PM_MODULE_NODE: {
2095
863
  pm_module_node_t *cast = (pm_module_node_t *) node;
2096
- memsize->memsize += sizeof(*cast);
2097
- memsize->memsize += (pm_constant_id_list_memsize(&cast->locals) - sizeof(pm_constant_id_list_t));
2098
- pm_node_memsize_node((pm_node_t *)cast->constant_path, memsize);
864
+ pm_constant_id_list_free(&cast->locals);
865
+ pm_node_destroy(parser, (pm_node_t *)cast->constant_path);
2099
866
  if (cast->body != NULL) {
2100
- pm_node_memsize_node((pm_node_t *)cast->body, memsize);
867
+ pm_node_destroy(parser, (pm_node_t *)cast->body);
2101
868
  }
2102
869
  break;
2103
870
  }
2104
- #line 170 "node.c.erb"
871
+ #line 110 "prism/templates/src/node.c.erb"
2105
872
  case PM_MULTI_TARGET_NODE: {
2106
873
  pm_multi_target_node_t *cast = (pm_multi_target_node_t *) node;
2107
- memsize->memsize += sizeof(*cast);
2108
- memsize->memsize += (pm_node_list_memsize(&cast->lefts, memsize) - sizeof(pm_node_list_t));
874
+ pm_node_list_destroy(parser, &cast->lefts);
2109
875
  if (cast->rest != NULL) {
2110
- pm_node_memsize_node((pm_node_t *)cast->rest, memsize);
876
+ pm_node_destroy(parser, (pm_node_t *)cast->rest);
2111
877
  }
2112
- memsize->memsize += (pm_node_list_memsize(&cast->rights, memsize) - sizeof(pm_node_list_t));
878
+ pm_node_list_destroy(parser, &cast->rights);
2113
879
  break;
2114
880
  }
2115
- #line 170 "node.c.erb"
881
+ #line 110 "prism/templates/src/node.c.erb"
2116
882
  case PM_MULTI_WRITE_NODE: {
2117
883
  pm_multi_write_node_t *cast = (pm_multi_write_node_t *) node;
2118
- memsize->memsize += sizeof(*cast);
2119
- memsize->memsize += (pm_node_list_memsize(&cast->lefts, memsize) - sizeof(pm_node_list_t));
884
+ pm_node_list_destroy(parser, &cast->lefts);
2120
885
  if (cast->rest != NULL) {
2121
- pm_node_memsize_node((pm_node_t *)cast->rest, memsize);
886
+ pm_node_destroy(parser, (pm_node_t *)cast->rest);
2122
887
  }
2123
- memsize->memsize += (pm_node_list_memsize(&cast->rights, memsize) - sizeof(pm_node_list_t));
2124
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
888
+ pm_node_list_destroy(parser, &cast->rights);
889
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
2125
890
  break;
2126
891
  }
2127
- #line 170 "node.c.erb"
892
+ #line 110 "prism/templates/src/node.c.erb"
2128
893
  case PM_NEXT_NODE: {
2129
894
  pm_next_node_t *cast = (pm_next_node_t *) node;
2130
- memsize->memsize += sizeof(*cast);
2131
895
  if (cast->arguments != NULL) {
2132
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
896
+ pm_node_destroy(parser, (pm_node_t *)cast->arguments);
2133
897
  }
2134
898
  break;
2135
899
  }
2136
- #line 170 "node.c.erb"
900
+ #line 110 "prism/templates/src/node.c.erb"
2137
901
  case PM_NIL_NODE: {
2138
- pm_nil_node_t *cast = (pm_nil_node_t *) node;
2139
- memsize->memsize += sizeof(*cast);
2140
902
  break;
2141
903
  }
2142
- #line 170 "node.c.erb"
904
+ #line 110 "prism/templates/src/node.c.erb"
2143
905
  case PM_NO_KEYWORDS_PARAMETER_NODE: {
2144
- pm_no_keywords_parameter_node_t *cast = (pm_no_keywords_parameter_node_t *) node;
2145
- memsize->memsize += sizeof(*cast);
2146
906
  break;
2147
907
  }
2148
- #line 170 "node.c.erb"
908
+ #line 110 "prism/templates/src/node.c.erb"
2149
909
  case PM_NUMBERED_PARAMETERS_NODE: {
2150
- pm_numbered_parameters_node_t *cast = (pm_numbered_parameters_node_t *) node;
2151
- memsize->memsize += sizeof(*cast);
2152
910
  break;
2153
911
  }
2154
- #line 170 "node.c.erb"
912
+ #line 110 "prism/templates/src/node.c.erb"
2155
913
  case PM_NUMBERED_REFERENCE_READ_NODE: {
2156
- pm_numbered_reference_read_node_t *cast = (pm_numbered_reference_read_node_t *) node;
2157
- memsize->memsize += sizeof(*cast);
2158
914
  break;
2159
915
  }
2160
- #line 170 "node.c.erb"
916
+ #line 110 "prism/templates/src/node.c.erb"
2161
917
  case PM_OPTIONAL_KEYWORD_PARAMETER_NODE: {
2162
918
  pm_optional_keyword_parameter_node_t *cast = (pm_optional_keyword_parameter_node_t *) node;
2163
- memsize->memsize += sizeof(*cast);
2164
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
919
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
2165
920
  break;
2166
921
  }
2167
- #line 170 "node.c.erb"
922
+ #line 110 "prism/templates/src/node.c.erb"
2168
923
  case PM_OPTIONAL_PARAMETER_NODE: {
2169
924
  pm_optional_parameter_node_t *cast = (pm_optional_parameter_node_t *) node;
2170
- memsize->memsize += sizeof(*cast);
2171
- pm_node_memsize_node((pm_node_t *)cast->value, memsize);
925
+ pm_node_destroy(parser, (pm_node_t *)cast->value);
2172
926
  break;
2173
927
  }
2174
- #line 170 "node.c.erb"
928
+ #line 110 "prism/templates/src/node.c.erb"
2175
929
  case PM_OR_NODE: {
2176
930
  pm_or_node_t *cast = (pm_or_node_t *) node;
2177
- memsize->memsize += sizeof(*cast);
2178
- pm_node_memsize_node((pm_node_t *)cast->left, memsize);
2179
- pm_node_memsize_node((pm_node_t *)cast->right, memsize);
931
+ pm_node_destroy(parser, (pm_node_t *)cast->left);
932
+ pm_node_destroy(parser, (pm_node_t *)cast->right);
2180
933
  break;
2181
934
  }
2182
- #line 170 "node.c.erb"
935
+ #line 110 "prism/templates/src/node.c.erb"
2183
936
  case PM_PARAMETERS_NODE: {
2184
937
  pm_parameters_node_t *cast = (pm_parameters_node_t *) node;
2185
- memsize->memsize += sizeof(*cast);
2186
- memsize->memsize += (pm_node_list_memsize(&cast->requireds, memsize) - sizeof(pm_node_list_t));
2187
- memsize->memsize += (pm_node_list_memsize(&cast->optionals, memsize) - sizeof(pm_node_list_t));
938
+ pm_node_list_destroy(parser, &cast->requireds);
939
+ pm_node_list_destroy(parser, &cast->optionals);
2188
940
  if (cast->rest != NULL) {
2189
- pm_node_memsize_node((pm_node_t *)cast->rest, memsize);
941
+ pm_node_destroy(parser, (pm_node_t *)cast->rest);
2190
942
  }
2191
- memsize->memsize += (pm_node_list_memsize(&cast->posts, memsize) - sizeof(pm_node_list_t));
2192
- memsize->memsize += (pm_node_list_memsize(&cast->keywords, memsize) - sizeof(pm_node_list_t));
943
+ pm_node_list_destroy(parser, &cast->posts);
944
+ pm_node_list_destroy(parser, &cast->keywords);
2193
945
  if (cast->keyword_rest != NULL) {
2194
- pm_node_memsize_node((pm_node_t *)cast->keyword_rest, memsize);
946
+ pm_node_destroy(parser, (pm_node_t *)cast->keyword_rest);
2195
947
  }
2196
948
  if (cast->block != NULL) {
2197
- pm_node_memsize_node((pm_node_t *)cast->block, memsize);
949
+ pm_node_destroy(parser, (pm_node_t *)cast->block);
2198
950
  }
2199
951
  break;
2200
952
  }
2201
- #line 170 "node.c.erb"
953
+ #line 110 "prism/templates/src/node.c.erb"
2202
954
  case PM_PARENTHESES_NODE: {
2203
955
  pm_parentheses_node_t *cast = (pm_parentheses_node_t *) node;
2204
- memsize->memsize += sizeof(*cast);
2205
956
  if (cast->body != NULL) {
2206
- pm_node_memsize_node((pm_node_t *)cast->body, memsize);
957
+ pm_node_destroy(parser, (pm_node_t *)cast->body);
2207
958
  }
2208
959
  break;
2209
960
  }
2210
- #line 170 "node.c.erb"
961
+ #line 110 "prism/templates/src/node.c.erb"
2211
962
  case PM_PINNED_EXPRESSION_NODE: {
2212
963
  pm_pinned_expression_node_t *cast = (pm_pinned_expression_node_t *) node;
2213
- memsize->memsize += sizeof(*cast);
2214
- pm_node_memsize_node((pm_node_t *)cast->expression, memsize);
964
+ pm_node_destroy(parser, (pm_node_t *)cast->expression);
2215
965
  break;
2216
966
  }
2217
- #line 170 "node.c.erb"
967
+ #line 110 "prism/templates/src/node.c.erb"
2218
968
  case PM_PINNED_VARIABLE_NODE: {
2219
969
  pm_pinned_variable_node_t *cast = (pm_pinned_variable_node_t *) node;
2220
- memsize->memsize += sizeof(*cast);
2221
- pm_node_memsize_node((pm_node_t *)cast->variable, memsize);
970
+ pm_node_destroy(parser, (pm_node_t *)cast->variable);
2222
971
  break;
2223
972
  }
2224
- #line 170 "node.c.erb"
973
+ #line 110 "prism/templates/src/node.c.erb"
2225
974
  case PM_POST_EXECUTION_NODE: {
2226
975
  pm_post_execution_node_t *cast = (pm_post_execution_node_t *) node;
2227
- memsize->memsize += sizeof(*cast);
2228
976
  if (cast->statements != NULL) {
2229
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
977
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
2230
978
  }
2231
979
  break;
2232
980
  }
2233
- #line 170 "node.c.erb"
981
+ #line 110 "prism/templates/src/node.c.erb"
2234
982
  case PM_PRE_EXECUTION_NODE: {
2235
983
  pm_pre_execution_node_t *cast = (pm_pre_execution_node_t *) node;
2236
- memsize->memsize += sizeof(*cast);
2237
984
  if (cast->statements != NULL) {
2238
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
985
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
2239
986
  }
2240
987
  break;
2241
988
  }
2242
- #line 170 "node.c.erb"
989
+ #line 110 "prism/templates/src/node.c.erb"
2243
990
  case PM_PROGRAM_NODE: {
2244
991
  pm_program_node_t *cast = (pm_program_node_t *) node;
2245
- memsize->memsize += sizeof(*cast);
2246
- memsize->memsize += (pm_constant_id_list_memsize(&cast->locals) - sizeof(pm_constant_id_list_t));
2247
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
992
+ pm_constant_id_list_free(&cast->locals);
993
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
2248
994
  break;
2249
995
  }
2250
- #line 170 "node.c.erb"
996
+ #line 110 "prism/templates/src/node.c.erb"
2251
997
  case PM_RANGE_NODE: {
2252
998
  pm_range_node_t *cast = (pm_range_node_t *) node;
2253
- memsize->memsize += sizeof(*cast);
2254
999
  if (cast->left != NULL) {
2255
- pm_node_memsize_node((pm_node_t *)cast->left, memsize);
1000
+ pm_node_destroy(parser, (pm_node_t *)cast->left);
2256
1001
  }
2257
1002
  if (cast->right != NULL) {
2258
- pm_node_memsize_node((pm_node_t *)cast->right, memsize);
1003
+ pm_node_destroy(parser, (pm_node_t *)cast->right);
2259
1004
  }
2260
1005
  break;
2261
1006
  }
2262
- #line 170 "node.c.erb"
1007
+ #line 110 "prism/templates/src/node.c.erb"
2263
1008
  case PM_RATIONAL_NODE: {
2264
1009
  pm_rational_node_t *cast = (pm_rational_node_t *) node;
2265
- memsize->memsize += sizeof(*cast);
2266
- pm_node_memsize_node((pm_node_t *)cast->numeric, memsize);
1010
+ pm_integer_free(&cast->numerator);
1011
+ pm_integer_free(&cast->denominator);
2267
1012
  break;
2268
1013
  }
2269
- #line 170 "node.c.erb"
1014
+ #line 110 "prism/templates/src/node.c.erb"
2270
1015
  case PM_REDO_NODE: {
2271
- pm_redo_node_t *cast = (pm_redo_node_t *) node;
2272
- memsize->memsize += sizeof(*cast);
2273
1016
  break;
2274
1017
  }
2275
- #line 170 "node.c.erb"
1018
+ #line 110 "prism/templates/src/node.c.erb"
2276
1019
  case PM_REGULAR_EXPRESSION_NODE: {
2277
1020
  pm_regular_expression_node_t *cast = (pm_regular_expression_node_t *) node;
2278
- memsize->memsize += sizeof(*cast);
2279
- memsize->memsize += (pm_string_memsize(&cast->unescaped) - sizeof(pm_string_t));
1021
+ pm_string_free(&cast->unescaped);
2280
1022
  break;
2281
1023
  }
2282
- #line 170 "node.c.erb"
1024
+ #line 110 "prism/templates/src/node.c.erb"
2283
1025
  case PM_REQUIRED_KEYWORD_PARAMETER_NODE: {
2284
- pm_required_keyword_parameter_node_t *cast = (pm_required_keyword_parameter_node_t *) node;
2285
- memsize->memsize += sizeof(*cast);
2286
1026
  break;
2287
1027
  }
2288
- #line 170 "node.c.erb"
1028
+ #line 110 "prism/templates/src/node.c.erb"
2289
1029
  case PM_REQUIRED_PARAMETER_NODE: {
2290
- pm_required_parameter_node_t *cast = (pm_required_parameter_node_t *) node;
2291
- memsize->memsize += sizeof(*cast);
2292
1030
  break;
2293
1031
  }
2294
- #line 170 "node.c.erb"
1032
+ #line 110 "prism/templates/src/node.c.erb"
2295
1033
  case PM_RESCUE_MODIFIER_NODE: {
2296
1034
  pm_rescue_modifier_node_t *cast = (pm_rescue_modifier_node_t *) node;
2297
- memsize->memsize += sizeof(*cast);
2298
- pm_node_memsize_node((pm_node_t *)cast->expression, memsize);
2299
- pm_node_memsize_node((pm_node_t *)cast->rescue_expression, memsize);
1035
+ pm_node_destroy(parser, (pm_node_t *)cast->expression);
1036
+ pm_node_destroy(parser, (pm_node_t *)cast->rescue_expression);
2300
1037
  break;
2301
1038
  }
2302
- #line 170 "node.c.erb"
1039
+ #line 110 "prism/templates/src/node.c.erb"
2303
1040
  case PM_RESCUE_NODE: {
2304
1041
  pm_rescue_node_t *cast = (pm_rescue_node_t *) node;
2305
- memsize->memsize += sizeof(*cast);
2306
- memsize->memsize += (pm_node_list_memsize(&cast->exceptions, memsize) - sizeof(pm_node_list_t));
1042
+ pm_node_list_destroy(parser, &cast->exceptions);
2307
1043
  if (cast->reference != NULL) {
2308
- pm_node_memsize_node((pm_node_t *)cast->reference, memsize);
1044
+ pm_node_destroy(parser, (pm_node_t *)cast->reference);
2309
1045
  }
2310
1046
  if (cast->statements != NULL) {
2311
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
1047
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
2312
1048
  }
2313
- if (cast->consequent != NULL) {
2314
- pm_node_memsize_node((pm_node_t *)cast->consequent, memsize);
1049
+ if (cast->subsequent != NULL) {
1050
+ pm_node_destroy(parser, (pm_node_t *)cast->subsequent);
2315
1051
  }
2316
1052
  break;
2317
1053
  }
2318
- #line 170 "node.c.erb"
1054
+ #line 110 "prism/templates/src/node.c.erb"
2319
1055
  case PM_REST_PARAMETER_NODE: {
2320
- pm_rest_parameter_node_t *cast = (pm_rest_parameter_node_t *) node;
2321
- memsize->memsize += sizeof(*cast);
2322
1056
  break;
2323
1057
  }
2324
- #line 170 "node.c.erb"
1058
+ #line 110 "prism/templates/src/node.c.erb"
2325
1059
  case PM_RETRY_NODE: {
2326
- pm_retry_node_t *cast = (pm_retry_node_t *) node;
2327
- memsize->memsize += sizeof(*cast);
2328
1060
  break;
2329
1061
  }
2330
- #line 170 "node.c.erb"
1062
+ #line 110 "prism/templates/src/node.c.erb"
2331
1063
  case PM_RETURN_NODE: {
2332
1064
  pm_return_node_t *cast = (pm_return_node_t *) node;
2333
- memsize->memsize += sizeof(*cast);
2334
1065
  if (cast->arguments != NULL) {
2335
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
1066
+ pm_node_destroy(parser, (pm_node_t *)cast->arguments);
2336
1067
  }
2337
1068
  break;
2338
1069
  }
2339
- #line 170 "node.c.erb"
1070
+ #line 110 "prism/templates/src/node.c.erb"
2340
1071
  case PM_SELF_NODE: {
2341
- pm_self_node_t *cast = (pm_self_node_t *) node;
2342
- memsize->memsize += sizeof(*cast);
2343
1072
  break;
2344
1073
  }
2345
- #line 170 "node.c.erb"
1074
+ #line 110 "prism/templates/src/node.c.erb"
2346
1075
  case PM_SHAREABLE_CONSTANT_NODE: {
2347
1076
  pm_shareable_constant_node_t *cast = (pm_shareable_constant_node_t *) node;
2348
- memsize->memsize += sizeof(*cast);
2349
- pm_node_memsize_node((pm_node_t *)cast->write, memsize);
1077
+ pm_node_destroy(parser, (pm_node_t *)cast->write);
2350
1078
  break;
2351
1079
  }
2352
- #line 170 "node.c.erb"
1080
+ #line 110 "prism/templates/src/node.c.erb"
2353
1081
  case PM_SINGLETON_CLASS_NODE: {
2354
1082
  pm_singleton_class_node_t *cast = (pm_singleton_class_node_t *) node;
2355
- memsize->memsize += sizeof(*cast);
2356
- memsize->memsize += (pm_constant_id_list_memsize(&cast->locals) - sizeof(pm_constant_id_list_t));
2357
- pm_node_memsize_node((pm_node_t *)cast->expression, memsize);
1083
+ pm_constant_id_list_free(&cast->locals);
1084
+ pm_node_destroy(parser, (pm_node_t *)cast->expression);
2358
1085
  if (cast->body != NULL) {
2359
- pm_node_memsize_node((pm_node_t *)cast->body, memsize);
1086
+ pm_node_destroy(parser, (pm_node_t *)cast->body);
2360
1087
  }
2361
1088
  break;
2362
1089
  }
2363
- #line 170 "node.c.erb"
1090
+ #line 110 "prism/templates/src/node.c.erb"
2364
1091
  case PM_SOURCE_ENCODING_NODE: {
2365
- pm_source_encoding_node_t *cast = (pm_source_encoding_node_t *) node;
2366
- memsize->memsize += sizeof(*cast);
2367
1092
  break;
2368
1093
  }
2369
- #line 170 "node.c.erb"
1094
+ #line 110 "prism/templates/src/node.c.erb"
2370
1095
  case PM_SOURCE_FILE_NODE: {
2371
1096
  pm_source_file_node_t *cast = (pm_source_file_node_t *) node;
2372
- memsize->memsize += sizeof(*cast);
2373
- memsize->memsize += (pm_string_memsize(&cast->filepath) - sizeof(pm_string_t));
1097
+ pm_string_free(&cast->filepath);
2374
1098
  break;
2375
1099
  }
2376
- #line 170 "node.c.erb"
1100
+ #line 110 "prism/templates/src/node.c.erb"
2377
1101
  case PM_SOURCE_LINE_NODE: {
2378
- pm_source_line_node_t *cast = (pm_source_line_node_t *) node;
2379
- memsize->memsize += sizeof(*cast);
2380
1102
  break;
2381
1103
  }
2382
- #line 170 "node.c.erb"
1104
+ #line 110 "prism/templates/src/node.c.erb"
2383
1105
  case PM_SPLAT_NODE: {
2384
1106
  pm_splat_node_t *cast = (pm_splat_node_t *) node;
2385
- memsize->memsize += sizeof(*cast);
2386
1107
  if (cast->expression != NULL) {
2387
- pm_node_memsize_node((pm_node_t *)cast->expression, memsize);
1108
+ pm_node_destroy(parser, (pm_node_t *)cast->expression);
2388
1109
  }
2389
1110
  break;
2390
1111
  }
2391
- #line 170 "node.c.erb"
1112
+ #line 110 "prism/templates/src/node.c.erb"
2392
1113
  case PM_STATEMENTS_NODE: {
2393
1114
  pm_statements_node_t *cast = (pm_statements_node_t *) node;
2394
- memsize->memsize += sizeof(*cast);
2395
- memsize->memsize += (pm_node_list_memsize(&cast->body, memsize) - sizeof(pm_node_list_t));
1115
+ pm_node_list_destroy(parser, &cast->body);
2396
1116
  break;
2397
1117
  }
2398
- #line 170 "node.c.erb"
1118
+ #line 110 "prism/templates/src/node.c.erb"
2399
1119
  case PM_STRING_NODE: {
2400
1120
  pm_string_node_t *cast = (pm_string_node_t *) node;
2401
- memsize->memsize += sizeof(*cast);
2402
- memsize->memsize += (pm_string_memsize(&cast->unescaped) - sizeof(pm_string_t));
1121
+ pm_string_free(&cast->unescaped);
2403
1122
  break;
2404
1123
  }
2405
- #line 170 "node.c.erb"
1124
+ #line 110 "prism/templates/src/node.c.erb"
2406
1125
  case PM_SUPER_NODE: {
2407
1126
  pm_super_node_t *cast = (pm_super_node_t *) node;
2408
- memsize->memsize += sizeof(*cast);
2409
1127
  if (cast->arguments != NULL) {
2410
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
1128
+ pm_node_destroy(parser, (pm_node_t *)cast->arguments);
2411
1129
  }
2412
1130
  if (cast->block != NULL) {
2413
- pm_node_memsize_node((pm_node_t *)cast->block, memsize);
1131
+ pm_node_destroy(parser, (pm_node_t *)cast->block);
2414
1132
  }
2415
1133
  break;
2416
1134
  }
2417
- #line 170 "node.c.erb"
1135
+ #line 110 "prism/templates/src/node.c.erb"
2418
1136
  case PM_SYMBOL_NODE: {
2419
1137
  pm_symbol_node_t *cast = (pm_symbol_node_t *) node;
2420
- memsize->memsize += sizeof(*cast);
2421
- memsize->memsize += (pm_string_memsize(&cast->unescaped) - sizeof(pm_string_t));
1138
+ pm_string_free(&cast->unescaped);
2422
1139
  break;
2423
1140
  }
2424
- #line 170 "node.c.erb"
1141
+ #line 110 "prism/templates/src/node.c.erb"
2425
1142
  case PM_TRUE_NODE: {
2426
- pm_true_node_t *cast = (pm_true_node_t *) node;
2427
- memsize->memsize += sizeof(*cast);
2428
1143
  break;
2429
1144
  }
2430
- #line 170 "node.c.erb"
1145
+ #line 110 "prism/templates/src/node.c.erb"
2431
1146
  case PM_UNDEF_NODE: {
2432
1147
  pm_undef_node_t *cast = (pm_undef_node_t *) node;
2433
- memsize->memsize += sizeof(*cast);
2434
- memsize->memsize += (pm_node_list_memsize(&cast->names, memsize) - sizeof(pm_node_list_t));
1148
+ pm_node_list_destroy(parser, &cast->names);
2435
1149
  break;
2436
1150
  }
2437
- #line 170 "node.c.erb"
1151
+ #line 110 "prism/templates/src/node.c.erb"
2438
1152
  case PM_UNLESS_NODE: {
2439
1153
  pm_unless_node_t *cast = (pm_unless_node_t *) node;
2440
- memsize->memsize += sizeof(*cast);
2441
- pm_node_memsize_node((pm_node_t *)cast->predicate, memsize);
1154
+ pm_node_destroy(parser, (pm_node_t *)cast->predicate);
2442
1155
  if (cast->statements != NULL) {
2443
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
1156
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
2444
1157
  }
2445
- if (cast->consequent != NULL) {
2446
- pm_node_memsize_node((pm_node_t *)cast->consequent, memsize);
1158
+ if (cast->else_clause != NULL) {
1159
+ pm_node_destroy(parser, (pm_node_t *)cast->else_clause);
2447
1160
  }
2448
1161
  break;
2449
1162
  }
2450
- #line 170 "node.c.erb"
1163
+ #line 110 "prism/templates/src/node.c.erb"
2451
1164
  case PM_UNTIL_NODE: {
2452
1165
  pm_until_node_t *cast = (pm_until_node_t *) node;
2453
- memsize->memsize += sizeof(*cast);
2454
- pm_node_memsize_node((pm_node_t *)cast->predicate, memsize);
1166
+ pm_node_destroy(parser, (pm_node_t *)cast->predicate);
2455
1167
  if (cast->statements != NULL) {
2456
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
1168
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
2457
1169
  }
2458
1170
  break;
2459
1171
  }
2460
- #line 170 "node.c.erb"
1172
+ #line 110 "prism/templates/src/node.c.erb"
2461
1173
  case PM_WHEN_NODE: {
2462
1174
  pm_when_node_t *cast = (pm_when_node_t *) node;
2463
- memsize->memsize += sizeof(*cast);
2464
- memsize->memsize += (pm_node_list_memsize(&cast->conditions, memsize) - sizeof(pm_node_list_t));
1175
+ pm_node_list_destroy(parser, &cast->conditions);
2465
1176
  if (cast->statements != NULL) {
2466
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
1177
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
2467
1178
  }
2468
1179
  break;
2469
1180
  }
2470
- #line 170 "node.c.erb"
1181
+ #line 110 "prism/templates/src/node.c.erb"
2471
1182
  case PM_WHILE_NODE: {
2472
1183
  pm_while_node_t *cast = (pm_while_node_t *) node;
2473
- memsize->memsize += sizeof(*cast);
2474
- pm_node_memsize_node((pm_node_t *)cast->predicate, memsize);
1184
+ pm_node_destroy(parser, (pm_node_t *)cast->predicate);
2475
1185
  if (cast->statements != NULL) {
2476
- pm_node_memsize_node((pm_node_t *)cast->statements, memsize);
1186
+ pm_node_destroy(parser, (pm_node_t *)cast->statements);
2477
1187
  }
2478
1188
  break;
2479
1189
  }
2480
- #line 170 "node.c.erb"
1190
+ #line 110 "prism/templates/src/node.c.erb"
2481
1191
  case PM_X_STRING_NODE: {
2482
1192
  pm_x_string_node_t *cast = (pm_x_string_node_t *) node;
2483
- memsize->memsize += sizeof(*cast);
2484
- memsize->memsize += (pm_string_memsize(&cast->unescaped) - sizeof(pm_string_t));
1193
+ pm_string_free(&cast->unescaped);
2485
1194
  break;
2486
1195
  }
2487
- #line 170 "node.c.erb"
1196
+ #line 110 "prism/templates/src/node.c.erb"
2488
1197
  case PM_YIELD_NODE: {
2489
1198
  pm_yield_node_t *cast = (pm_yield_node_t *) node;
2490
- memsize->memsize += sizeof(*cast);
2491
1199
  if (cast->arguments != NULL) {
2492
- pm_node_memsize_node((pm_node_t *)cast->arguments, memsize);
1200
+ pm_node_destroy(parser, (pm_node_t *)cast->arguments);
2493
1201
  }
2494
1202
  break;
2495
1203
  }
2496
- #line 198 "node.c.erb"
1204
+ #line 139 "prism/templates/src/node.c.erb"
1205
+ default:
1206
+ assert(false && "unreachable");
1207
+ break;
2497
1208
  }
2498
- }
2499
-
2500
- /**
2501
- * Calculates the memory footprint of a given node.
2502
- */
2503
- PRISM_EXPORTED_FUNCTION void
2504
- pm_node_memsize(pm_node_t *node, pm_memsize_t *memsize) {
2505
- *memsize = (pm_memsize_t) { .memsize = 0, .node_count = 0 };
2506
- pm_node_memsize_node(node, memsize);
1209
+ xfree(node);
2507
1210
  }
2508
1211
 
2509
1212
  /**
@@ -2687,6 +1390,8 @@ pm_node_type_to_str(pm_node_type_t node_type)
2687
1390
  return "PM_INTERPOLATED_SYMBOL_NODE";
2688
1391
  case PM_INTERPOLATED_X_STRING_NODE:
2689
1392
  return "PM_INTERPOLATED_X_STRING_NODE";
1393
+ case PM_IT_LOCAL_VARIABLE_READ_NODE:
1394
+ return "PM_IT_LOCAL_VARIABLE_READ_NODE";
2690
1395
  case PM_IT_PARAMETERS_NODE:
2691
1396
  return "PM_IT_PARAMETERS_NODE";
2692
1397
  case PM_KEYWORD_HASH_NODE:
@@ -3126,9 +1831,9 @@ pm_visit_child_nodes(const pm_node_t *node, bool (*visitor)(const pm_node_t *nod
3126
1831
  pm_visit_node(conditions->nodes[index], visitor, data);
3127
1832
  }
3128
1833
 
3129
- // Visit the consequent field
3130
- if (cast->consequent != NULL) {
3131
- pm_visit_node((const pm_node_t *) cast->consequent, visitor, data);
1834
+ // Visit the else_clause field
1835
+ if (cast->else_clause != NULL) {
1836
+ pm_visit_node((const pm_node_t *) cast->else_clause, visitor, data);
3132
1837
  }
3133
1838
 
3134
1839
  break;
@@ -3147,9 +1852,9 @@ pm_visit_child_nodes(const pm_node_t *node, bool (*visitor)(const pm_node_t *nod
3147
1852
  pm_visit_node(conditions->nodes[index], visitor, data);
3148
1853
  }
3149
1854
 
3150
- // Visit the consequent field
3151
- if (cast->consequent != NULL) {
3152
- pm_visit_node((const pm_node_t *) cast->consequent, visitor, data);
1855
+ // Visit the else_clause field
1856
+ if (cast->else_clause != NULL) {
1857
+ pm_visit_node((const pm_node_t *) cast->else_clause, visitor, data);
3153
1858
  }
3154
1859
 
3155
1860
  break;
@@ -3524,9 +2229,9 @@ pm_visit_child_nodes(const pm_node_t *node, bool (*visitor)(const pm_node_t *nod
3524
2229
  pm_visit_node((const pm_node_t *) cast->statements, visitor, data);
3525
2230
  }
3526
2231
 
3527
- // Visit the consequent field
3528
- if (cast->consequent != NULL) {
3529
- pm_visit_node((const pm_node_t *) cast->consequent, visitor, data);
2232
+ // Visit the subsequent field
2233
+ if (cast->subsequent != NULL) {
2234
+ pm_visit_node((const pm_node_t *) cast->subsequent, visitor, data);
3530
2235
  }
3531
2236
 
3532
2237
  break;
@@ -3742,6 +2447,8 @@ pm_visit_child_nodes(const pm_node_t *node, bool (*visitor)(const pm_node_t *nod
3742
2447
 
3743
2448
  break;
3744
2449
  }
2450
+ case PM_IT_LOCAL_VARIABLE_READ_NODE:
2451
+ break;
3745
2452
  case PM_IT_PARAMETERS_NODE:
3746
2453
  break;
3747
2454
  case PM_KEYWORD_HASH_NODE: {
@@ -4066,14 +2773,8 @@ pm_visit_child_nodes(const pm_node_t *node, bool (*visitor)(const pm_node_t *nod
4066
2773
 
4067
2774
  break;
4068
2775
  }
4069
- case PM_RATIONAL_NODE: {
4070
- const pm_rational_node_t *cast = (const pm_rational_node_t *) node;
4071
-
4072
- // Visit the numeric field
4073
- pm_visit_node((const pm_node_t *) cast->numeric, visitor, data);
4074
-
2776
+ case PM_RATIONAL_NODE:
4075
2777
  break;
4076
- }
4077
2778
  case PM_REDO_NODE:
4078
2779
  break;
4079
2780
  case PM_REGULAR_EXPRESSION_NODE:
@@ -4112,9 +2813,9 @@ pm_visit_child_nodes(const pm_node_t *node, bool (*visitor)(const pm_node_t *nod
4112
2813
  pm_visit_node((const pm_node_t *) cast->statements, visitor, data);
4113
2814
  }
4114
2815
 
4115
- // Visit the consequent field
4116
- if (cast->consequent != NULL) {
4117
- pm_visit_node((const pm_node_t *) cast->consequent, visitor, data);
2816
+ // Visit the subsequent field
2817
+ if (cast->subsequent != NULL) {
2818
+ pm_visit_node((const pm_node_t *) cast->subsequent, visitor, data);
4118
2819
  }
4119
2820
 
4120
2821
  break;
@@ -4226,9 +2927,9 @@ pm_visit_child_nodes(const pm_node_t *node, bool (*visitor)(const pm_node_t *nod
4226
2927
  pm_visit_node((const pm_node_t *) cast->statements, visitor, data);
4227
2928
  }
4228
2929
 
4229
- // Visit the consequent field
4230
- if (cast->consequent != NULL) {
4231
- pm_visit_node((const pm_node_t *) cast->consequent, visitor, data);
2930
+ // Visit the else_clause field
2931
+ if (cast->else_clause != NULL) {
2932
+ pm_visit_node((const pm_node_t *) cast->else_clause, visitor, data);
4232
2933
  }
4233
2934
 
4234
2935
  break;
@@ -4419,11 +3120,16 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
4419
3120
  const pm_arguments_node_t *cast = (const pm_arguments_node_t *) node;
4420
3121
  pm_dump_json_location(buffer, parser, &cast->base.location);
4421
3122
 
4422
- // Dump the flags field
3123
+ // Dump the ArgumentsNodeFlags field
4423
3124
  pm_buffer_append_byte(buffer, ',');
4424
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3125
+ pm_buffer_append_string(buffer, "\"ArgumentsNodeFlags\":", 21);
4425
3126
  size_t flags = 0;
4426
3127
  pm_buffer_append_byte(buffer, '[');
3128
+ if (PM_NODE_FLAG_P(cast, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING)) {
3129
+ if (flags != 0) pm_buffer_append_byte(buffer, ',');
3130
+ pm_buffer_append_string(buffer, "\"CONTAINS_FORWARDING\"", 21);
3131
+ flags++;
3132
+ }
4427
3133
  if (PM_NODE_FLAG_P(cast, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS)) {
4428
3134
  if (flags != 0) pm_buffer_append_byte(buffer, ',');
4429
3135
  pm_buffer_append_string(buffer, "\"CONTAINS_KEYWORDS\"", 19);
@@ -4434,6 +3140,16 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
4434
3140
  pm_buffer_append_string(buffer, "\"CONTAINS_KEYWORD_SPLAT\"", 24);
4435
3141
  flags++;
4436
3142
  }
3143
+ if (PM_NODE_FLAG_P(cast, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT)) {
3144
+ if (flags != 0) pm_buffer_append_byte(buffer, ',');
3145
+ pm_buffer_append_string(buffer, "\"CONTAINS_SPLAT\"", 16);
3146
+ flags++;
3147
+ }
3148
+ if (PM_NODE_FLAG_P(cast, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS)) {
3149
+ if (flags != 0) pm_buffer_append_byte(buffer, ',');
3150
+ pm_buffer_append_string(buffer, "\"CONTAINS_MULTIPLE_SPLATS\"", 26);
3151
+ flags++;
3152
+ }
4437
3153
  pm_buffer_append_byte(buffer, ']');
4438
3154
 
4439
3155
  // Dump the arguments field
@@ -4457,9 +3173,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
4457
3173
  const pm_array_node_t *cast = (const pm_array_node_t *) node;
4458
3174
  pm_dump_json_location(buffer, parser, &cast->base.location);
4459
3175
 
4460
- // Dump the flags field
3176
+ // Dump the ArrayNodeFlags field
4461
3177
  pm_buffer_append_byte(buffer, ',');
4462
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3178
+ pm_buffer_append_string(buffer, "\"ArrayNodeFlags\":", 17);
4463
3179
  size_t flags = 0;
4464
3180
  pm_buffer_append_byte(buffer, '[');
4465
3181
  if (PM_NODE_FLAG_P(cast, PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT)) {
@@ -4728,9 +3444,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
4728
3444
  const pm_block_local_variable_node_t *cast = (const pm_block_local_variable_node_t *) node;
4729
3445
  pm_dump_json_location(buffer, parser, &cast->base.location);
4730
3446
 
4731
- // Dump the flags field
3447
+ // Dump the ParameterFlags field
4732
3448
  pm_buffer_append_byte(buffer, ',');
4733
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3449
+ pm_buffer_append_string(buffer, "\"ParameterFlags\":", 17);
4734
3450
  size_t flags = 0;
4735
3451
  pm_buffer_append_byte(buffer, '[');
4736
3452
  if (PM_NODE_FLAG_P(cast, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
@@ -4803,9 +3519,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
4803
3519
  const pm_block_parameter_node_t *cast = (const pm_block_parameter_node_t *) node;
4804
3520
  pm_dump_json_location(buffer, parser, &cast->base.location);
4805
3521
 
4806
- // Dump the flags field
3522
+ // Dump the ParameterFlags field
4807
3523
  pm_buffer_append_byte(buffer, ',');
4808
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3524
+ pm_buffer_append_string(buffer, "\"ParameterFlags\":", 17);
4809
3525
  size_t flags = 0;
4810
3526
  pm_buffer_append_byte(buffer, '[');
4811
3527
  if (PM_NODE_FLAG_P(cast, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
@@ -4918,9 +3634,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
4918
3634
  const pm_call_and_write_node_t *cast = (const pm_call_and_write_node_t *) node;
4919
3635
  pm_dump_json_location(buffer, parser, &cast->base.location);
4920
3636
 
4921
- // Dump the flags field
3637
+ // Dump the CallNodeFlags field
4922
3638
  pm_buffer_append_byte(buffer, ',');
4923
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3639
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
4924
3640
  size_t flags = 0;
4925
3641
  pm_buffer_append_byte(buffer, '[');
4926
3642
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -5001,9 +3717,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
5001
3717
  const pm_call_node_t *cast = (const pm_call_node_t *) node;
5002
3718
  pm_dump_json_location(buffer, parser, &cast->base.location);
5003
3719
 
5004
- // Dump the flags field
3720
+ // Dump the CallNodeFlags field
5005
3721
  pm_buffer_append_byte(buffer, ',');
5006
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3722
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
5007
3723
  size_t flags = 0;
5008
3724
  pm_buffer_append_byte(buffer, '[');
5009
3725
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -5105,9 +3821,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
5105
3821
  const pm_call_operator_write_node_t *cast = (const pm_call_operator_write_node_t *) node;
5106
3822
  pm_dump_json_location(buffer, parser, &cast->base.location);
5107
3823
 
5108
- // Dump the flags field
3824
+ // Dump the CallNodeFlags field
5109
3825
  pm_buffer_append_byte(buffer, ',');
5110
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3826
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
5111
3827
  size_t flags = 0;
5112
3828
  pm_buffer_append_byte(buffer, '[');
5113
3829
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -5193,9 +3909,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
5193
3909
  const pm_call_or_write_node_t *cast = (const pm_call_or_write_node_t *) node;
5194
3910
  pm_dump_json_location(buffer, parser, &cast->base.location);
5195
3911
 
5196
- // Dump the flags field
3912
+ // Dump the CallNodeFlags field
5197
3913
  pm_buffer_append_byte(buffer, ',');
5198
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3914
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
5199
3915
  size_t flags = 0;
5200
3916
  pm_buffer_append_byte(buffer, '[');
5201
3917
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -5276,9 +3992,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
5276
3992
  const pm_call_target_node_t *cast = (const pm_call_target_node_t *) node;
5277
3993
  pm_dump_json_location(buffer, parser, &cast->base.location);
5278
3994
 
5279
- // Dump the flags field
3995
+ // Dump the CallNodeFlags field
5280
3996
  pm_buffer_append_byte(buffer, ',');
5281
- pm_buffer_append_string(buffer, "\"flags\":", 8);
3997
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
5282
3998
  size_t flags = 0;
5283
3999
  pm_buffer_append_byte(buffer, '[');
5284
4000
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -5377,11 +4093,11 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
5377
4093
  }
5378
4094
  pm_buffer_append_byte(buffer, ']');
5379
4095
 
5380
- // Dump the consequent field
4096
+ // Dump the else_clause field
5381
4097
  pm_buffer_append_byte(buffer, ',');
5382
- pm_buffer_append_string(buffer, "\"consequent\":", 13);
5383
- if (cast->consequent != NULL) {
5384
- pm_dump_json(buffer, parser, (const pm_node_t *) cast->consequent);
4098
+ pm_buffer_append_string(buffer, "\"else_clause\":", 14);
4099
+ if (cast->else_clause != NULL) {
4100
+ pm_dump_json(buffer, parser, (const pm_node_t *) cast->else_clause);
5385
4101
  } else {
5386
4102
  pm_buffer_append_string(buffer, "null", 4);
5387
4103
  }
@@ -5426,11 +4142,11 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
5426
4142
  }
5427
4143
  pm_buffer_append_byte(buffer, ']');
5428
4144
 
5429
- // Dump the consequent field
4145
+ // Dump the else_clause field
5430
4146
  pm_buffer_append_byte(buffer, ',');
5431
- pm_buffer_append_string(buffer, "\"consequent\":", 13);
5432
- if (cast->consequent != NULL) {
5433
- pm_dump_json(buffer, parser, (const pm_node_t *) cast->consequent);
4147
+ pm_buffer_append_string(buffer, "\"else_clause\":", 14);
4148
+ if (cast->else_clause != NULL) {
4149
+ pm_dump_json(buffer, parser, (const pm_node_t *) cast->else_clause);
5434
4150
  } else {
5435
4151
  pm_buffer_append_string(buffer, "null", 4);
5436
4152
  }
@@ -6314,9 +5030,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
6314
5030
  const pm_flip_flop_node_t *cast = (const pm_flip_flop_node_t *) node;
6315
5031
  pm_dump_json_location(buffer, parser, &cast->base.location);
6316
5032
 
6317
- // Dump the flags field
5033
+ // Dump the RangeFlags field
6318
5034
  pm_buffer_append_byte(buffer, ',');
6319
- pm_buffer_append_string(buffer, "\"flags\":", 8);
5035
+ pm_buffer_append_string(buffer, "\"RangeFlags\":", 13);
6320
5036
  size_t flags = 0;
6321
5037
  pm_buffer_append_byte(buffer, '[');
6322
5038
  if (PM_NODE_FLAG_P(cast, PM_RANGE_FLAGS_EXCLUDE_END)) {
@@ -6729,11 +5445,11 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
6729
5445
  pm_buffer_append_string(buffer, "null", 4);
6730
5446
  }
6731
5447
 
6732
- // Dump the consequent field
5448
+ // Dump the subsequent field
6733
5449
  pm_buffer_append_byte(buffer, ',');
6734
- pm_buffer_append_string(buffer, "\"consequent\":", 13);
6735
- if (cast->consequent != NULL) {
6736
- pm_dump_json(buffer, parser, (const pm_node_t *) cast->consequent);
5450
+ pm_buffer_append_string(buffer, "\"subsequent\":", 13);
5451
+ if (cast->subsequent != NULL) {
5452
+ pm_dump_json(buffer, parser, (const pm_node_t *) cast->subsequent);
6737
5453
  } else {
6738
5454
  pm_buffer_append_string(buffer, "null", 4);
6739
5455
  }
@@ -6830,9 +5546,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
6830
5546
  const pm_index_and_write_node_t *cast = (const pm_index_and_write_node_t *) node;
6831
5547
  pm_dump_json_location(buffer, parser, &cast->base.location);
6832
5548
 
6833
- // Dump the flags field
5549
+ // Dump the CallNodeFlags field
6834
5550
  pm_buffer_append_byte(buffer, ',');
6835
- pm_buffer_append_string(buffer, "\"flags\":", 8);
5551
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
6836
5552
  size_t flags = 0;
6837
5553
  pm_buffer_append_byte(buffer, '[');
6838
5554
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -6922,9 +5638,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
6922
5638
  const pm_index_operator_write_node_t *cast = (const pm_index_operator_write_node_t *) node;
6923
5639
  pm_dump_json_location(buffer, parser, &cast->base.location);
6924
5640
 
6925
- // Dump the flags field
5641
+ // Dump the CallNodeFlags field
6926
5642
  pm_buffer_append_byte(buffer, ',');
6927
- pm_buffer_append_string(buffer, "\"flags\":", 8);
5643
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
6928
5644
  size_t flags = 0;
6929
5645
  pm_buffer_append_byte(buffer, '[');
6930
5646
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -7019,9 +5735,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7019
5735
  const pm_index_or_write_node_t *cast = (const pm_index_or_write_node_t *) node;
7020
5736
  pm_dump_json_location(buffer, parser, &cast->base.location);
7021
5737
 
7022
- // Dump the flags field
5738
+ // Dump the CallNodeFlags field
7023
5739
  pm_buffer_append_byte(buffer, ',');
7024
- pm_buffer_append_string(buffer, "\"flags\":", 8);
5740
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
7025
5741
  size_t flags = 0;
7026
5742
  pm_buffer_append_byte(buffer, '[');
7027
5743
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -7111,9 +5827,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7111
5827
  const pm_index_target_node_t *cast = (const pm_index_target_node_t *) node;
7112
5828
  pm_dump_json_location(buffer, parser, &cast->base.location);
7113
5829
 
7114
- // Dump the flags field
5830
+ // Dump the CallNodeFlags field
7115
5831
  pm_buffer_append_byte(buffer, ',');
7116
- pm_buffer_append_string(buffer, "\"flags\":", 8);
5832
+ pm_buffer_append_string(buffer, "\"CallNodeFlags\":", 16);
7117
5833
  size_t flags = 0;
7118
5834
  pm_buffer_append_byte(buffer, '[');
7119
5835
  if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) {
@@ -7329,9 +6045,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7329
6045
  const pm_integer_node_t *cast = (const pm_integer_node_t *) node;
7330
6046
  pm_dump_json_location(buffer, parser, &cast->base.location);
7331
6047
 
7332
- // Dump the flags field
6048
+ // Dump the IntegerBaseFlags field
7333
6049
  pm_buffer_append_byte(buffer, ',');
7334
- pm_buffer_append_string(buffer, "\"flags\":", 8);
6050
+ pm_buffer_append_string(buffer, "\"IntegerBaseFlags\":", 19);
7335
6051
  size_t flags = 0;
7336
6052
  pm_buffer_append_byte(buffer, '[');
7337
6053
  if (PM_NODE_FLAG_P(cast, PM_INTEGER_BASE_FLAGS_BINARY)) {
@@ -7370,9 +6086,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7370
6086
  const pm_interpolated_match_last_line_node_t *cast = (const pm_interpolated_match_last_line_node_t *) node;
7371
6087
  pm_dump_json_location(buffer, parser, &cast->base.location);
7372
6088
 
7373
- // Dump the flags field
6089
+ // Dump the RegularExpressionFlags field
7374
6090
  pm_buffer_append_byte(buffer, ',');
7375
- pm_buffer_append_string(buffer, "\"flags\":", 8);
6091
+ pm_buffer_append_string(buffer, "\"RegularExpressionFlags\":", 25);
7376
6092
  size_t flags = 0;
7377
6093
  pm_buffer_append_byte(buffer, '[');
7378
6094
  if (PM_NODE_FLAG_P(cast, PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE)) {
@@ -7463,9 +6179,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7463
6179
  const pm_interpolated_regular_expression_node_t *cast = (const pm_interpolated_regular_expression_node_t *) node;
7464
6180
  pm_dump_json_location(buffer, parser, &cast->base.location);
7465
6181
 
7466
- // Dump the flags field
6182
+ // Dump the RegularExpressionFlags field
7467
6183
  pm_buffer_append_byte(buffer, ',');
7468
- pm_buffer_append_string(buffer, "\"flags\":", 8);
6184
+ pm_buffer_append_string(buffer, "\"RegularExpressionFlags\":", 25);
7469
6185
  size_t flags = 0;
7470
6186
  pm_buffer_append_byte(buffer, '[');
7471
6187
  if (PM_NODE_FLAG_P(cast, PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE)) {
@@ -7556,9 +6272,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7556
6272
  const pm_interpolated_string_node_t *cast = (const pm_interpolated_string_node_t *) node;
7557
6273
  pm_dump_json_location(buffer, parser, &cast->base.location);
7558
6274
 
7559
- // Dump the flags field
6275
+ // Dump the InterpolatedStringNodeFlags field
7560
6276
  pm_buffer_append_byte(buffer, ',');
7561
- pm_buffer_append_string(buffer, "\"flags\":", 8);
6277
+ pm_buffer_append_string(buffer, "\"InterpolatedStringNodeFlags\":", 30);
7562
6278
  size_t flags = 0;
7563
6279
  pm_buffer_append_byte(buffer, '[');
7564
6280
  if (PM_NODE_FLAG_P(cast, PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN)) {
@@ -7676,6 +6392,15 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7676
6392
  pm_buffer_append_byte(buffer, '}');
7677
6393
  break;
7678
6394
  }
6395
+ case PM_IT_LOCAL_VARIABLE_READ_NODE: {
6396
+ pm_buffer_append_string(buffer, "{\"type\":\"ItLocalVariableReadNode\",\"location\":", 45);
6397
+
6398
+ const pm_it_local_variable_read_node_t *cast = (const pm_it_local_variable_read_node_t *) node;
6399
+ pm_dump_json_location(buffer, parser, &cast->base.location);
6400
+
6401
+ pm_buffer_append_byte(buffer, '}');
6402
+ break;
6403
+ }
7679
6404
  case PM_IT_PARAMETERS_NODE: {
7680
6405
  pm_buffer_append_string(buffer, "{\"type\":\"ItParametersNode\",\"location\":", 38);
7681
6406
 
@@ -7691,9 +6416,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7691
6416
  const pm_keyword_hash_node_t *cast = (const pm_keyword_hash_node_t *) node;
7692
6417
  pm_dump_json_location(buffer, parser, &cast->base.location);
7693
6418
 
7694
- // Dump the flags field
6419
+ // Dump the KeywordHashNodeFlags field
7695
6420
  pm_buffer_append_byte(buffer, ',');
7696
- pm_buffer_append_string(buffer, "\"flags\":", 8);
6421
+ pm_buffer_append_string(buffer, "\"KeywordHashNodeFlags\":", 23);
7697
6422
  size_t flags = 0;
7698
6423
  pm_buffer_append_byte(buffer, '[');
7699
6424
  if (PM_NODE_FLAG_P(cast, PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS)) {
@@ -7724,9 +6449,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
7724
6449
  const pm_keyword_rest_parameter_node_t *cast = (const pm_keyword_rest_parameter_node_t *) node;
7725
6450
  pm_dump_json_location(buffer, parser, &cast->base.location);
7726
6451
 
7727
- // Dump the flags field
6452
+ // Dump the ParameterFlags field
7728
6453
  pm_buffer_append_byte(buffer, ',');
7729
- pm_buffer_append_string(buffer, "\"flags\":", 8);
6454
+ pm_buffer_append_string(buffer, "\"ParameterFlags\":", 17);
7730
6455
  size_t flags = 0;
7731
6456
  pm_buffer_append_byte(buffer, '[');
7732
6457
  if (PM_NODE_FLAG_P(cast, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
@@ -8001,9 +6726,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
8001
6726
  const pm_match_last_line_node_t *cast = (const pm_match_last_line_node_t *) node;
8002
6727
  pm_dump_json_location(buffer, parser, &cast->base.location);
8003
6728
 
8004
- // Dump the flags field
6729
+ // Dump the RegularExpressionFlags field
8005
6730
  pm_buffer_append_byte(buffer, ',');
8006
- pm_buffer_append_string(buffer, "\"flags\":", 8);
6731
+ pm_buffer_append_string(buffer, "\"RegularExpressionFlags\":", 25);
8007
6732
  size_t flags = 0;
8008
6733
  pm_buffer_append_byte(buffer, '[');
8009
6734
  if (PM_NODE_FLAG_P(cast, PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE)) {
@@ -8437,9 +7162,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
8437
7162
  const pm_optional_keyword_parameter_node_t *cast = (const pm_optional_keyword_parameter_node_t *) node;
8438
7163
  pm_dump_json_location(buffer, parser, &cast->base.location);
8439
7164
 
8440
- // Dump the flags field
7165
+ // Dump the ParameterFlags field
8441
7166
  pm_buffer_append_byte(buffer, ',');
8442
- pm_buffer_append_string(buffer, "\"flags\":", 8);
7167
+ pm_buffer_append_string(buffer, "\"ParameterFlags\":", 17);
8443
7168
  size_t flags = 0;
8444
7169
  pm_buffer_append_byte(buffer, '[');
8445
7170
  if (PM_NODE_FLAG_P(cast, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
@@ -8473,9 +7198,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
8473
7198
  const pm_optional_parameter_node_t *cast = (const pm_optional_parameter_node_t *) node;
8474
7199
  pm_dump_json_location(buffer, parser, &cast->base.location);
8475
7200
 
8476
- // Dump the flags field
7201
+ // Dump the ParameterFlags field
8477
7202
  pm_buffer_append_byte(buffer, ',');
8478
- pm_buffer_append_string(buffer, "\"flags\":", 8);
7203
+ pm_buffer_append_string(buffer, "\"ParameterFlags\":", 17);
8479
7204
  size_t flags = 0;
8480
7205
  pm_buffer_append_byte(buffer, '[');
8481
7206
  if (PM_NODE_FLAG_P(cast, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
@@ -8790,9 +7515,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
8790
7515
  const pm_range_node_t *cast = (const pm_range_node_t *) node;
8791
7516
  pm_dump_json_location(buffer, parser, &cast->base.location);
8792
7517
 
8793
- // Dump the flags field
7518
+ // Dump the RangeFlags field
8794
7519
  pm_buffer_append_byte(buffer, ',');
8795
- pm_buffer_append_string(buffer, "\"flags\":", 8);
7520
+ pm_buffer_append_string(buffer, "\"RangeFlags\":", 13);
8796
7521
  size_t flags = 0;
8797
7522
  pm_buffer_append_byte(buffer, '[');
8798
7523
  if (PM_NODE_FLAG_P(cast, PM_RANGE_FLAGS_EXCLUDE_END)) {
@@ -8834,10 +7559,42 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
8834
7559
  const pm_rational_node_t *cast = (const pm_rational_node_t *) node;
8835
7560
  pm_dump_json_location(buffer, parser, &cast->base.location);
8836
7561
 
8837
- // Dump the numeric field
7562
+ // Dump the IntegerBaseFlags field
8838
7563
  pm_buffer_append_byte(buffer, ',');
8839
- pm_buffer_append_string(buffer, "\"numeric\":", 10);
8840
- pm_dump_json(buffer, parser, (const pm_node_t *) cast->numeric);
7564
+ pm_buffer_append_string(buffer, "\"IntegerBaseFlags\":", 19);
7565
+ size_t flags = 0;
7566
+ pm_buffer_append_byte(buffer, '[');
7567
+ if (PM_NODE_FLAG_P(cast, PM_INTEGER_BASE_FLAGS_BINARY)) {
7568
+ if (flags != 0) pm_buffer_append_byte(buffer, ',');
7569
+ pm_buffer_append_string(buffer, "\"BINARY\"", 8);
7570
+ flags++;
7571
+ }
7572
+ if (PM_NODE_FLAG_P(cast, PM_INTEGER_BASE_FLAGS_DECIMAL)) {
7573
+ if (flags != 0) pm_buffer_append_byte(buffer, ',');
7574
+ pm_buffer_append_string(buffer, "\"DECIMAL\"", 9);
7575
+ flags++;
7576
+ }
7577
+ if (PM_NODE_FLAG_P(cast, PM_INTEGER_BASE_FLAGS_OCTAL)) {
7578
+ if (flags != 0) pm_buffer_append_byte(buffer, ',');
7579
+ pm_buffer_append_string(buffer, "\"OCTAL\"", 7);
7580
+ flags++;
7581
+ }
7582
+ if (PM_NODE_FLAG_P(cast, PM_INTEGER_BASE_FLAGS_HEXADECIMAL)) {
7583
+ if (flags != 0) pm_buffer_append_byte(buffer, ',');
7584
+ pm_buffer_append_string(buffer, "\"HEXADECIMAL\"", 13);
7585
+ flags++;
7586
+ }
7587
+ pm_buffer_append_byte(buffer, ']');
7588
+
7589
+ // Dump the numerator field
7590
+ pm_buffer_append_byte(buffer, ',');
7591
+ pm_buffer_append_string(buffer, "\"numerator\":", 12);
7592
+ pm_integer_string(buffer, &cast->numerator);
7593
+
7594
+ // Dump the denominator field
7595
+ pm_buffer_append_byte(buffer, ',');
7596
+ pm_buffer_append_string(buffer, "\"denominator\":", 14);
7597
+ pm_integer_string(buffer, &cast->denominator);
8841
7598
 
8842
7599
  pm_buffer_append_byte(buffer, '}');
8843
7600
  break;
@@ -8857,9 +7614,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
8857
7614
  const pm_regular_expression_node_t *cast = (const pm_regular_expression_node_t *) node;
8858
7615
  pm_dump_json_location(buffer, parser, &cast->base.location);
8859
7616
 
8860
- // Dump the flags field
7617
+ // Dump the RegularExpressionFlags field
8861
7618
  pm_buffer_append_byte(buffer, ',');
8862
- pm_buffer_append_string(buffer, "\"flags\":", 8);
7619
+ pm_buffer_append_string(buffer, "\"RegularExpressionFlags\":", 25);
8863
7620
  size_t flags = 0;
8864
7621
  pm_buffer_append_byte(buffer, '[');
8865
7622
  if (PM_NODE_FLAG_P(cast, PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE)) {
@@ -8951,9 +7708,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
8951
7708
  const pm_required_keyword_parameter_node_t *cast = (const pm_required_keyword_parameter_node_t *) node;
8952
7709
  pm_dump_json_location(buffer, parser, &cast->base.location);
8953
7710
 
8954
- // Dump the flags field
7711
+ // Dump the ParameterFlags field
8955
7712
  pm_buffer_append_byte(buffer, ',');
8956
- pm_buffer_append_string(buffer, "\"flags\":", 8);
7713
+ pm_buffer_append_string(buffer, "\"ParameterFlags\":", 17);
8957
7714
  size_t flags = 0;
8958
7715
  pm_buffer_append_byte(buffer, '[');
8959
7716
  if (PM_NODE_FLAG_P(cast, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
@@ -8982,9 +7739,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
8982
7739
  const pm_required_parameter_node_t *cast = (const pm_required_parameter_node_t *) node;
8983
7740
  pm_dump_json_location(buffer, parser, &cast->base.location);
8984
7741
 
8985
- // Dump the flags field
7742
+ // Dump the ParameterFlags field
8986
7743
  pm_buffer_append_byte(buffer, ',');
8987
- pm_buffer_append_string(buffer, "\"flags\":", 8);
7744
+ pm_buffer_append_string(buffer, "\"ParameterFlags\":", 17);
8988
7745
  size_t flags = 0;
8989
7746
  pm_buffer_append_byte(buffer, '[');
8990
7747
  if (PM_NODE_FLAG_P(cast, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
@@ -9076,11 +7833,11 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9076
7833
  pm_buffer_append_string(buffer, "null", 4);
9077
7834
  }
9078
7835
 
9079
- // Dump the consequent field
7836
+ // Dump the subsequent field
9080
7837
  pm_buffer_append_byte(buffer, ',');
9081
- pm_buffer_append_string(buffer, "\"consequent\":", 13);
9082
- if (cast->consequent != NULL) {
9083
- pm_dump_json(buffer, parser, (const pm_node_t *) cast->consequent);
7838
+ pm_buffer_append_string(buffer, "\"subsequent\":", 13);
7839
+ if (cast->subsequent != NULL) {
7840
+ pm_dump_json(buffer, parser, (const pm_node_t *) cast->subsequent);
9084
7841
  } else {
9085
7842
  pm_buffer_append_string(buffer, "null", 4);
9086
7843
  }
@@ -9094,9 +7851,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9094
7851
  const pm_rest_parameter_node_t *cast = (const pm_rest_parameter_node_t *) node;
9095
7852
  pm_dump_json_location(buffer, parser, &cast->base.location);
9096
7853
 
9097
- // Dump the flags field
7854
+ // Dump the ParameterFlags field
9098
7855
  pm_buffer_append_byte(buffer, ',');
9099
- pm_buffer_append_string(buffer, "\"flags\":", 8);
7856
+ pm_buffer_append_string(buffer, "\"ParameterFlags\":", 17);
9100
7857
  size_t flags = 0;
9101
7858
  pm_buffer_append_byte(buffer, '[');
9102
7859
  if (PM_NODE_FLAG_P(cast, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) {
@@ -9147,18 +7904,6 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9147
7904
  const pm_return_node_t *cast = (const pm_return_node_t *) node;
9148
7905
  pm_dump_json_location(buffer, parser, &cast->base.location);
9149
7906
 
9150
- // Dump the flags field
9151
- pm_buffer_append_byte(buffer, ',');
9152
- pm_buffer_append_string(buffer, "\"flags\":", 8);
9153
- size_t flags = 0;
9154
- pm_buffer_append_byte(buffer, '[');
9155
- if (PM_NODE_FLAG_P(cast, PM_RETURN_NODE_FLAGS_REDUNDANT)) {
9156
- if (flags != 0) pm_buffer_append_byte(buffer, ',');
9157
- pm_buffer_append_string(buffer, "\"REDUNDANT\"", 11);
9158
- flags++;
9159
- }
9160
- pm_buffer_append_byte(buffer, ']');
9161
-
9162
7907
  // Dump the keyword_loc field
9163
7908
  pm_buffer_append_byte(buffer, ',');
9164
7909
  pm_buffer_append_string(buffer, "\"keyword_loc\":", 14);
@@ -9191,9 +7936,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9191
7936
  const pm_shareable_constant_node_t *cast = (const pm_shareable_constant_node_t *) node;
9192
7937
  pm_dump_json_location(buffer, parser, &cast->base.location);
9193
7938
 
9194
- // Dump the flags field
7939
+ // Dump the ShareableConstantNodeFlags field
9195
7940
  pm_buffer_append_byte(buffer, ',');
9196
- pm_buffer_append_string(buffer, "\"flags\":", 8);
7941
+ pm_buffer_append_string(buffer, "\"ShareableConstantNodeFlags\":", 29);
9197
7942
  size_t flags = 0;
9198
7943
  pm_buffer_append_byte(buffer, '[');
9199
7944
  if (PM_NODE_FLAG_P(cast, PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL)) {
@@ -9286,9 +8031,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9286
8031
  const pm_source_file_node_t *cast = (const pm_source_file_node_t *) node;
9287
8032
  pm_dump_json_location(buffer, parser, &cast->base.location);
9288
8033
 
9289
- // Dump the flags field
8034
+ // Dump the StringFlags field
9290
8035
  pm_buffer_append_byte(buffer, ',');
9291
- pm_buffer_append_string(buffer, "\"flags\":", 8);
8036
+ pm_buffer_append_string(buffer, "\"StringFlags\":", 14);
9292
8037
  size_t flags = 0;
9293
8038
  pm_buffer_append_byte(buffer, '[');
9294
8039
  if (PM_NODE_FLAG_P(cast, PM_STRING_FLAGS_FORCED_UTF8_ENCODING)) {
@@ -9383,9 +8128,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9383
8128
  const pm_string_node_t *cast = (const pm_string_node_t *) node;
9384
8129
  pm_dump_json_location(buffer, parser, &cast->base.location);
9385
8130
 
9386
- // Dump the flags field
8131
+ // Dump the StringFlags field
9387
8132
  pm_buffer_append_byte(buffer, ',');
9388
- pm_buffer_append_string(buffer, "\"flags\":", 8);
8133
+ pm_buffer_append_string(buffer, "\"StringFlags\":", 14);
9389
8134
  size_t flags = 0;
9390
8135
  pm_buffer_append_byte(buffer, '[');
9391
8136
  if (PM_NODE_FLAG_P(cast, PM_STRING_FLAGS_FORCED_UTF8_ENCODING)) {
@@ -9500,9 +8245,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9500
8245
  const pm_symbol_node_t *cast = (const pm_symbol_node_t *) node;
9501
8246
  pm_dump_json_location(buffer, parser, &cast->base.location);
9502
8247
 
9503
- // Dump the flags field
8248
+ // Dump the SymbolFlags field
9504
8249
  pm_buffer_append_byte(buffer, ',');
9505
- pm_buffer_append_string(buffer, "\"flags\":", 8);
8250
+ pm_buffer_append_string(buffer, "\"SymbolFlags\":", 14);
9506
8251
  size_t flags = 0;
9507
8252
  pm_buffer_append_byte(buffer, '[');
9508
8253
  if (PM_NODE_FLAG_P(cast, PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING)) {
@@ -9629,11 +8374,11 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9629
8374
  pm_buffer_append_string(buffer, "null", 4);
9630
8375
  }
9631
8376
 
9632
- // Dump the consequent field
8377
+ // Dump the else_clause field
9633
8378
  pm_buffer_append_byte(buffer, ',');
9634
- pm_buffer_append_string(buffer, "\"consequent\":", 13);
9635
- if (cast->consequent != NULL) {
9636
- pm_dump_json(buffer, parser, (const pm_node_t *) cast->consequent);
8379
+ pm_buffer_append_string(buffer, "\"else_clause\":", 14);
8380
+ if (cast->else_clause != NULL) {
8381
+ pm_dump_json(buffer, parser, (const pm_node_t *) cast->else_clause);
9637
8382
  } else {
9638
8383
  pm_buffer_append_string(buffer, "null", 4);
9639
8384
  }
@@ -9656,9 +8401,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9656
8401
  const pm_until_node_t *cast = (const pm_until_node_t *) node;
9657
8402
  pm_dump_json_location(buffer, parser, &cast->base.location);
9658
8403
 
9659
- // Dump the flags field
8404
+ // Dump the LoopFlags field
9660
8405
  pm_buffer_append_byte(buffer, ',');
9661
- pm_buffer_append_string(buffer, "\"flags\":", 8);
8406
+ pm_buffer_append_string(buffer, "\"LoopFlags\":", 12);
9662
8407
  size_t flags = 0;
9663
8408
  pm_buffer_append_byte(buffer, '[');
9664
8409
  if (PM_NODE_FLAG_P(cast, PM_LOOP_FLAGS_BEGIN_MODIFIER)) {
@@ -9673,6 +8418,15 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9673
8418
  pm_buffer_append_string(buffer, "\"keyword_loc\":", 14);
9674
8419
  pm_dump_json_location(buffer, parser, &cast->keyword_loc);
9675
8420
 
8421
+ // Dump the do_keyword_loc field
8422
+ pm_buffer_append_byte(buffer, ',');
8423
+ pm_buffer_append_string(buffer, "\"do_keyword_loc\":", 17);
8424
+ if (cast->do_keyword_loc.start != NULL) {
8425
+ pm_dump_json_location(buffer, parser, &cast->do_keyword_loc);
8426
+ } else {
8427
+ pm_buffer_append_string(buffer, "null", 4);
8428
+ }
8429
+
9676
8430
  // Dump the closing_loc field
9677
8431
  pm_buffer_append_byte(buffer, ',');
9678
8432
  pm_buffer_append_string(buffer, "\"closing_loc\":", 14);
@@ -9749,9 +8503,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9749
8503
  const pm_while_node_t *cast = (const pm_while_node_t *) node;
9750
8504
  pm_dump_json_location(buffer, parser, &cast->base.location);
9751
8505
 
9752
- // Dump the flags field
8506
+ // Dump the LoopFlags field
9753
8507
  pm_buffer_append_byte(buffer, ',');
9754
- pm_buffer_append_string(buffer, "\"flags\":", 8);
8508
+ pm_buffer_append_string(buffer, "\"LoopFlags\":", 12);
9755
8509
  size_t flags = 0;
9756
8510
  pm_buffer_append_byte(buffer, '[');
9757
8511
  if (PM_NODE_FLAG_P(cast, PM_LOOP_FLAGS_BEGIN_MODIFIER)) {
@@ -9766,6 +8520,15 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9766
8520
  pm_buffer_append_string(buffer, "\"keyword_loc\":", 14);
9767
8521
  pm_dump_json_location(buffer, parser, &cast->keyword_loc);
9768
8522
 
8523
+ // Dump the do_keyword_loc field
8524
+ pm_buffer_append_byte(buffer, ',');
8525
+ pm_buffer_append_string(buffer, "\"do_keyword_loc\":", 17);
8526
+ if (cast->do_keyword_loc.start != NULL) {
8527
+ pm_dump_json_location(buffer, parser, &cast->do_keyword_loc);
8528
+ } else {
8529
+ pm_buffer_append_string(buffer, "null", 4);
8530
+ }
8531
+
9769
8532
  // Dump the closing_loc field
9770
8533
  pm_buffer_append_byte(buffer, ',');
9771
8534
  pm_buffer_append_string(buffer, "\"closing_loc\":", 14);
@@ -9798,9 +8561,9 @@ pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *no
9798
8561
  const pm_x_string_node_t *cast = (const pm_x_string_node_t *) node;
9799
8562
  pm_dump_json_location(buffer, parser, &cast->base.location);
9800
8563
 
9801
- // Dump the flags field
8564
+ // Dump the EncodingFlags field
9802
8565
  pm_buffer_append_byte(buffer, ',');
9803
- pm_buffer_append_string(buffer, "\"flags\":", 8);
8566
+ pm_buffer_append_string(buffer, "\"EncodingFlags\":", 16);
9804
8567
  size_t flags = 0;
9805
8568
  pm_buffer_append_byte(buffer, '[');
9806
8569
  if (PM_NODE_FLAG_P(cast, PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING)) {